如何使用PJSIP获得呼叫的conf端口?

时间:2014-08-12 14:30:03

标签: pjsip

使用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。

我希望我很清楚。如果有人有想法或解决我的问题的轨道?

由于

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));