我正在使用pjsua来创建简单的SIP UA。我需要在传出的INVITE请求中插入自定义正文(SDP)。据我所知,pjsua不支持自定义SDP,我需要使用更多低级API来实现它。但是现在我必须找到任何粗鲁的技巧/黑客/修补程序来在pjsua生成的INVITE中插入自定义SDP。
这就是问题:我怎么能这样做?
答案 0 :(得分:1)
看似简单的解决方案是修改pjsua源。关键是在传入和传出呼叫的代码路径上从您的自定义SDP中创建pjmedia_session
。你想看看pjsua_call_make_call()
,pjsua_call_answer()
和pjsua_call_get_media_session()
。如果我的记忆对我有用,那么在接听电话之前不会处理SDP。
您仍然需要学习核心pjsip库。毕竟,pjsua使用它。这个解决方案并不简单,但符合黑客的一般定义。 :)
答案 1 :(得分:1)
您可以通过不同的方式修改请求的SDP正文:
您可以使用pjsip_endpt_create_request构建自定义请求,并直接使用pjsip_tx_data结构。在这种情况下,您可以通过将类型,子类型和自定义正文作为pj_str_t传递来使用pjsip_msg_body_create(http://www.pjsip.org/pjsip/docs/html/group_PJSIP_MSG__BODY.htm)指针。该函数的响应应存储在pjsip_tx_data的字段msg.body中。
另一方面,如果您使用的是pjsua_msg_data结构,并且不介意处理多个实体,则可以将pjsip_msg_body_create的响应存储到一个中 pjsip_multipart_part(特别是在body字段中)并将其添加到pjsup_msg_data对象内的multipart_parts字段。
您可以使用pjsua的on_create_media_transport回调创建自己的媒体传输。这有点复杂,但到目前为止,更灵活。你将能够定义几个与传输相关的回调(send_rtp,send_rtcp等),如果我没记错的话,其中一个被调用SDP主体编码,允许你修改它或设置你自己的。
< / LI> 醇>希望这有帮助。
答案 2 :(得分:1)
如果使用PJSUA2,则可以使用onCallSdpCreated()和on_call_sdp_created()设置自定义sdp。