SRS開始支持SRT

爲什麼我要開始着手SRT

爲什麼我覺得SRT有趣?我們知道RTMP是公共互聯網上直播視頻的事實標準;但RTMP已經存在了很長一段時間,其標準在2012年最後一次更新過後就被放棄了。新的Codec標準諸如HEVC或AV1一般都沒有RTMP標準支持。退一步來說,即使有人在RTMP中hack了這些Codec的支持,在移動網絡上RTMP仍然工作的不大好。

SRT作爲RTMP潛在替換技術的一種,最近正獲得不錯的增長勢頭。SRT聯盟現在有250多名成員,而在最近的一些展會上,似乎每個展位都具有 SRT 聯盟成員或 SRT-Ready貼紙。

最主要的還是rtmp這個協議實在太老了。

  • rtmp協議最後一次更新在2012年
  • rtmp在移動互聯網時代,缺陷越來越明顯。
  • rtmp是基於tcp的,弱網環境表現差;
  • rtmp基於tcp的丟包重傳,擁塞控制實在太差;

移動互聯網時代越來越呼喚新的直播協議,srt也是在這條探索路上的選擇。
因此,基於SRS3.0上開發支持SRT的功能。

當前srs支持srt的功能:

  • 支持srt的推流
  • 支持srt的拉流
  • 支持基於vhost的srt流模式
  • 支持srt推流轉發本地rtmp

直接上代碼,本人基於SRS3.0實現支持SRT:https://github.com/runner365/srs
在srs主倉庫中,也合入分支:https://github.com/ossrs/srs/tree/feature/srt
如何編譯,配置和使用wiki: 如何在SRS中支持srt
srt原協議我自己的翻譯: srt協議解析

關於srt的推/拉流模式

因爲srt是傳輸層協議,沒有明確的推拉流控制定義,但是srt官網有文章推薦使用streamid來定義推流/拉流.

基於srt官網的文章:srt acesscontrol
最新的srt推流地址規範如下,streamid的內容以#!::爲開始,符合YAML標準。

默認vhost的url

  • SRT的推流地址:

    srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish

  • SRT的拉流地址:

    srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=request

  • 對應的rtmp拉流地址:

    rtmp://127.0.0.1/live/livestream


定製化vhost的url

  • SRT的推流地址:

    srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn/live/livestream,m=publish

  • SRT的拉流地址:

    srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn/live/livestream,m=request

  • 對應的rtmp拉流地址:

    rtmp://127.0.0.1/live/livestream?vhost=srs.srt.com.cn

    基於srt官網,streamid的格式有Standard Keys,srt in srs的服務儘量符合官網標準。
    The Stream ID value can be used as free-form, but there is a recommended convention so that all SRT users speak the same language. The intent of the convention is to:
  1. promote readability and consistency among free-form names
  2. interpret some typical data in the key-value style


    符合yaml格式,以#!::爲開始。
  • key爲h,表示vhost和appname/stream;
  • key爲m,表示推流(publish)/拉流(request);
發佈了21 篇原創文章 · 獲贊 21 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章