本文镜像:https://blog.csdn.net/weixin_45326556/article/details/106618746
本文链接:https://www.linkpi.cn/archives/1027
1. 背景
SRT
是Secure Reliable Transport的简称。这个视频传输协议可以在具有挑战性的网络之下进行直播。
SRT
是一个开源低延迟视频传输协议。它拥有三大特点,安全,可靠,低延迟。安全方面,SRT
支持AES
加密,保障端到端的视频传输安全。可靠性方面,SRT
通过前向纠正技术(FEC
)保证传输的稳定性。低延迟方面,由于SRT
建立在改进型的UDT
协议之上,解决了UDT
协议传输延迟高的问题,又解决了UDP
网络通信复杂的传输时序问题,可以做到支持高吞吐量文件和超清视频的实时传输。
在一般人眼里,RTMP
是互联网直播视频的事实标准。但RTMP
协议已经很久没有更新了,该标准在2012年最后一次更新过后就被放弃了。RTMP
标准没有支持新的Codec
诸如HEVC
或AV1
。导致各个厂家各自为战,无法互通,这就是为什么VLC
等常见的播放都无法播放H265
的RTMP
流的原因。现在SRT
联盟有超过250家企业和组织,受到VLC
, GSTREAMER
, FFMPEG
, OBS
, VIMX
等的支持,可以预见的未来,SRT
必将取代RTMP
。
SRT开源代码请参见https://github.com/Haivision/srt
2. SRT的三种握手模式
2.1 握手模式简介
为了建立通信流,SRT采用了一种握手机制,其中每个设备将自己标识为caller
或listener
。在某些情况下,两个设备可以同时在所谓的rendezvous
模式下协商SRT会话。如您在配置SRT流时,应该了解这些握手模式:
SRT模式 | 它能做什么 |
---|---|
caller | 将源 或目标 设备设置为SRT流会话的发起方。caller 设备必须知道listener 的IP地址以及其侦听器的端口号 |
listener | 设置设备以等待请求开始SRT流会话。listener 设备只需要知道它应该在特定端口上侦听SRT流 |
Rendezvous | 允许两个设备用同一个端口去启动SRT会话, 源和目标都必须都是rendezvous模式。 |
如上图一所示,当编码器设置为listener
模式,可以允许接收端(或者解码器)来接收该SRT流;如上图二所示,当编码器设置为caller
模式,则编码器只能发送SRT流给一个接收端(或者解码器);如上图三所示,当编码器设置为Rendezvous
模式,则编码器只能发送SRT流给一个接收端(或者解码器),这个模式的设计目标是无需端口映射就能做NAT穿透,要求编码器和解码器都使用同一个端口,而且双方都必须都设为rendezvous
模式;rendezvous
模式的设计初衷是无需NAT/防火墙网络管理员干预,就能实现两个在不同的NAT内的编码器和解码器通信,但由于网络的复杂性,导致出现理想很丰满,现实很骨感的尴尬境地;尤其在国内,各种NAT嵌套,我们上网用的路由器连个公网IP都没有,大都是各运营商的内网IP,内网穿透的基本条件都不存在。
2.2 listener模式
2.2.1 编码器配置为listener模式发送
如下图所示,登录编码器后台,选择输出设置
-->SRT设置
-->填写SRT listener参数-->保存
。SRT listener参数:
模式: 从列表框中选择listener。
IP: 127.0.0.1。
端口: SRT listener模式的监听端口,这个端口要告诉接收端/解码端,本例子用9001。
延迟: 控制缓冲的参数,单位为毫秒,默认为50。
2.2.2 vMix配置为caller模式来接收
编码器按2.2.1设置好以后,就可以用vMix来接收了,假设编码器的IP地址为192.168.1.217
,vMix的配置如下图所示:
在如上图右上角第2步输入框里输入SRT参数:
码流类型: SRT(caller);由于编码器设置成了listener
模式,因此vMix必须设为caller
模式。
Hostname: 输入编码器的IP地址,本例子编码器的IP为192.168.1.217
,则该输入框就输入192.168.1.217
。
Port: 输入编码器配置的SRT listener监听的端口,本例为9001。
延迟: SRT缓冲,单位为毫秒,可以与编码器的SRT延迟参数不同。
2.2.3 OBS配置为caller模式来接收
编码器按2.2.1设置好以后,就可以用OBS来接收了,假设编码器的IP地址为192.168.1.217
,OBS的配置如下图所示:
与vMix不同,OBS要接收编码器SRT流只能用URL地址,URL格式为:srt://编码器IP:SRT监听端口?mode=caller&latency=ms;根据2.2.1编码器的配置,我们要输入的URL为srt://192.168.1.217:9001?mode=caller&latency=50。
2.3 caller模式
2.3.1 编码器配置为caller模式发送
如下图所示,登录编码器后台,选择输出设置
-->SRT设置
-->填写SRT caller参数-->保存
。SRT caller参数:
模式: 从列表框中选择caller。
IP: 接收端/解码端的IP地址,本例的接收端IP为192.168.1.195
,因此填入192.168.1.195
。
端口: 接收端/解码端的SRT listener监听端口。本例子使用9001。
延迟: 控制缓冲的参数,单位为毫秒,默认为50。
2.3.2 vMix配置为listener模式来接收
编码器按2.3.1设置好以后,就可以用vMix来接收了。若已经启动2.3.3的OBS,要先停止OBS。vMix的配置如下图所示:
在如上图右上角第2步输入框里输入SRT参数:
码流类型: SRT(listener);由于编码器设置成了caller
模式,因此vMix必须设为listener
模式。
Port: 输入SRT listener监听的端口,这个端口要跟编码器的caller端口一样。
2.3.3 OBS配置为listener模式来接收
编码器按2.3.1设置好以后,就可以用OBS来接收了。若已经启动2.3.2的vMix,要先停止vMix。OBS的配置如下图所示:
与vMix不同,OBS要接收编码器SRT流只能用URL地址,URL格式为:srt://127.0.0.1:SRT监听端口?mode=listener&latency=ms;根据2.3.1编码器的配置,我们要输入的URL为srt://127.0.0.1:9001?mode=listener&latency=50。
2.4 rendezvous模式
2.4.1 编码器配置为rendezvous模式发送
如下图所示,登录编码器后台,选择输出设置
-->SRT设置
-->填写SRT rendezvous参数-->保存
。SRT rendezvous参数:
模式: 从列表框中选择rendezvous。
IP: 接收端/解码端的NAT公网IP地址。本例是121.8.34.9
。
端口: SRT rendezvous端口,这个端口必须与接收端/解码端的SRT rendezvous端口相同,本例子是9001。
延迟: 控制缓冲的参数,单位为毫秒,默认为50。
2.4.2 vMix配置为rendezvous模式来接收
编码器按2.4.1设置好以后,就可以用vMix来接收了。若已经启动2.4.3的OBS,要先停止OBS。假设编码器的NAT公网IP地址为113.119.199.52
,vMix的配置如下图所示:
在如上图右上角第2步输入框里输入SRT参数:
码流类型: SRT(Rendezvous);由于编码器设置成了Rendezvous模式,因此vMix必须设为Rendezvous模式。
Hostname: 输入编码器NAT公网的IP地址,假设编码器的IP为113.119.199.52
,则该输入框就输入113.119.199.52
。
Port: SRT rendezvous端口,这个端口必须与编码器的SRT rendezvous端口相同,本例子是9001。
2.4.3 OBS配置为rendezvous模式来接收
编码器按2.4.1设置好以后,就可以用OBS来接收了。若已经启动2.4.2的vMix,要先停止vMix。假设编码器的NAT公网IP地址为113.119.199.52
,OBS的配置如下图所示:
与vMix不同,OBS要接收编码器SRT流只能用URL地址,URL格式为:srt://编码器NAT公网IP:SRT监听端口?mode=rendezvous&latency=ms;根据2.4.1编码器的配置,我们要输入的URL为srt://113.119.199.52:9001?mode=listener&latency=50。
2.5 编码器如何推流给SRT LIVE SERVER(SLS)
2.5.1 SLS简介
srt-live-server(SLS)是基于安全可靠传输(SRT)的低延迟开放源代码实时流服务器。 通常,SLS在互联网中传输的延迟小于1秒。源代码参见https://github.com/Edward-Wu/srt-live-server。
编译SLS相对简单,照说明去做就可以了,有一点要注意的是SLS依赖SRT,所以要先编译SRT,然后在编译SLS。编译好以后运行,出现如下的界面:
2.5.2 编码器推流方法之一
本公司的编码器推流有2个方法,一个是多平台推流
,一个是通道输出设置
,下面是多平台推流
的方法。SLS的推流地址格式为:srt://[your.sls.ip]:8080?streamid=uplive.sls.com/live/test。假设SLS服务器的IP地址是192.168.1.122,则推流地址为:srt://192.168.1.122:8080?streamid=uplive.sls.com/live/test。如下图所示:
注意: 推流的streamid和播放用的streamid是不同的,详细参见sls.conf
说明。
2.5.3 编码器推流方法之二
本公司的编码器推流有2个方法,一个是多平台推流
,一个是通道输出设置
,下面是输出设置
的方法。推流的URL参见2.5.2说明。如下图所示:
2.5.4 如何播放编码器推到SLS的流
2.5.4.1 vMix播放
vMix播放SLS流是caller模式,假设sls服务器的IP是192.168.1.122,端口为8080,则vMix配置如下图所示:
注意: 推流的streamid和播放用的streamid是不同的,详细参见sls.conf
说明。
2.5.4.2 OBS播放
OBS播放SLS流是caller模式,假设sls服务器的IP是192.168.1.122,端口为8080,则OBS配置如下图所示:
注意: 推流的streamid和播放用的streamid是不同的,详细参见sls.conf
说明。