我试图在PJSUA 2.11的通话中播放16位PCM单声道.wav文件(2.10也发生过这种情况)。日志没有显示任何错误,但我没有听到另一边的任何消息。我已禁用系统音频设备以防止使用系统音频,但启用系统音频时也无法使用。
我有
-
创建了一个端点
-
ep.audDevManager().setNullDev();
-
创建了一个运输工具
-
ep.libStart();
-
创建了一个具有凭据的帐户
-
使用带有默认参数的继承类创建了一个新调用
CallOpParam prm(true);
-
while (call->isActive()) pj_thread_sleep(1000);
在我的通话课上,我试图播放这样的音频:
virtual void onCallMediaState(OnCallMediaStateParam &prm)
{
std::cerr << "received media state" << std::endl;
CallInfo ci = getInfo();
for (unsigned i = 0; i < ci.media.size(); i++) {
if (ci.media[i].type == PJMEDIA_TYPE_AUDIO
&& (ci.media[i].dir == PJMEDIA_DIR_ENCODING || ci.media[i].dir == PJMEDIA_DIR_ENCODING_DECODING)
&& ci.media[i].status == PJSUA_CALL_MEDIA_ACTIVE
) {
AudioMedia aud_med = getAudioMedia(i);
AudioMediaPlayer* player = new AudioMediaPlayer();
player->createPlayer("wav/audio.wav");
player->startTransmit(aud_med);
break;
}
}
}
我尝试了几种播放尝试的变体:除此之外,我尝试在第一个媒体后不中断,或者使用仅初始化一次的AudioMediaPlayer作为类成员。
然而,我从未在远处听到任何声音。我已经验证了这些设备在系统上确实可以闪烁,并且呼叫确实可以连接。
log(接听电话后):
20:27:25.506 inv0x55d724e01988 ....SDP negotiation done: Success
20:27:25.506 pjsua_media.c .....Call 0: updating media..
20:27:25.506 pjsua_media.c ......Call 0: stream #0 (audio) unchanged.
20:27:25.506 pjsua_media.c ......Audio updated, stream #0: G722 (sendrecv)
received media state
20:27:25.506 pjsua_aud.c .....Creating file player: wav/audio.wav..
20:27:25.506 wav_player.c ......File player 'wav/audio.wav' created: samp.rate=44100, ch=1, bufsize=4KB, filesize=178KB
20:27:25.506 pjsua_aud.c ......Player created, id=2, slot=4
20:27:25.506 pjsua_aud.c .....Conf connect: 4 --> 1
20:27:25.506 conference.c ......Port 4 (wav/audio.wav) transmitting to port 1 (sip:<remote number>@192.168.178.1)
我在想这可能与我根本不使用从远程端接收到的音频有关,但我不知道如何在不使用它的情况下丢弃它。音频文件使用pjsip附带的游戏样本在本地PC上播放。