VLC如何播放灵派直播编码器SRT流

本文镜像: https://blog.csdn.net/weixin_45326556/article/details/106121448
本文链接:https://www.linkpi.cn/archives/307

1. 背景知识

1.1 VLC是什么

    VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。VLCVideoLAN的一个项目,而VideoLAN, 既是一个项目组,也是一家非盈利组织。它拥有VLC, VLMC, DVBlast , multicast, x264等等项目,其中VLC是知名度最大的播放器,它支持WINDOWS, LINUX, ANDROID,苹果IOS等平台。VLC是基于PLUGIN设计,内部通过各个PLUGIN模块连接起来,所以非常灵活。VLC为了消除网络抖动引起的卡顿,通常内存的缓冲设得比较大,因此延迟比较大,并不适合用来做低延迟播放的测试。

1.2 SRT是什么

    SRT是Secure Reliable Transport的简称,其含义如下表。这个视频传输协议可以在具有挑战性的网络之下进行直播。

缩写 描述
Secure Encrypts video streams
Reliable Recovers from severe packet loss
Transport Dynamically adapts to changing network conditions

    SRT是一个开源低延迟视频传输协议。它拥有三大特点,安全,可靠,低延迟。安全方面,SRT支持AES加密,保障端到端的视频传输安全。可靠性方面,SRT通过前向纠正技术(FEC)保证传输的稳定性。低延迟方面,由于SRT建立在改进型的UDT协议之上,解决了UDT协议传输延迟高的问题,又解决了UDP网络通信复杂的传输时序问题,可以做到支持高吞吐量文件和超清视频的实时传输。
    在一般人眼里,RTMP是互联网直播视频的事实标准。但RTMP协议已经很久没有更新了,该标准在2012年最后一次更新过后就被放弃了。新的Codec诸如HEVCAV1都没有被RTMP标准支持。导致各个厂家各自为战,无法互通,这就是为什么VLC等常见的播放都无法播放H265RTMP流的原因。现在SRT联盟有超过250家企业和组织,受到VLCGSTREAMER, FFMPEG, OBS, VIMX等的支持,可以预见的未来,SRT必将取代RTMP
    SRT开源代码请参见https://github.com/Haivision/srt

1.3 灵派直播编码器是什么

    从天眼查那里看到,灵派科技成立于2018年,短短2年时间,其开发出几十个各类板卡,其实力不容小觑,在其淘宝店https://shop311407601.taobao.com上可以看到他们有各种开发板以及好几款编码器,其中一路编码器叫ENC1,双路4K@30编码器叫ENC2,双路4K@60叫ENC2 PRO,5路4K@30编码器叫ENC5,9路编码器叫ENC9,18路编码器叫ENC18,未来是不是有ENC32, ENC48,ENC64呢?我们翘首以待。编码器行业里的多路编码器的路数大多都是2的幂或者2的倍数,但灵派科技的的编码器竟然有5路,9路这类非2相关的路数,实属罕见。
    灵派编码器是开源的,源代码可以参见 https://gitee.com/LinkPi/Encoder。灵派编码器的使用说明书参见https://gitee.com/LinkPi/Encoder/wikis/pages。该公司的编码器竟然还可以通过微信小程序来管理局域网内的编码器,为了方便用户,他们也是拼了。编码器管理用微信小程序:https://gitee.com/LinkPi/Encoder/wikis/pages/preview?sort_id=2165970&doc_id=338777

2. 灵派直播编码器配置

    从线上的使用说明书可以看到,灵派编码器的配置界面高度一致,只是不同的型号的路数不同而已,下面我们就以其最简单最便宜的单路编码器(ENC1)来举例。

2.1 第一步:登录

    灵派编码器默认IP为 192.168.1.217 ,如果您的网络在其他网段,可以参考【常见问题】进行配置。通过浏览器(推荐使用chrome内核的浏览器),访问http://192.168.1.217,弹出登录对话框,输入账号密码后就进入了后台配置首页,如下图所示:

    从上图所示,后台配置首页主要是显示一些状态,例如CPU使用率,内存使用率,核心温度,网络的吞吐率,HDMI输入口的状态,以及预览画面。从状态上看到的温度确实不低,但经过实际测试,这并不影响性能,海思的CPU看来是挺强悍的。预览画面并不流畅,一帧一帧的,怪难受的,但如果你用过他的ENC18,你就知道为什么他们会这样设计了,要知道如果是18路视频解码预览的话,再强的CPU都搞不定的;而且这样的设计兼容性很好,不需要安装任何插件都可以显示,而且支持所有的浏览器。

2.2 第二步:编码设置

    在首页的菜单栏选择编码设置就可以进入编码设置了,如下图所示:

    如上图所示,你可以设置编码的分辨率,编码的分辨率可以和HDMI输入的分辨率不同,例如你的HDMI输入信号的分辨率是1080p,但编码可以设置成720p,编码器内部会做相应的scale(缩放);常见的分辨率可以在下选框里选择,但如果没有找到,可以点高级编码参数手工输入你要的编码分辨率。在这个界面还可以设置编码方式,支持H264的base, main, high profile,也支持H265的main profile;在编码方式下选框里还有一个关闭,这个关闭编码的意思,这样可以节省编码资源,留出足够的编码能力给其他通道用。
    有些客户想得到几十毫秒级的延迟,可以把编码帧率设为60,GOP设为1,同时在高级编码参数参数里把低延迟开关开启,如下图所示:

3.3 第三步: SRT设置

    在首页的菜单栏选择输出设置就可以进入输出设置了,如下图所示:

    在输出设置页面,点击SRT设置选项卡就可以进入SRT设置页面,如下图所示:

    如上图所示,SRT主要有模式,IP,端口,延迟等参数,下面详细介绍:
模式:SRT支持listener,caller和rendezvous模式,由于VLC仅仅支持caller模式,所以编码器这边必须设置为listener模式。
IP:对于listener模式,IP必须为127.0.0.1;对于caller模式,就必须填写对方的IP(也就是开启listener模式设备的IP,例如开启listener模式的OBS或者VMIX的电脑IP)。
端口:发送端和接收端约定的端口,通常要大于1024。
延迟:延迟参数,单位为毫秒,在好的网络里可以把这个参数调低,以获得更低的延迟,但在差的网络里,最好是提高延迟以获得较高的图像品质。

3. VLC配置

    目前VLC并不支持SRT的listener模式,仅仅支持SRT的caller模式;在VLC界面上选择媒体菜单,选择打开网络串流,弹出一个输入框,在输入框里输入SRT网络流的URL。SRT的网络流URL格式:srt://编码器ip:SRT端口?mode=caller&latency=延迟ms,例如编码器的IP是192.168.1.217,SRT端口为9001,则VLC的播放URL为srt://192.168.1.217:9001?mode=caller&latency=50。如下图所示:

    点击播放按钮,就可以出现图像了,如下图所示:

4. 延迟测试

    为了方便测试延迟,我们用笔记本输出信号源给ENC1编码器,ENC1编码器输出SRT流,然后在同个笔记本用VLC来接收,一截屏就知道延迟了,如下图所示:

    从上图看,总延迟是131:12.510-131:10.925=1.585秒,这个延迟太大了。这个延迟比vMix解SRT流的延迟大多了,参见下图:

    如上图,VLC延迟为:17:26.605-17:25.275=1.330秒;而vMix的延迟为:17:26.605-17:26.289=0.316秒。

5. 总结

     VLC虽然很方便,但仅仅支持SRT caller模式,而且延迟很大,但如果对延迟无要求也是不错的选择。

分享到: