所以,我使用ffmpeg使用UDP协议将实时网络摄像头流式传输到端口1111:
ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mpegts udp://localhost:1111
当我通过端口1111的ffplay直接播放时,一切正常:
ffplay udp://localhost:1111
我得到了这样的视频质量:
所以我想,我可以写一些winsock-codes给听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:我已经测试了UDP数据包丢失&用一个听取端口2222&的插座取代ffplay来紊乱打印出所有收到的数据包。但结果是所有10,000多个数据包都处于正确的顺序和没有丢失。多么疯狂的现象?