【发布时间】:2014-10-25 09:42:28
【问题描述】:
我正在编写简单的软件来解析 MPEG-TS 流以检查 CC(一致性计数器)以查看是否有任何数据包被丢弃。当我针对文件运行脚本时,它可以完美运行。但是在 UDP 流上使用它时会显示丢失(其他软件未确认):
很简单:
while True:
received = sock.recv(7 * 188)
parsepacket(received)
为了清楚起见,我省略了 parsepacket 函数。就是用bitstring逐位解析数据包。
据我了解,当我运行 parsepacket 函数时,其他 UDP 数据包会被忽略,因为我做 sock.recv 的速度不够快(在 5 Mbps 流上,它应该每秒解析大约 500 个数据包)。
我尝试使用sock.makefile,但没有运气。我得到相同的结果。
我的想法是让接收线程在后台运行,另一个线程不断解析它接收到的内容。但老实说,我不知道怎么做(除了把它全部放在内存中会很快用完)。
【问题讨论】:
-
为什么使用 UDP 协议进行流式传输。这似乎很反直觉。现在您需要手动实现缺少的功能,例如缓冲和排序。
-
我正在分析来自我们的 IPTV 提供商的 MPEG-TS 流,它们以 UDP 多播的形式提供。我的另一个想法是在 python 中使用线程,但不幸的是它没有帮助。我仍然收到丢包。
标签: python sockets udp mpeg2-ts