Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sip pjsua自定义sdp_Sip_Pjsip_Sdp - Fatal编程技术网

Sip pjsua自定义sdp

Sip pjsua自定义sdp,sip,pjsip,sdp,Sip,Pjsip,Sdp,我正在使用pjsua创建简单的SIPUA。我需要在传出的邀请请求中插入自定义正文(SDP)。据我所知,pjsua不支持定制SDP,我需要使用更多的低级API来实现。但现在我必须找到任何粗鲁的技巧/黑客/修补程序来在pjsua生成的邀请中插入自定义SDP 这就是问题所在:我该如何做呢?看似简单的解决方案是修改pjsua源代码。关键是在传入和传出呼叫的代码路径上,使用自定义SDP创建一个pjmedia_会话。你想看看pjsua\u call\u make\u call(),pjsua\u call\

我正在使用pjsua创建简单的SIPUA。我需要在传出的邀请请求中插入自定义正文(SDP)。据我所知,pjsua不支持定制SDP,我需要使用更多的低级API来实现。但现在我必须找到任何粗鲁的技巧/黑客/修补程序来在pjsua生成的邀请中插入自定义SDP


这就是问题所在:我该如何做呢?

看似简单的解决方案是修改pjsua源代码。关键是在传入和传出呼叫的代码路径上,使用自定义SDP创建一个
pjmedia_会话。你想看看
pjsua\u call\u make\u call()
pjsua\u call\u answer()
pjsua\u call\u get\u media\u session()
。如果我没记错的话,SDP在接到电话之前不会被处理


您仍然需要学习核心pjsip库。毕竟,pjsua使用它。此解决方案并不简单,但符合黑客的一般定义。:)

您有不同的方法来修改请求的SDP正文:

  • 您可以使用pjsip_endpt_create_request构建自定义请求,并直接使用pjsip_tx_数据结构。在这种情况下,您可以使用pjsip_msg_body_create(http://www.pjsip.org/pjsip/docs/html/group_PJSIP_MSG__BODY.htm)通过将类型、子类型和自定义主体作为pj_stru_t指针传递。此函数的响应应存储在pjsip_tx_数据的字段msg.body中

  • 另一方面,如果您使用的是pjsua_msg_数据结构,并且您不介意处理多个实体,那么您可以将来自pjsip_msg_body_create的响应存储到
    pjsip_multipart_part(具体到body字段中),并将其添加到pjsup_msg_数据对象内的multipart_parts字段中

  • 您可以使用pjsua的on_create_media_transport回调创建自己的媒体传输。这有点复杂,但到目前为止,更灵活。您将能够定义几个与传输相关的回调(send_rtp、send_rtcp等),如果我没记错的话,其中一个调用SDP body encoding,允许您修改或设置自己的回调


  • 希望这会有所帮助。

    如果您使用PJSUA2,您可以使用onCallSdpCreated()和on_call_sdp_created()来设置自定义sdp。

    谢谢,这正是我在这里等待答案时所做的事情)并且它可以工作。@Doob pjmedia_Session似乎在pjsip 2.0中不可用