使用PJSIP,我试图通过SIP播放波形文件。我能够做到这一点,但硬编码输出端口:
pjsua_conf_connect(pjsua_player_get_conf_port(player_id), 1);
这项工作做得很好。
14:17:50.596 conference.c .Port 2 (s.wav) transmitting to port 1 (sip:81@XXX.XXX.XXX.XXX)
在我的测试中我知道输出端口是1,但在生产时我不知道它的数量。 如果我试图从pjsua_call_info结构中获取它,我会得到另一个数字。
读取conf_port的代码:
int play_file(pjsua_call_info *ci){
//Some code to create the file player
printf("*************Port is %d\n", ci->conf_slot);
我的输出是这样的:
*************Port is 284260
这个数字是284260,但我希望是1。
我希望我很清楚。如果有人有想法或解决我的问题的轨道?
由于
答案 0 :(得分:1)
我相信您正在尝试使用pjsua播放器播放wave文件,然后尝试通过呼叫对正在播放的流进行会议。
您必须使用pjsua_call_get_conf_port
来获取呼叫的配置端口。
pj_str_t fName = pj_str("somefile.wav"); //give full path if it's in a different directory
pj_status_t status;
pjsua_player_id playerId;
status = pjsua_player_create(&fName,0,&playerId);
if(status != PJ_SUCCESS)
return;
//To play on the default output device.
//If you wish to set a particular sound device, you can use the 'pjsua_set_snd_dev' function.
//Use 'pjsua_enum_aud_devs' to get a list of devices connected to your system.
pjsua_conf_connect(pjsua_player_get_conf_port(playerId),0);
//To play on a ongoing call with the call id in variable 'callId'
pjsua_conf_connect(pjsua_player_get_conf_port(playerId),pjsua_call_get_conf_port(callId));