SRT報文長度問題

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字節大小,直到發送完畢,以達到最大效率
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章