我正在开发一个实时视频流系统,它主要由服务器和多个客户端组成。
现在,让我们忽略如何在服务器和客户端之间转发数据包,让我们只关注--服务器如何通过UDP数据包发送MPEGTS流。
该流以MPEGTS格式编码。
我想做的是阅读一些数据包(主要问题是“多少?”)并将它们封装在UDP数据包中。目的地(客户端)读取这些UDP数据包,然后将它们转发到VLC,VLC能够通过读取UDP数据包来播放MPEGTS网络流。
--如果我只发送视频包,一切都能正常工作--,相反,如果我试图封装在同一个UDP数据包中,一些视频包和一些音频包,VLC就无法解码和播放流。我在某个地方读到,每个UDP包应该包含7个TS包,但不幸的是,即使我遵守了这个规则,VLC也不能正确地解码流。
下面是我的程序的示例代码:http://pastebin.com/evMi6FkY
如何将MPEGTS包封装在UDP数据包中?
谢谢!
发布于 2012-06-04 19:29:28
您的问题是:“让我们忽略如何在服务器和客户端之间转发数据包”。
UDP要求您处理网络传输的所有问题,包括流量控制、错误检测和恢复、路径最大传输单元大小、分组化、缓冲、序列化、反复制等。
即使您将数据分解成大小合适的数据包,并按正确的速率发送,也会有一些数据丢失、复制或无法正常发送。您的代码必须处理所有这些条件,否则您无法信任您收到的就是您发送的内容。
在这种情况下,我猜想您的数据包变得太大,导致碎片和较高的下降率。一般来说,每个包最好不要超过1400个字节。但是,不正确的排序、丢失和复制也是可能的,而且当您试图发送更大数量的数据时,所有这些都变得更有可能。
免责声明:我在一家生产商业UDP数据传输软件的公司工作。
发布于 2015-12-24 06:56:38
您可以尝试https://github.com/KwikFlixTV/kwik-udp-send,它使用ts或FIFO文件,并发送恒定的比特率流。
重要特征清单:
H 110读取文件)的稳定性,以提供流h 211f 212的稳定性。
https://stackoverflow.com/questions/10723017
复制相似问题