1

メディア セッションの開始と SIP クライアントとの結合に問題があります。RFCに記載されている許容可能なシーケンスと、私が読んだ例に従って、同じリクエストテンプレートを再利用して次のリクエストをサーバーに送信する再帰的SIPクライアントを設計しました。私が知る限り、SIP部分はサーバーへの招待と認証にうまく登録されています。コンテンツヘッダーを埋める必要があるため、クライアントへの呼び出しをまだ完了していません(まだ完了していないので、サーバーから503を取得しますが、問題ないと思います)。

長い間、私はメディア セッションをどこから始めればよいかわかりませんでしたが、ゆっくりと JMF の使用方法を学び、RTP 送信を処理するオブジェクトを構築しました。今、私は交差点に立っています。一方、SIP シグナリングはありますが、招待を完了するには SDP コンテンツ ヘッダーが必要です。もう一方には、p2p の方法を知っている RTP があります。

私のデザインを完成させるために、次の質問についてあなたの助けが必要です:

  1. オーディオ/ビデオ形式を JMF から SDP メディア ヘッダーに変換する簡単な//シンプルな//実装された方法はありますか? または、コンテンツヘッダーのすべてのパラメーターを入力するジェネレーターでさえ、コンテンツヘッダーを高速に生成しますか、またはこれを自分で実装する必要がありますか?

  2. SDK の構築が完了し、SIP が起動して実行され、サーバーから OK 応答が返された場合 (呼び出しなどすべての後)、メディア セッションを開始するにはどうすればよいですか? SIP 招待で送信した発信者の詳細に従って p2p を接続しますか?

  3. 2が正しい場合、固定電話への接続はどうなりますか? 固定電話は、OK をサーバーに送り返すと、特定のポートで RTP セッションをリッスン/開始することを認識していますか?

それとも私はすべて間違っていましたか?:-/

私が得ることができる助けに本当に感謝しています.答えをどこでも探しましたが、明確ではありません.質問2はあたかも当たり前のことであるかのように無視されます.

前もってありがとう、Adam Zehavi。

追加した:

まず、あなたの応答と、私を助けるために時間を割いてくれてありがとう。

質問 2 に戻ります。

OK 応答を取得すると、SIP ユーザー エージェント サーバー (UAS) がリッスンしている IP ソケット ( ADDRESS:PORT が正しいという意味ですか? ) と、それが受け入れて RTP の送信を開始できるコーデックがわかります。

了解しました。別のことを知りたかったのですが、RTP パケットを UAS に送信するこの会話中に、UAS は両方の UAC 間のブリッジとして使用します。

さて... SIP を使用して会話をインスタンス化し、クライアント情報を一方から他方に送信し、仲介者 (UAS) なしで 2 台のコンピューター間で P2P を確立し、SIP セッションを破棄できますか?

私は今自分自身をよりよく説明したことを願っています...

ありがとう、アダム。

4

1 に答える 1

4

1については、JMFについて何も知らないので直接答えることはできませんが、SDPはSIPとは異なり、実際には複雑な標準ではないため、SDPパケットの構築はそれほど難しくありません。SDP パケットを構築するために最低限必要なのは、提供するコーデックと、RTP を受け入れる IP ソケットです。

2 については、OK 応答を取得すると、SIP ユーザー エージェント サーバー (UAS) がリッスンしている IP ソケットと、UAS が受け入れて RTP の送信を開始できるコーデックがわかります。同時に、UAS からの RTP の受信を開始する必要があります。これは、Ok の送信と同時に送信を開始するためです。もちろん、Ok 応答に応答して SIP ACK 要求を送信する必要もあります。そうしないと、一部の UAS は応答が得られなかったと見なし、しばらくしてから通話を終了します。独自の SIP スタックを書き始めたばかりの場合、道のりはまだ長いです。

3 については、はい。ただし、固定電話とは、実際には SIP から PSTN へのゲートウェイを意味します (PSTN 側は、ISDN、SSL、またはアナログのようなものになります)。PSTN ゲートウェイの SIP 側は、他の SIP UAS と同じであり、INVITE 要求を受け入れると、要求で指定されたソケットに RTP の送信を開始し、同様に、OK に配置したソケットで RTP のリッスンを開始します。 SIP クライアントに送り返される応答。

アップデート

さて... SIP を使用して会話をインスタンス化し、クライアント情報を一方から他方に送信し、仲介者 (UAS) なしで 2 台のコンピューター間で P2P を確立し、SIP セッションを破棄できますか?

答えはイエスですが、用語を少し混乱させています。確立された SIP コールはセッションと呼ばれ、常にユーザー エージェント クライアント (UAC) とユーザー エージェント サーバー (UAS) の間にあります。すべての SIP エージェントは、UAC または UAS のいずれかの役割で機能できると想定されています。この 2 つの役割の主な違いは、UAC が呼び出しを開始し、UAS がそれに応答することです。特定の SIP デバイスは、開始するコールに対して UAC の役割を持ち、応答するコールに対して UAS の役割を持ちます。

この UAC と UAS の説明が関連するのはなぜですか? すべての SIP 通信はピアツーピアであるためです。SIP はクライアント/サーバー プロトコルではありません。これはピアツーピア プロトコルです。SIP プロキシサーバーまたは SIP PSTNゲートウェイを操作する VoIP プロバイダーが存在するため、混乱が生じます。

したがって、あなたが実際に尋ねたい質問は、UAC-to-B2BUA-to-UAS (実際には 2 つの別個の呼び出しまたは SIP セッション: UAC-to-UAS/UAC-to-UAS) の間で SIP 呼び出しを行うことができるということだと思います。メディアが B2BUA をバイパスし、代わりにどちらかの端で UAC と UAS の間を直接移動します。その質問に対する答えはイエスです。Asterisk のような B2BUA には canreinvite と呼ばれる SIP 構成オプションがあり、yes に設定すると、RTP がそれ自体を介してブリッジされるのではなく、コール エンドポイント間で直接流れるように応答されると、コールのいずれかの端に re-INVITE が送信されます。もちろん、コーデックのトランスコーディング、録音、または同等の機能が必要な場合は、re-INVITE を試行しません。別のアプローチは、OpenSER で使用されるような従来の SIP プロキシ アプローチです。はメディアをブリッジするようにはまったく設計されておらず、それを介したすべてのコールは常に、RTP がコールの両端の SIP デバイス間で直接行われることになります。OpenSER は、UAC から受信した要求を UAS に転送するだけで、追加の SIP ヘッダーを 1 つまたは 2 つ追加および/または変更するだけで、INVITE 要求は、UAC が UAS に直接送信した場合とまったく同じように機能します。 .

すべてが泥のように澄んでいますか?以下に、役立つ参考資料へのリンクをいくつか示します。

Tech-invite - SIP シナリオの非常に良い例,

RFC5359 セッション開始プロトコル サービスの例- その他の例,

SIP ソーサリー フォーラム- 私が運営する公共サービスのフォーラム サイトで、SIP に関する詳しい質問が必要な場合に備えて、SIP に関する知識のある少数の人々が頻繁に訪れます。

于 2010-05-27T00:52:34.507 に答える