pAk*_*Y88 5 udp ffmpeg vlc video-streaming mpeg2-ts
我正在开发一个实时视频流系统,该系统基本上由一台服务器和几个客户端组成。
现在,让我们忽略数据包如何在服务器和客户端之间转发,让我们仅关注服务器如何通过UDP数据包发送MPEGTS流。
流以MPEGTS格式编码。
我想做的是读取一些数据包(主要问题是“多少?”)并将它们封装在UDP数据包中。目的地(客户端)读取这些UDP数据包,然后将其转发到VLC,VLC可以通过读取UDP数据包来播放MPEGTS网络流。
如果仅发送视频数据包,则一切正常,相反,如果我尝试将某些视频数据包和某些音频数据包封装在同一UDP数据包中,则VLC无法解码和播放流。我读到某个地方,每个UDP数据包应包含7个TS数据包,但是不幸的是,即使我遵守此规则,VLC也无法正确解码该流。
这是我的程序的示例代码:http : //pastebin.com/evMi6FkY
如何将MPEGTS数据包封装在UDP数据包中?
谢谢!
您的问题是:“让我们忽略数据包如何在服务器和客户端之间转发”。
UDP 要求您处理网络传输的所有问题,包括流量控制、错误检测和恢复、路径最大传输单元大小、打包、缓冲、序列化、重复数据删除等。
即使您将数据分成大小合适的数据包并以合适的速率发送它们,有些数据仍然会丢失、重复或乱序传送。您的代码必须处理所有这些条件,否则您无法相信您收到的就是您发送的。
在这种特殊情况下,我猜测您的数据包变得太大,导致碎片和高丢包率。一般来说,每个数据包最好不要超过 1400 字节左右。但错误的排序、丢失和重复也都是可能的,并且当您尝试发送大量数据时,所有这些都变得更有可能。
免责声明:我在一家生产商业 UDP 数据传输软件的公司工作。