PJSUA2-将通话音频录制到WAV文件 [英] PJSUA2 - Recording call audio to wav file
本文介绍了PJSUA2-将通话音频录制到WAV文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用PJSUA2尝试直接将来电记录到wav文件中,但是听不到wav文件中的任何音频.
Using PJSUA2 I'm trying to record an incoming call directly to a wav file but can't hear any audio in the wav file.
以下代码:
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的文档很差,所以有人知道我在做什么错吗?
There's poor documentation on PJSUA2 so does anyone have any idea what I'm doing wrong?
推荐答案
出现了一个问题,因为AudioMediaRecorder对象在创建后就超出了范围.如果您使其成为班级的成员,则将可以进行以下操作.
There was a problem because the AudioMediaRecorder object went out of scope just after it was created. If you make it a member of the class the following will work.
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()方法中进行任何必要的清理:
Do any necessary cleanup in the onCallState() method below:
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;
}
}
这篇关于PJSUA2-将通话音频录制到WAV文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文