将实时视频转码以在线分发到公共云需要一种将视频信号传输到云的方法。 有两种方法可以实现此目的,在本文中,我们将主要研究如何使用SRT(安全可靠传输)和ffmpeg来实现此目的。

在研究如何使用SRT之前,让我们看一下还有哪些其他选择。 今天最简单的选择是使用RTMP作为传输协议。 它是Adobe开发的协议,已经存在了一段时间。 今天,Wirecast,Teradek和OBS等许多生产工具都支持RTMP,这是YouTube,Facebook和Twitch支持的协议。
- La forma dell'acqua — ITA胶片流水的形状完整AltaDefinizione
- 潮汐通过新的阿森纳交易增加独家优惠
- 体育广播潜在的构造转变的第一个迹象。
- 我的2018在Spotify上包装
- SoundCloud能否在音乐流媒体之战中幸免?

RTMP是基于TCP的协议,在该协议中,每个数据包均得到确认并保证被传递,这意味着底层协议确保接收端接收到位流中的所有位。 每个数据包的握手过程都会增加开销,并带来一些限制。
RTMP的另一个缺点是并非所有的Live Transcoding软件都支持现成的RTMP。 这限制了您选择正确的代码转换软件时可以使用的某些选项。 在许多情况下,您将需要通过UDP /组播从RTMP到MPEG-TS的“桥梁”。 这也可以使用ffmpeg来完成,我们将在另一篇文章中进行介绍。

同样,在生产方(发送者)不一定总是可以选择使用RTMP作为运输协议。 对于这些情况,有几种商业选择,例如紫溪,可以通过Internet传输MPEG-TS流。

商业协议和专有协议的一种选择是使用SRT(安全可靠传输)来传输信号,而我们将在ffmpeg中完成此操作。
安全可靠的运输
SRT是SRT联盟支持的开源视频传输协议和技术堆栈。 如今,SRT联盟由40多家供应商组成,其中包括Haivision,Wowza,Teradek等。 该标准是开放的,可供任何想要实施该标准的人使用,而且SRT也是开源的,这意味着可以从公共存储库中获得实施SRT所需的软件(技术堆栈),并且免费将该技术集成到任何设备中或服务。
用ffmpeg编译SRT
Havision是SRT的创始人之一,它提供了一个开源SDK,以在您的软件中启用SRT支持。 这是我们将编译并包含在ffmpeg构建中的SDK。
$ git clone https://github.com/Haivision/srt.git
$ cd srt
$ ./配置
$ make && make安装
SDK取决于您是否安装了libssl和tcl,例如在Ubuntu上:
$ apt-get安装libssl-dev tclsh
编译ffmpeg时,通过运行配置脚本时添加以下选项来启用SRT。
$ ./configure --enable-libsrt ...

SRT Tx
要设置接收MPEG-TS视频流并将其通过Internet传输到SRT接收器的SRT发送器,请使用以下命令启动ffmpeg。
$ ffmpeg -fflags + genpts -listen 1 -re -i udp://239.0.0.1:1234?pkt_size = 1316 -acodec copy -vcodec copy -strict -2 -y -f mpegts srt://0.0.0.0:9998 ?pkt_size = 1316&mode = listener
这会将SRT发送器设置为SRT接收器可以连接到的服务器。 如果改为让SRT接收器充当服务器,则改为运行以下命令(假设192.168.1.42是SRT接收器的IP)。
$ ffmpeg -fflags + genpts -listen 1 -re -i udp://239.0.0.1:1234?pkt_size = 1316 -acodec复制-vcodec复制-strict -2 -y -f mpegts srt://192.168.1.42:9998 ?pkt_size = 1316
如果您想快速尝试一下,可以在我们的工具箱中使用SRTTx Docker容器。
$ docker run --rm -p 9998:9998 / udp eyevinntechnology / toolbox-srttx --inputtype = mpegts --passthrough --listener 239.0.0.1:1234 0.0.0.0:9998
SRT接收
要使用ffmpeg设置SRT接收器以通过多播网络输出输入流,请使用此命令启动ffmpeg。
$ ffmpeg -re -i srt://0.0.0.0:9998?pkt_size = 1316&mode = listener -vcodec复制-acodec复制-strict -2 -y -f mpegts udp://239.0.0.2:1234?pkt_size = 1316
在这种情况下,SRT接收器充当SRT发送器将连接到的服务器。 如果您想充当客户端,并假设SRT发送器的IP为192.168.1.19,则运行以下命令。
$ ffmpeg -re -i srt://192.168.1.19:9998?pkt_size = 1316 -vcodec复制-acodec复制-strict -2 -y -f mpegts udp://239.0.0.2:1234?pkt_size = 1316
要快速尝试,您可以使用我们工具箱中的SRTRx Docker容器,并使用loopts Docker容器生成要传输的测试流。

为了模拟编码器,我们改用VLC验证流是否已传输。 在发送方。
$ docker run --rm -v $ PWD:/ mnt eyevinntechnology / toolbox-loopts --withtc testfile.mp4“ srt://192.168.1.2:9998?pkt_size = 1316”
并且在接收器端。
$ docker run --rm -p 9998:9998 / udp eyevinntechnology / toolbox-srtrx --listener 0.0.0.0:9998 239.0.0.3:1234
然后使用以下地址打开VLC以加入多播流:
udp://@239.0.0.3:1234
使用OBS和SRT
工具箱中的SRT发送器还可以获取RTMP流,并使用SRT将其传输到SRT接收器。 在运行例如OBS或Wirecast的计算机上启动SRTTx Docker容器,您可以使用SRT而不是RTMP将信号传输到云。l

启动SRTTx Docker容器,并假设SRT Receiver在IP 192.168.1.6上可用,请使用以下参数。
$ docker run --rm -p 1935:1935 eyevinntechnology / toolbox-srttx --passthrough --inputtype = rtmp input_stream 192.168.1.6:9998
在接收器端运行以下命令
$ docker run --rm -p 9998:9998 / udp eyevinntechnology / toolbox-srtrx --listener 0.0.0.0:9998 239.0.0.3:1234
再说一次,我们可以使用VLC来查看接收到的MPEG-TS流。
udp://@239.0.0.3:1234
摘要
在本文中,我展示了使用ffmpeg的用户如何使用SRT作为协议通过Internet传输MPEG-TS流。 我个人认为,在不久的将来我们会在发送方和接收方都看到对SRT的更多支持,因为该SDK是开放源代码,并且可以轻松地(免费)集成到该软件中。 我认为,鉴于现在加入SRT联盟的公司数量众多,Wirecast或OBS很快就会支持SRT。
如果您对该博客还有其他疑问和评论,请在下面发表评论,或在Twitter(@JonasBirme)上发给我。
Eyevinn Technology 是一家领先的独立咨询公司,专门从事视频技术和媒体发行,并且是每年举行的北欧会议 瑞典Streaming Tech的 骄傲组织者 。