ビデオ コンテンツのストリーミングに 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) に置き換えられるように、プロキシ上のメッセージを変更するにはどうすればよいですか? 明らかに、プロキシを通過する各メッセージに対して文字列検索を行うのは最適ではありません。これは、再パックして送信する前に、各メッセージをアンパックして検査することを意味するためです。