Azure 媒体服务的 RTMP 支持和实时编码器
Cenk Dingiloglu Azure 媒体服务高级项目经理
直播流媒体目前已在公共预览版中提供,其中一项受支持的输入协议便是 RTMP。RTMP 是用于输入和分发包括直播流媒体在内的丰富媒体的一个常用协议。Azure 媒体服务支持使用 RTMP 从订阅源实时输入,并支持使用动态打包技术对以 MPEG-DASH、Microsoft Smooth Streaming、Apple HLS 或 Adobe HDS 格式分发的实时流进行动态打包。这就允许在输入方面使用广泛采用的 RTMP 协议并使用多种输出协议以覆盖多种设备和端点,同时又能保持与传统播放器和视频格式的兼容性。有关在实时通道和流媒体端点建立 Azure 媒体帐户的信息,请参阅 Jason Suess 的精彩博文“通过 Azure 媒体管理门户开始使用直播流媒体”。
本文重点介绍 Azure 媒体服务启用的 RTMP 输入功能,以及如何使用此功能借助 Wirecast、Flash Media Live Encoder (FMLE) 和 FFmpeg 编码器为 Azure 媒体服务通道提供多码率实时订阅源。
体系结构和基本信息
从较高层面而言,直播流媒体的体系结构有三个主要组成部分:通道/节目、存储和流媒体端点。
- 通道 / 节目 - 通道用来实现直播流媒体,包括实时编码器的输入点。截至今天,RTMP 和 Fragmented MP4(Smooth Streaming)是受支持的输入协议。节目是通道内部的逻辑组件。节目可发布接收的数据以用于流媒体,并归档用于点播转换和直播窗口(DVR 格式)的内容。
- 流媒体端点和流媒体单元 - 流媒体端点为您提供可从中找到您的直播和 VOD 资源的 URL,同时还提供动态打包功能,并确保流媒体的成功交付。
- 存储 - 使用 Azure 存储来存储实时节目的归档。点播流媒体和编码服务也会用到存储。
通道 RTMP 支持
Azure 媒体服务通道支持 RTMP 推送模式。可同时支持单码率和多码率输入,但为了获取自适应码率流媒体的优势,强烈建议使用多码率输入。将来,Azure 媒体服务还将提供实时转码服务,将单码率输入转化为多码率输出。要使用 RTMP 输入,须具备以下条件:
- 支持 RTMP 输出的编码器
- H.264 视频和 AAC 音频编解码器输出
- 对应于视频质量的关键帧或帧组 (GOP)
- 2 秒的关键帧间隔(可设置为最多 6 秒,但需要特别配置。具体参见下文的高级设置部分)
- 特定于每种质量的流名称
- 网络连接(视频+音频合计码率的可用带宽)
- 为获得最佳自适应码率性能,建议严格遵循 CBR 编码。
在本文中,我会在 Azure 媒体服务通道的输出和输入中使用三种视频质量。您可以使用多种质量,但请记住一点,初始质量将受限于您的计算机编码能力以及该计算机至输入通道的网络连接情况。如果超出了带宽范围或者网络连接情况较差,可能需要调整质量级别和编码设置,以使用更低的分辨率和码率。使用多种质量时,应注意所有质量的合计码率。
注意:请确保在每次更改编码器设置时重设您的通道,先断开编码器与通道的连接,然后再重新连接。
Wirecast 配置
Wirecast 是一款知名的 RTMP 编码器。Wirecast 可实现直播流媒体的捕捉、实时制作和编码,以进行广播。您可以通过 Telestream 网站获取更多信息并下载试用版。目前 Wirecast 版本 5 为受支持版本,已通过 Azure 媒体服务测试。
配置输入
- 将鼠标悬停在“+”按钮上。
- 从可用源选项中选择一项。Wirecast 包含多个选项。在本文中,我会使用我的集成摄像机。
- 摄像机捕捉的影像将出现在新的小窗口中。单击该摄像机捕捉的影像,便会出现在 Preview (预览)窗口中。
配置输出
- 在主菜单中,转到 Output -> Output Settings(输出->输出设置)。
- 在 Select an Output Destination(选择输出目标)对话框中,选择 RTMP 服务器。
将显示 Output Settings(输出设置)对话框。
- 为您的第一种输出(质量)命名。例如“Azure 媒体服务质量 1”
- 在 Address(地址)字段中输入您的输入通道的 URL。有关如何获取内嵌输入通道 URL 的信息,请参阅“通过 Azure 媒体管理门户开始使用直播流媒体”。
- 输入一个唯一的流名称(例如,myStream1)。如果有多种质量,每一种质量都需要一个唯一的流名称。
- 为您的第一种质量创建新的编码预设。
- 在 Output Settings(输出设置)对话框中,选择 New Preset(新建预设)
- 在 Enter New Preset Name(输入新建预设名称)文本框中,输入新预设的名称,例如“MyQuality1”
- 将“Encoder:”类型设置为 H.264。(注意: x264 编码器类型存在可影响动态打包的已知问题,因此不受支持。)
- 将预设配置为需要的值。
在创建编码预设时,应将每种质量的“Frames per second”(每秒帧数)和“Key frame every”(每隔多少帧插入一个关键帧)设为相同的值。针对每种质量应使用相同的音频编码设置,而且应检查每种质量的“Keyframe Aligned”(对齐关键帧)设置,否则流媒体将不工作或无法输入至通道中。为实现适当的自适应码率流媒体,这些设置必须在所有质量级别中保持一致。
- 配置完您的第一种输出后,您将看到以下输出配置
- 要添加其他质量级别,单击 Add(添加)并按照上述步骤添加其他质量级别。请务必将“Frames per second”(每秒帧数)和“Key frame every”(每隔多少帧插入一个关键帧)设为相同的值。另外,请检查“Keyframe Aligned”(对齐关键帧)设置并设置唯一的流名称。
- 三种质量全部配置完毕后,您将看到如下输出配置:
开始编码并将数据推送至输入通道
- 单击箭头开始编码:
- 按 Stream(流媒体)按钮,开始将实时编码数据推送至通道。流媒体启动时,指示灯将变成红色。
预览流
可使用 Azure 管理门户预览流。还可以使用 Azure 门户发布流。有关如何发布和预览流的信息,请参阅《通过 Azure 媒体管理门户开始使用直播流媒体》。
您还可以使用 https://amsplayer.azurewebsites.net/ , 它提供了多播放器选项和预览。
Flash Media Live Encoder (FMLE) 配置
FMLE 是 Adobe 的一款免费软件。您可以从 https://www.adobe.com/products/flash-media-encoder.html 中获取更多信息并下载此编码器的一个副本。默认情况下,FMLE 支持 MP3 音频输出。目前,Azure 媒体服务不提供实时转码服务,需要通过 AAC 音频编解码器将源流媒体动态打包为多种格式,如 MPEG-DASH、Smooth Streaming 和 HLS 等。要在 Azure 媒体服务中使用 FMLE,需要一个 AAC 插件。在本文中,我将使用 Main Concept 的一款插件。您可以通过以下链接获取更多信息并下载试用版:https://www.mainconcept.com/eu/products/plug-ins/plug-ins-for-adobe/aac-encoder-fmle.html
配置 FMLE
- 您首先要做的是,将 FMLE 配置为采用NTP时间源 (绝对时间) , 以支持RTMP 时间戳。为此,请执行以下步骤:
关闭编码器。
在文本编辑器中打开 FMLE config.xml 文件。Windows 操作系统的默认安装位置为 C:\Program Files\Adobe\Flash Media Live Encoder 3.2\(64 位系统为 C:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\)
Mac 操作系统的默认安装位置为 Macintosh HD:Applications:Adobe:Flash Media Live Encoder 3.2
将 streamsynchronization/enable 设置为 true。<streamsynchronization>
<!– “true”为启用此功能,“false”为禁用。–>
<enable>true</enable>
保存文件,然后重启编码器。
- 从设备列表中选择源设备。在本文中,我将使用“Integrated Camera”(集成摄像机)
- 从预设菜单中选择编码预设或自己创建一个。如果要自己创建,请阅读“ RTMP 通道支持”部分,了解相关要求。我将使用预设菜单中的“Multi Bitrate – 3 streams (1500) Kbps – H.264”(多码率 - 3 股流媒体 (1500) Kbps – H.264),创建 3 种质量。
- 将帧率设置为 30 fps
- 选择音频设备
- 将音频输出格式设置为 AAC。注意:默认情况下无法使用 AAC 和 HE-AAC。FMLE 本身仅支持 MP3 音频。需有插件帮助,才能启用 AAC 编解码器。
- 设置所需音频带宽。在本文中,我将使用 96 Kbps 码率和 44,100 Hz 采样率。
- 选择“Stream to Flash Media Server”(传输流至 Flash 媒体服务器)
- 在“FMS URL”中输入您的输入通道 URL。例如 rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940。有关如何获取输入通道 URL的信息,请参阅“通过 Azure 媒体管理门户开始使用直播流媒体”。
- 输入流名称“stream%i”。此设置将强制 FMLE 为每种质量指定唯一流名称。
您将看到如下初始配置:
开始编码并将数据推送至输入通道
- 单击 Connect(连接)。该操作会将编码器连接至输入通道 URL。
- 单击 Start(启动),开始编码。
注意:您也可以在命令行模式下使用 FMLE。有关详细信息,请参阅“如何在命令行模式下启动 Flash Media Live Encoder”
预览流
可使用 Azure 管理门户预览流。还可以使用 Azure 门户发布流。有关如何发布和预览流的信息,请参阅“通过 Azure 媒体管理门户开始使用直播流媒体”。
您还可以使用 https://amsplayer.azurewebsites.net/, 它支持多播放器选项和预览。
在 Azure 媒体服务输入通道中使用 FFmpeg
FFmpeg 是一款知名的开源软件,主要用于不同媒体格式的编码和创建。RTMP 是受支持的协议之一。您可以从 FFmpeg 的官方网站获取更多信息并下载一个副本。
在本文中,我不会深入介绍 FFmpeg 命令及其使用详情,仅提供流处理本地文件并模拟直播流媒体的示例命令。您可以使用 FFmpeg 从多个来源/设备(包括本地摄像头、桌面捕捉和其他设备)中捕捉数据。更多信息请访问其官方网站。
示例命令
在本文中,我将采用 Windows 系统下的 FFmpeg。您可以使用适合您的平台的 FFmpeg 版本。
单码率:
C:\tools\ffmpeg\bin\ffmpeg.exe -v verbose -I MysampleVideo.mp4 -strict -2 -c:a aac -b:a 128k -ar 44100 -r 30 -g 60 -keyint_min 60 -b:v 400000 -c:v libx264 -preset medium -bufsize 400k -maxrate 400k -f flv rtmp://channel001 streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/mystream1
多码率( 500 、 300 和 150 Kbps 三种码率):
C:\tools\ffmpeg\bin\ffmpeg.exe -threads 15 -re -i MysampleVideo.mp4 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s svga -b:v 500k -minrate 500k -maxrate 500k -bufsize 500k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_500 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s vga -b:v 300k -minrate 300k -maxrate 300k -bufsize 300k -r 30 -g 60 -keyint_min 60 sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_300 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s qvga -b:v 150k -minrate 150k -maxrate 150k -bufsize 150k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_150
多码率命令创建出三种质量(500、300 和 150 Kbps)的视频,关键帧间隔为 2 秒,并将输出发送至 Azure 媒体服务输入通道。有关如何获取输入通道 URL 的信息,请参阅“通过 Azure 媒体管理门户开始使用直播流媒体”。
预览流
可使用 Azure 管理门户预览流。还可以使用 Azure 门户发布流。有关如何发布和预览通道和节目的信息,请参阅“通过 Azure 媒体管理门户开始使用直播流媒体”。
您还可以使用 https://amsplayer.azurewebsites.net/, 它支持多播放器选项和预览。
高级配置
默认情况下,Azure 媒体服务通道配置为接受每 2 秒一个关键帧(KeyFrameInterval)的数据或帧组。而动态打包技术针对 HLS 输出采用 3 比 1 映射配置,也就是说,如果输入每 2 秒一个关键帧配置的数据,您的 HLS 输出部分将是 6 秒(3 * 2 秒)
如果您希望输入不是每2秒一关键帧的数据,您需要调整相应的值。您应使用 SDK 调整相应值并创建新通道,因为这些高级设置无法通过门户网站进行更改。有关如何使用 SDK 创建新通道的详细信息,请参阅“使用 Media Services SDK for .NET 创建直播流媒体应用程序”
要配置这些参数,请参考:
总结与后续步骤
希望本文演示了获取 RTMP 实时编码器以供 Azure 媒体服务使用并配置基本流媒体的简便性。通过 Azure 媒体服务直播流媒体和其他功能还能实现更多。有关直播流媒体和 SDK 支持的详细信息,请参阅“使用 Azure 媒体服务直播流媒体”。有关 Azure 媒体的一般信息,请访问 Azure 媒体服务官方网站。
我们希望您试用我们新推出的支持 RTMP 输入的直播流媒体服务。如果有任何反馈,欢迎告知我们。
祝您使用愉快!
本文翻译自:https://azure.microsoft.com/blog/2014/09/18/azure-media-services-rtmp-support-and-live-encoders/