UDP/TS码流丢包问题解决思路

由于UDP协议本身的特点,没有可对端确认机制,亦没有流量控制,丢包是不可避免的。

在有UDP传输视频的业务,可以从以下角度去思考:

1 网络拥塞。这是很关键的原因,开发过程中由于涉及到不同库/组件的协同开发,往往会把注意力集中到接口层面,而忽视了网络环境本身。视频业务需要带宽较宽,调试过程可以单独组网以及使用千兆交换机。

2 recv-Q。recv-Q是度量socket接收缓冲拥塞情况的一个指标。可以使用netstat -anu 观察socket接口缓冲的拥塞情况。

3 增加socket缓冲大小。可以修改 /proc/sys/net/core/rmem_default 和/proc/sys/net/core/rmem_max 调整内核默认分配给每个接口的缓冲大小。亦可在调用socket接口时设置缓冲大小,须知用户设置的缓冲大小不应该比rmem_max大。

4 优化业务流程。UDP接收业务中,若数据处理的速度小于数据接收的速度,则可能造成socket接口缓冲堆积。缓冲满了,便会丢包。若下游的业务速度无法优化,则可以异步接收和处理流程,通常是在接收和处理流程之间增加一个缓存。

5 TS流分析工具。可以通过wireshark将需要分析的TS码流过滤出来,右键Follow选UDP,show and save data as raw,把TS码流保存下来,可以在VLC上播放。可以把TS码流 文件拖到Elecard StreamAnalyzer 工具,点击Report按钮,即可分析TS码流丢包情况。

你可能感兴趣的:(UDP/TS码流丢包问题解决思路)