2

ビデオ コンテンツのストリーミングに RTSP を使用するアプリケーションのプロキシを作成しています。基本的には次のように機能します。

  • アプリケーション (サーバー) は、RTSP ストリームを localhost ポート 8554 で利用できるようにします。
  • このストリームに接続したいクライアントは、localhost ポート 8553 で私のプロキシに接続します。
  • 私のプロキシは、localhost ポート 8554 で RTSP ストリーム (サーバー) に接続し、クライアントとサーバーの間でネットワーク トラフィック (バイト) を渡します。(私はパケットをまったく検査しません。単純に一方のストリームでバイトを読み取り、それらのバイトをもう一方のストリームに渡します。)

RTSP は TCP と UDP の両方の通信を使用するため、プロキシで両方のプロトコルのリスナーを用意する必要がありますが、UDP の部分はまだ実装していません。現時点では、ビデオ転送を開始するための「ハンドシェイク」を本質的に処理する TCP に取り組んでいます。UDP を介した実際のビデオ転送は、私の次のステップになります。

ここで質問です。メッセージ (「OPTIONS」、「DESCRIBE」、「SETUP」など) をプロキシと共に正常に渡しています。問題は、メッセージの内容自体にストリーミング サーバーに関する情報が含まれていることです。具体的には、サーバーがクライアントの「DESCRIBE」リクエストに応答すると、次のように返されます。

Content-Base: rtsp://127.0.0.1:8554/nurv/

クライアントに渡す前に、プロキシでこれを次のように変更する必要があります。

Content-Base: rtsp://127.0.0.1:8553/nurv/

現時点では、クライアントが後続の「SETUP」リクエストを発行すると、次のようにリクエストされるためです。

SETUP rtsp://127.0.0.1:8554/nurv/track1 RTSP/1.0

つまり、実際のストリーミングでは、ポート 8553 でプロキシをバイパスし、8554 でストリームに直接接続します。

実際のサーバーへの参照 (つまり 127.0.0.1:8554) がプロキシへの参照 (つまり 127.0.0.1:8553) に置き換えられるように、プロキシ上のメッセージを変更するにはどうすればよいですか? 明らかに、プロキシを通過する各メッセージに対して文字列検索を行うのは最適ではありません。これは、再パックして送信する前に、各メッセージをアンパックして検査することを意味するためです。

4

1 に答える 1

1

私はこの問題を解決しました。通常、RTSP プロトコルの TCP 接続には制御メッセージしか含まれていないため、ここで渡されるメッセージの数はそれほど多くありません (再生を開始する単純な要求の場合、各側から 5 または 6 であり、最後に、終了します)。大きなトラフィックは、UDP 接続を介して処理されます。

そのため、TCP 経由で送信されるメッセージをアンパック、操作、および再パッケージ化しても、大きなパフォーマンスの問題は発生しません。だから私はパッケージを読んで、必要に応じて必要なIPアドレスを置き換えてください。クライアントとサーバーがネゴシエートする UDP ポートを読み取って、プロキシが間に入るようにするためにも、これを行う必要があります。TCP 経由のトラフィックが少ないので、これを行うことができます。

于 2013-05-15T09:11:05.687 に答える