2017-12-19 21 views
0

私は、クライアントとリモートの接続クライアントとのSIPセッションを開始するためのサーバを作成する必要があるプロジェクトを進めていますソフトスイッチ。セッションが開始されると、リアルタイムトランスポートプロトコルを使用してエンドポイント間で音声ストリームを前後に送信する必要があります。私の上記のシナリオを考えると、この問題を解決する方法についていくつか質問があります。RTP(リアルタイム転送プロトコル)を使用してSIP(セッション開始プロトコル)を開始し、メディア(音声)を転送する方法

1)SIPはどのように開始されますか? 私は、SIPは通常、IPテレコミュニケーションデバイスのSIPクライアントによって開始されることを理解しています。しかし、SIPセッションをプログラマチックに開始する場合は、SIPクライアントなしでどのようにしますか?現在、私はPythonを使用しているので、いくつかのライブラリに出くわしました。 simplesip(あまりにも複雑で、私の望むことができるかどうかはわかりません)のように、sippyが有望です。

また、手動でSIP/SDPパケットを手動で作成してSIPセッションを開始できるのであれば、私も考えていました。私はそれをやろうとしてここに車輪を再発明しているように感じる。だから私の質問は、プログラム的にSIPセッションを開始するのですか?ライブラリが使用されている場合、良いライブラリは何ですか?または、プログラムで手動でSIPパケットを作成して送信することはできますか?

2)SIP中にRTPが作成された場合、このRTPチャネルをリモートデバイスに参照して、この参照されたRTPチャネルを使用する方法を教えてください。 オンラインで調査したところ、SIPはメディアを送信するためのサービスを提供せず、セッションを作成するだけだと言われました。実際にはRTPはリアルタイムで物事を行うことを重くしています。したがって、RTPが開始されると、これはソフトウェアの用語で実際に何を意味しますか?それはデバイスに参照できるオブジェクトですか?このRTPにメディアストリームを追加するにはどうしたらいいですか?

+0

ソフトスイッチもSIPユーザエージェントですか? –

答えて

2

1)SIPセッションの設定と保​​守は、インターネットメッセージフォーマット(RFC 5322参照)でメッセージを送受信することによって行われます。テキストメッセージは通常UDPまたはTCPを使用して送信されます。送信するメッセージと送信するタイミングはすべてです。 SIPライブラリはそれを(そしてRTPストリームの送受信と共に)手伝ってくれますが、UDPメッセージの送信方法が分かっていれば、簡単にそれを行うことができます。

要約:SIPセッションを設定するにはSIP INVITE要求メッセージを送信し、相手方はSIP INVITE応答メッセージを返し、SIP ACKメッセージを送信してセッション開始を完了します。通常、INVITE要求には、クライアントが受信できるメディアの種類とIPアドレス/ポートの種類を指定して、本体にSDPオファーが含まれます。次に、INVITE応答は、相手に対して同じものを指定するSDP応答を含む。

SIPプロトコルはRFC 3261、SDPはSDP 4566に記載されています。あなたが少しGoogleの場合は、SIP通信の例をたくさん見つけることができます。

2)SIPはメディアストリームを送受信するためのサービスを提供していない点が正しいです。 SIPは、メディアセッションを設定して詳細を交渉することを他の人に知らせるために使用することができます。メディアストリームの送受信は別々に行う必要があります。もう一度あなたは図書館を使うこともできますし、自分ですることもできます。

RTPストリーム(RFC 3550参照)は、このようなメディアストリームの単なる例です。 RTPストリームを送信することは、RTPパケットの連続ストリーム(通常はUDPパケットの一部として)を送信することを意味します。あらゆるパケットはRTPデータを含んでいます:RTPヘッダとRTPペイロード(実際のオーディオサンプル)。

動作モード: 送信側がローカルオーディオをサンプリングします。それがあるたびに(例えば、)20ms分のオーディオサンプルをRTPパケットとして作成し、これをペイロードとしてUDPパケットに送信します。つまり、20ミリ秒ごとにパケットを送信し、パケットのストリーム(RTPストリーム)を作成します。受信側はこれらのパケットをバッファリングし、各パケットのオーディオサンプルを使用してオーディオを再作成します。

こちらがお役に立てば幸いです。

+0

あなたの答えはありがとうございます。私は実際に私自身のSIPライブラリを書くことによってSIPメッセージを生成することができました。私は同じネットワーク上で動作しているSIPサーバでスクリプトをテストしましたが、すべて正常に動作します。しかし、私が招待状をファイアウォールを介して別のネットワークにあるSIPサーバに送信しようとすると、私のパケットはファイアウォールによってブロックされます。私はこの問題に関する新しい質問を投稿しました。これに関するいくつかの洞察を提供してください。 https://stackoverflow.com/questions/48473828/whats-the-encoding-used-in-sip-or-in-sip-alg-in-firewalls – Vino

+0

私は持っています。 SIPとファイアウォール(NAT)は厳しい試合であることが判明しています。主に、SIPメッセージで使用されるIPアドレスがファイアウォールの一方の側でのみ有効であるためです。 – Bucq

関連する問題