[英]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.