[英]PJSUA2 - Recording call audio to wav file
我正在嘗試使用PJSUA2將來電直接記錄到wav文件中,但是聽不到wav文件中的任何音頻。
代碼如下:
void SipCall::onCallMediaState(pj::OnCallMediaStateParam& /*prm*/)
{
pj::CallInfo call_info = getInfo();
pj::AudioMedia* audio_media = 0;
for (unsigned int i = 0; i < call_info.media.size(); ++i) {
if (call_info.media[i].type == PJMEDIA_TYPE_AUDIO) {
audio_media = static_cast<pj::AudioMedia*>(getMedia(i));
break;
}
}
if (audio_media != 0) {
try {
pj::AudioMediaRecorder recorder;
recorder.createRecorder("file.wav");
audio_media->startTransmit(recorder);
pj_thread_sleep(5000);
audio_media->stopTransmit(recorder);
}
catch (pj::Error& err) {
qWarning("[SipAccount::onIncomingCall] : Failed to record call to %s. Error = %s", "file.wav", err.info().data());
}
}
}
關於PJSUA2的文檔很差,所以有人知道我在做什么錯嗎?
存在一個問題,因為AudioMediaRecorder對象在創建后就超出了范圍。 如果您使其成為班級的成員,則將可以進行以下操作。
void SipCall::onCallMediaState(pj::OnCallMediaStateParam& /*prm*/)
{
pj::CallInfo call_info = getInfo();
pj::AudioMedia* audio_media = 0;
for (unsigned int i = 0; i < call_info.media.size(); ++i) {
if (call_info.media[i].type == PJMEDIA_TYPE_AUDIO) {
audio_media = static_cast<pj::AudioMedia*>(getMedia(i));
break;
}
}
if (audio_media != 0) {
try {
recorder.createRecorder("file.wav");
audio_media->startTransmit(recorder);
}
catch (pj::Error& err) {
qWarning("[SipAccount::onIncomingCall] : Failed to record call to %s. Error = %s", "file.wav", err.info().data());
}
}
}
在下面的onCallState()方法中進行任何必要的清理:
void SipCall::onCallState(pj::OnCallStateParam& prm)
{
int i = prm.e.type;
i = 0;
pj::CallInfo call_info = getInfo();
switch (call_info.state) {
case PJSIP_INV_STATE_DISCONNECTED:
// Add clean up code here
delete this;
break;
case PJSIP_INV_STATE_CONFIRMED:
break;
default:
break;
}
}
您做錯了的事情是在onCallMediaState
的線程中等待。 為了進一步處理該調用,該線程必須繼續運行。 因此,您創建了記錄器,等待(什么都沒發生,因此您什么也不記錄),關閉記錄器,繼續通話。 因此,沒有任何記錄。 它與范圍無關,因為在您的情況下,記錄儀在超出范圍時已經不做任何記錄。
實際上,您需要做的主要事情是不要在onCallMediaState
的線程中等待,讓調用繼續進行,並在銷毀呼叫時銷毀記錄器。 為此,您當然需要從SipCall::onCallMediaState
獲取記錄器聲明,或者正如您所說的,記錄器在完成其工作之前將被銷毀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.