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 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/sweibd/article/details/104085183
srs
今日推荐