SRT报头
使用到的Wireshark解析器可以在SRT官方仓库中script文件夹下获取,我会不断修复和更新以配合SRT的标准。
SRT报头包含UDT报头,且可以是UDT 4和UDT 5,长度为16字节。
以数据包为例:

报文长度问题
报文长度的建议
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的包直接被丢弃。
对于该问题,排查方式:
- 确认IP报文中的Don’t fragment标志是否设置,如果设置,可能是MTU问题
- 抓包看发端机器是否重复收到NAK包,重复收到NAK则说明可能是MTU问题
MTU过小丢包的解决办法
- 为了兼容接收大包,可以将两端的SRTO_PAYLOADSIZE设置为1456
- 将两端的发送部分,进行人为分包循环分批发送,每次只发送MTU - 24 - 16字节大小,直到发送完毕,以达到最大效率
本文深入探讨SRT协议的报头结构及其与MTU的关系,分析SRT在不同场景下的最佳设置,包括传输TS流时的包长优化及解决包丢失问题的方法。
1118

被折叠的 条评论
为什么被折叠?



