1

私は単純な SIP UA を作成するために pjsua を使用しています。発信 INVITE リクエストにカスタム ボディ (SDP) を挿入する必要があります。私の知る限り、pjsua はカスタム SDP をサポートしていません。そのためには、より低レベルの API を使用する必要があります。しかし今のところ、pjsua で生成された INVITE にカスタム SDP を挿入するための失礼なトリック/ハック/ホットフィックスを見つける必要があります。

それが問題です:どうすればそれができますか?

4

3 に答える 3

1

リクエストの SDP 本文を変更するには、さまざまな方法があります。

  1. pjsip_endpt_create_request を使用してカスタム リクエストを作成し、pjsip_tx_data 構造体を直接操作できます。この場合、pjsip_msg_body_create (http://www.pjsip.org/pjsip/docs/html/group_ PJSIP _MSG__BODY.htm) を使用して、タイプ、サブタイプ、およびカスタム ボディを pj_str_t ポインターとして渡すことができます。この関数の応答は、pjsip_tx_data のフィールド msg.body に格納する必要があります。

  2. 一方、pjsua_msg_data 構造体を使用していて、複数の本文を処理してもかまわない場合は、pjsip_msg_body_create からの応答を
    pjsip_multipart_part (具体的には body フィールド) に格納し、それを pjsup_msg_data 内の multipart_parts フィールドに追加できます。物体。

  3. pjsua の on_create_media_transport コールバックを使用して、独自のメディア トランスポートを作成できます。これはもう少し複雑ですが、はるかに柔軟です。いくつかのトランスポート関連のコールバック (send_rtp、send_rtcp など) を定義することができます。私の記憶が正しければ、そのうちの 1 つが SDP 本体エンコーディングで呼び出され、それを変更したり、独自に設定したりできます。

お役に立てれば。

于 2012-08-12T18:18:38.210 に答える
1

一見単純な解決策は、pjsua のソースを変更することです。重要なのはpjmedia_session、着信コールと発信コールの両方のコード パスでカスタム SDP を作成することです。pjsua_call_make_call()pjsua_call_answer()およびを調べますpjsua_call_get_media_session()。私の記憶が正しければ、通話に応答するまで SDP は処理されません。

コアの pjsip ライブラリを学習する必要があります。結局、pjsuaはそれを使用します。このソリューションは単純ではありませんが、ハッキングの一般的な定義に適合します。:)

于 2012-08-11T01:52:18.757 に答える
1

PJSUA2 を使用する場合、onCallSdpCreated() および on_call_sdp_created() を使用してカスタム sdp を設定できます。

于 2018-10-25T07:05:44.423 に答える