重新串流(轉發)UDP-Live-Video-Stream(使用winsock)會降低視訊品質嗎?

重新串流(轉發)UDP-Live-Video-Stream(使用winsock)會降低視訊品質嗎?

因此,我使用 ffmpeg 使用 UDP 協定將即時網路攝影機串流到連接埠 1111 :

ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mpegts udp://localhost:1111

當我直接透過 ffplay 從 1111 連接埠播放時,一切正常:

ffplay udp://localhost:1111

我得到的視頻質量是這樣的:

在此輸入影像描述

所以我想,我可以寫一些winsock程式碼偵聽連接埠 1111 並將其捕獲的任何 UDP 封包轉送至連接埠 2222。因此,我可以模擬我正在串流到連接埠 2222。

' // Please note that this is the simplified code - cause it worked
' // i've just post the key lines
Winsock1.Bind 1111
Winsock2.remotePort = 2222

WinSock1.GetData myPacket
Winsock2.SendData myPacket

然後我嘗試使用 ffplay 從連接埠 2222 播放串流:

ffplay udp://localhost:2222

好吧,我不知道為什麼影片品質變得這麼差:

在此輸入影像描述

關鍵是,我已經按照與串流媒體來源相同的順序發送了相同的 UDP 封包。這裡可能出了什麼問題?


PS:我已經嘗試過使用 TCP 進行類似的實驗,但最終結果的視訊品質與直接串流一樣好。那麼,這可能是 UDP 的問題嗎?


PS2:我透過用偵聽連接埠 2222 的套接字取代 ffplay 並列印所有收到的封包來測試 UDP 封包遺失和混亂。但結果是所有 10,000 多個資料包均按正確順序排列且沒有遺失。這是多麼瘋狂的現象?

相關內容