SRT报文长度问题

本文深入探讨SRT协议的报头结构及其与MTU的关系,分析SRT在不同场景下的最佳设置,包括传输TS流时的包长优化及解决包丢失问题的方法。

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的包直接被丢弃。

对于该问题,排查方式:

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

MTU过小丢包的解决办法

  • 为了兼容接收大包,可以将两端的SRTO_PAYLOADSIZE设置为1456
  • 将两端的发送部分,进行人为分包循环分批发送,每次只发送MTU - 24 - 16字节大小,直到发送完毕,以达到最大效率
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值