编码器SRT协议三种模式(listener, caller, rendezvous)简介

本文镜像: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诸如HEVCAV1。导致各个厂家各自为战,无法互通,这就是为什么VLC等常见的播放都无法播放H265RTMP流的原因。现在SRT联盟有超过250家企业和组织,受到VLCGSTREAMER, FFMPEG, OBS, VIMX等的支持,可以预见的未来,SRT必将取代RTMP
    SRT开源代码请参见https://github.com/Haivision/srt

2. SRT的三种握手模式

2.1 握手模式简介

为了建立通信流,SRT采用了一种握手机制,其中每个设备将自己标识为callerlistener。在某些情况下,两个设备可以同时在所谓的rendezvous模式下协商SRT会话。如您在配置SRT流时,应该了解这些握手模式:

SRT模式 它能做什么
caller 目标设备设置为SRT流会话的发起方。
caller设备必须知道listener的IP地址以及其侦听器的端口号
listener 设置设备以等待请求开始SRT流会话。
listener设备只需要知道它应该在特定端口上侦听SRT流
Rendezvous 允许两个设备用同一个端口去启动SRT会话,
源和目标都必须都是rendezvous模式。

file
如上图一所示,当编码器设置为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的配置如下图所示:
file
与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说明。

分享到: