SRT报文长度问题

SRT报头

使用到的Wireshark解析器可以在SRT官方仓库中script文件夹下获取,我会不断修复和更新以配合SRT的标准。

SRT报头包含UDT报头,且可以是UDT 4和UDT 5,长度为16字节。

以数据包为例:
SRT报文长度问题_第1张图片

报文长度问题

报文长度的建议

SRT被设计传输TS流,而TS流一个包长度为188,1316刚好为7个包,加上SRT报文头16个字节,所以传输时UDP负载一般为1332字节。

  • 如果仅作为传输协议,那么SRT最大可以设置到1456,以提升传输效率,目前机器的MTU一般为1500,去掉其余报文长度,刚好为1472,SRT头(16) + 数据(1456) = 1472。
  • 如果作为原生协议推TS流,那么最佳应该为1316,即使大了也没有意义,如果设置为1456且每次传输都满载1456字节,反而会增加接收端处理逻辑难度,且发送端一般都会按照188的倍数去发送TS数据。

关于有些机器上SRT包丢失问题

有些机器可能网络做了特殊处理,所以如果仅作为传输协议,那么1456字节满载的情况可能会出现包丢失,原因是UDP包未开启分包,导致超过MTU的包直接被丢弃。

对于该问题,排查方式:

  1. 确认IP报文中的Don’t fragment标志是否设置,如果设置,可能是MTU问题
  2. 抓包看发端机器是否重复收到NAK包,重复收到NAK则说明可能是MTU问题

MTU过小丢包的解决办法

  • 为了兼容接收大包,可以将两端的SRTO_PAYLOADSIZE设置为1456
  • 将两端的发送部分,进行人为分包循环分批发送,每次只发送MTU - 24 - 16字节大小,直到发送完毕,以达到最大效率

你可能感兴趣的:(流媒体)