小白篇之ENC编码器的SRT协议多平台推流配置
最近有客户问我ENC编码器如何配置SRT协议直播推流,下面我就来介绍一下这款编码器如何配置SRT推流直播,如果您还没有ENC设备,请进入如下地址:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22796185904.4.5f005504oCprdh&id=618201308044
ENC编码器的强大之处我就不多说了,从以上链接,大家可以知道它采用了华为的海思芯片,相对于其他芯片,他的视频处理延时的优势不言而喻,是业内延时说他排第二,没人敢排第一,哈哈,可能有点夸大了。不过真的很厉害的样子就对了。
好了,废话不多说,下面开始介绍SRT的配置。
编码器SRT协议三种模式listener, caller, rendezvous简介
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 流会话。设备只需要知道它应该在特定端口上侦听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
说明。
————————————————
NDI参考链接:https://blog.csdn.net/weixin_41486034/article/details/106597513