重新流式传输(转发)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:我通过将 ffplay 替换为监听端口 2222 的套接字并打印出所有收到的数据包来测试 UDP 数据包丢失和混乱情况。但结果是所有 10,000 多个数据包都按正确顺序排列,没有任何丢失。多么疯狂的现象?

相关内容