2012-08-09 78 views
0

我使用pjsua來創建簡單的SIP UA。我需要在傳出的INVITE請求中插入自定義正文(SDP)。據我所知,pjsua不支持自定義的SDP,我需要使用更多的低級API來完成它。但現在我必須找到任何粗魯的技巧/黑客/修補程序來插入自定義的SDP在pjsua生成的INVITE中。pjsua自定義sdp

所以這是一個問題:我怎麼能這樣做呢?

回答

0

看似簡單的解決方案是修改pjsua源。關鍵是在傳入和傳出呼叫的代碼路徑上創建自定義SDP外的pjmedia_session。你想看看pjsua_call_make_call()pjsua_call_answer()pjsua_call_get_media_session()。如果我的記憶爲我服務,SDP不會被處理,直到呼叫被回答。

你還是要學的核心PJSIP庫。畢竟,pjsua使用它。這個解決方案並不簡單,但符合黑客的一般定義。 :)

+0

謝謝,這正是我所做的,而在等待答案在這裏)和它的作品。 – Doob 2012-08-14 10:33:25

+0

@Doob pjmedia_sesison似乎在pjsip 2.0中不可用 – onmyway133 2013-01-29 11:54:55

0

你有不同的方式來修改請求的SDP主體:

  1. 您可以構建使用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域中。

  2. 在另一方面,如果您使用的是pjsua_msg_data結構,你不介意處理多個機構,可以存儲從pjsip_msg_body_create響應爲
    pjsip_multipart_part(特別是進入體內場),並添加它到pjsup_msg_data對象內的multipart_parts字段。

  3. 您可以通過使用pjsua的on_create_media_transport回調創建自己的媒體傳輸。這有點複雜,但是到目前爲止,更加靈活。你將能夠定義幾個與傳輸有關的回調函數(send_rtp,send_rtcp等),如果我沒有記錯的話,其中一個被調用SDP主體編碼,允許你修改它或設置你自己的。

希望這會有所幫助。