使用ffmpeg和SRT将视频信号传输到云

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

使用ffmpeg和SRT将视频信号传输到云

在研究如何使用SRT之前,让我们看一下还有哪些其他选择。今天最简单的选择是使用RTMP作为传输协议。它是Adobe开发的协议,已经存在了一段时间。今天,Wirecast,Teradek和OBS等许多生产工具都支持RTMP,这是YT,FB和Twitch支持的协议。

使用ffmpeg和SRT将视频信号传输到云

RTMP是基于TCP的协议,在该协议中,每个数据包均得到确认并保证已交付,这意味着底层协议确保接收端接收到比特流中的所有位。每个数据包的握手过程都会增加开销,并带来一些限制。

RTMP的另一个缺点是并非所有的Live Transcoding软件都支持现成的RTMP。这限制了选择正确的转码软件时可以使用的某些选项。在许多情况下,您将需要通过UDP /组播从RTMP到MPEG-TS的“桥梁”。这也可以使用ffmpeg完成,我们将在另一篇文章中进行介绍。

使用ffmpeg和SRT将视频信号传输到云

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

使用ffmpeg和SRT将视频信号传输到云

商业协议和专有协议的一种选择是使用SRT(安全可靠传输)来传输信号,而我们将在ffmpeg中完成此操作。

安全可靠的运输

SRT是SRT联盟支持的开源视频传输协议和技术堆栈。如今,SRT联盟由40多家供应商组成,其中包括Haivision,Wowza,Teradek等。该标准是开放的,可供任何想要实施该标准的人使用,而且SRT也是开源的,这意味着可以从公共存储库中获得实施SRT所需的软件(技术堆栈),并且无需付费即可将该技术集成到任何设备中或服务。

用ffmpeg编译SRT

Havision是SRT的创始人之一,提供了一个开源SDK,以在您的软件中启用SRT支持。这是我们将编译并包含在ffmpeg构建中的SDK。

使用ffmpeg和SRT将视频信号传输到云

SDK取决于您是否安装了libssl和tcl,例如在Ubuntu上:

使用ffmpeg和SRT将视频信号传输到云

编译ffmpeg时,通过运行配置脚本时添加以下选项来启用SRT。

使用ffmpeg和SRT将视频信号传输到云

使用ffmpeg和SRT将视频信号传输到云

SRT Tx

要设置接收MPEG-TS视频流并将其通过Internet传输到SRT接收器的SRT发送器,请使用以下命令启动ffmpeg。

使用ffmpeg和SRT将视频信号传输到云

这会将SRT发送器设置为SRT接收器可以连接到的服务器。如果改为由SRT接收器充当服务器,则改为运行以下命令(假设192.168.1.42是SRT接收器的IP)。

使用ffmpeg和SRT将视频信号传输到云

如果您想快速尝试一下,可以在我们的工具箱中使用SRTTx Docker容器。

使用ffmpeg和SRT将视频信号传输到云

SRT接收

要使用ffmpeg设置SRT接收器以通过多播网络输出输入流,请使用此命令启动ffmpeg。

使用ffmpeg和SRT将视频信号传输到云

在这种情况下,SRT接收器充当SRT发送器将连接到的服务器。如果您想充当客户端,并假设SRT发送器的IP为192.168.1.19,则运行以下命令。

使用ffmpeg和SRT将视频信号传输到云

要快速尝试,您可以使用我们工具箱中的SRTRx Docker容器,并使用loopts Docker容器生成要传输的测试流。

使用ffmpeg和SRT将视频信号传输到云

使用OBS和SRT

工具箱中的SRT发送器还可以获取RTMP流,并使用SRT将其传输到SRT接收器。在运行例如OBS或Wirecast的计算机上启动SRTTx Docker容器,您可以使用SRT而不是RTMP将信号传输到云。

使用ffmpeg和SRT将视频信号传输到云

启动SRTTx Docker容器,并假设SRT Receiver在IP 192.168.1.6上可用,请使用以下参数。

使用ffmpeg和SRT将视频信号传输到云

在接收器端运行以下命令

使用ffmpeg和SRT将视频信号传输到云

再说一次,我们可以使用VLC来查看接收到的MPEG-TS流。

使用ffmpeg和SRT将视频信号传输到云

摘要

在本文中,我展示了使用ffmpeg的用户如何使用SRT作为协议通过Internet传输MPEG-TS流。我个人认为,在不久的将来,我们将在发送方和接收方都看到对SRT的更多支持,因为该SDK是开放源代码,并且可以轻松地(免费)集成到该软件中。我认为,鉴于现在加入SRT联盟的公司数量众多,Wirecast或OBS将很快对SRT提供支持,最新OBS25.0.8版本已经支持srt协议。