我正在使用 pjsua 创建简单的 SIP UA。我需要在传出的邀请请求中插入自定义正文 (SDP)。据我所知,pjsua 不支持自定义 SDP,需要使用更多的底层 API 来实现。但是现在我必须找到任何粗鲁的技巧/黑客/修补程序来在 pjsua 生成的邀请中插入自定义 SDP。
所以这就是问题:我该怎么做?
看似简单的解决方法就是修改pjsua源码。pjmedia_session
关键是在传入和传出呼叫的代码路径上创建自定义 SDP。你想调查pjsua_call_make_call()
,pjsua_call_answer()
和pjsua_call_get_media_session()
. 如果我没记错的话,在接听电话之前不会处理 SDP。
您仍然需要学习核心 pjsip 库。毕竟,pjsua 使用它。这个解决方案并不简单,但符合黑客的一般定义。:)
您有不同的方法来修改请求的 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 正文编码上调用的,允许您对其进行修改或设置自己的。
希望这可以帮助。
如果您使用 PJSUA2,您可以使用 onCallSdpCreated() 和 on_call_sdp_created() 来设置自定义 sdp。