簡體   English   中英

如何修改通過C#代理傳遞的RTSP數據

[英]How to modify RTSP data as it is being passed through c# proxy

我正在為使用RTSP傳輸視頻內容的應用程序編寫代理。 它的基本工作原理如下:

  • 應用程序(服務器)在本地主機端口8554上提供RTSP流。
  • 希望連接到此流的客戶端在本地主機端口8553上連接到我的代理。
  • 我的代理服務器連接到本地主機端口8554上的RTSP流(服務器),並在客戶端和服務器之間傳遞網絡流量(字節)。 (我根本不檢查數據包,我只是讀取一個流中的字節,然后將這些字節傳遞給另一流。)

由於RTSP同時使用TCP和UDP通信,因此我必須在代理服務器上同時具有這兩種協議的偵聽器,但是,我還沒有實現UDP部分。 目前,我只是在研究TCP,該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)代替? 顯然,對通過代理傳遞的每條消息進行字符串搜索不是最佳選擇,因為這將意味着在重新打包並繼續發送之前先對每條消息進行拆包和檢查。

我已經解決了這個問題。 由於RTSP協議的TCP連接通常僅包含控制消息,因此此處傳遞的消息數量不是很多(如果是開始回放的簡單請求,則從每一側發送5或6條消息,最后,結束)。 大流量將通過UDP連接處理。

這樣,如果我解壓縮,處理和重新打包通過TCP發送的消息,就不會引起較大的性能問題。 因此,我只是閱讀了該程序包,根據需要替換了必要的IP地址,僅此而已。 我還需要執行此操作以讀取客戶端和服務器協商的UDP端口,以便我的代理可以介於兩者之間。 由於TCP上的流量很低,因此我能夠做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM