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 LiveEncoder (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 -> OutputSettings(输出->输出设置)。
![]()
- 在
Select an OutputDestination(选择输出目标)对话框中,选择
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 媒体管理门户开始使用直播流媒体》。
您还可以使用
http://amsplayer.azurewebsites.net/
, 它提供了多播放器选项和预览。
Flash Media LiveEncoder (FMLE)
配置
FMLE
是 Adobe
的一款免费软件。您可以从
http://www.adobe.com/products/flash-media-encoder.html
中获取更多信息并下载此编码器的一个副本。默认情况下,FMLE
支持 MP3
音频输出。目前,Azure
媒体服务不提供实时转码服务,需要通过 AAC
音频编解码器将源流媒体动态打包为多种格式,如 MPEG-DASH、Smooth
Streaming 和 HLS
等。要在 Azure
媒体服务中使用 FMLE,需要一个
AAC 插件。在本文中,我将使用 Main Concept
的一款插件。您可以通过以下链接获取更多信息并下载试用版:http://www.mainconcept.com/eu/products/plug-ins/plug-ins-for-adobe/aac-encoder-fmle.html
配置
FMLE
您首先要做的是,将 FMLE
配置为采用NTP时间源
(绝对时间) ,
以支持RTMP
时间戳。为此,请执行以下步骤:
1.
关闭编码器。
2.
在文本编辑器中打开 FMLE config.xml
文件。Windows
操作系统的默认安装位置为 C:\Program Files\Adobe\Flash Media
LiveEncoder 3.2\(64
位系统为 C:\Program Files (x86)\Adobe\Flash Media
LiveEncoder 3.2\)
Mac
操作系统的默认安装位置为 Macintosh HD:Applications:Adobe:Flash
MediaLive Encoder 3.2
3.
将 streamsynchronization/enable
设置为 true。<streamsynchronization>
<!– “true”为启用此功能,“false”为禁用。–>
<enable>true</enable>
4.
保存文件,然后重启编码器。
从设备列表中选择源设备。在本文中,我将使用“Integrated
Camera”(集成摄像机)从预设菜单中选择编码预设或自己创建一个。如果要自己创建,请阅读“ RTMP
通道支持”部分,了解相关要求。我将使用预设菜单中的“Multi
Bitrate – 3streams (1500) Kbps – H.264”(多码率
- 3 股流媒体
(1500) Kbps – H.264),创建 3
种质量。
![]()
单击
图标配置 H.264 高级设置并将“Key Frame frequency”(关键帧频率)设置为 2 秒钟。注意:预设名称将变成“Custom”(自定义)
![]()
将帧率设置为 30 fps
选择音频设备
将音频输出格式设置为 AAC。注意:默认情况下无法使用
AAC 和 HE-AAC。FMLE
本身仅支持 MP3
音频。需有插件帮助,才能启用 AAC
编解码器。设置所需音频带宽。在本文中,我将使用 96 Kbps
码率和 44,100 Hz
采样率。
![]()
选择“Stream to Flash MediaServer”(传输流至
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 媒体管理门户开始使用直播流媒体”。
您还可以使用
http://amsplayer.azurewebsites.net/,
它支持多播放器选项和预览。
在 Azure
媒体服务输入通道中使用 FFmpeg
FFmpeg
是一款知名的开源软件,主要用于不同媒体格式的编码和创建。RTMP
是受支持的协议之一。您可以从 FFmpeg
的官方网站获取更多信息并下载一个副本。
在本文中,我不会深入介绍
FFmpeg 命令及其使用详情,仅提供流处理本地文件并模拟直播流媒体的示例命令。您可以使用
FFmpeg 从多个来源/设备(包括本地摄像头、桌面捕捉和其他设备)中捕捉数据。更多信息请访问其官方网站。
示例命令
在本文中,我将采用 Windows
系统下的 FFmpeg。您可以使用适合您的平台的
FFmpeg 版本。
单码率:
C:\tools\ffmpeg\bin\ffmpeg.exe -v verbose -iMysampleVideo.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 -maxrate400k -f flvrtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/mystream1
多码率(、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 -svga -b:v 300k -minrate 300k -maxrate 300k -bufsize 300k -r 30 -g 60 -keyint_min60 -sc_threshold 0 -f flvrtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_300-strict
experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -sqvga -b:v 150k -minrate 150k -maxrate 150k -bufsize 150k
-r 30 -g 60 -keyint_min 60 -sc_threshold 0 -fflvrtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_150
多码率命令创建出三种质量(、300
和 150 Kbps)的视频,关键帧间隔为
2 秒,并将输出发送至 Azure
媒体服务输入通道。有关如何获取输入通道 URL
的信息,请参阅“通过
Azure 媒体管理门户开始使用直播流媒体”。
预览流
可使用 Azure
管理门户预览流。还可以使用 Azure
门户发布流。有关如何发布和预览通道和节目的信息,请参阅“通过
Azure 媒体管理门户开始使用直播流媒体”。
您还可以使用
http://amsplayer.azurewebsites.net/,
它支持多播放器选项和预览。
高级配置
默认情况下,Azure
媒体服务通道配置为接受每 2
秒一个关键帧(KeyFrameInterval)的数据或帧组。而动态打包技术针对
HLS 输出采用 3
比 1
映射配置,也就是说,如果输入每 2
秒一个关键帧配置的数据,您的 HLS
输出部分将是 6
秒(3 * 2
秒)
如果您希望输入不是每秒一关键帧的数据,您需要调整相应的值。您应使用
SDK 调整相应值并创建新通道,因为这些高级设置无法通过门户网站进行更改。有关如何使用
SDK 创建新通道的详细信息,请参阅“使用
Media Services SDK for .NET 创建直播流媒体应用程序”
要配置这些参数,请参考:
总结与后续步骤
希望本文演示了获取 RTMP
实时编码器以供 Azure
媒体服务使用并配置基本流媒体的简便性。通过 Azure
媒体服务直播流媒体和其他功能还能实现更多。有关直播流媒体和 SDK
支持的详细信息,请参阅“使用
Azure 媒体服务直播流媒体”。有关
Azure 媒体的一般信息,请访问
Azure
媒体服务官方网站。
我们希望您试用我们新推出的支持
RTMP 输入的直播流媒体服务。如果有任何反馈,欢迎告知我们。
祝您使用愉快!
本文翻译自:http://azure.microsoft.com/blog/2014/09/18/azure-media-services-rtmp-support-and-live-encoders/
Azure 媒体服务的 RTMP 支持和实时编码器的更多相关文章
- Azure 媒体服务换新锁,更安全更方便,新钥匙请收好!
不知道有多少人已经把家里的门锁换成了数字化的指纹锁?沿用了几百上千年的传统门锁,在技术的帮助下无疑变得更方便,不用带钥匙,还能远程控制和操作,最重要的是,终于不用担心「衣果(luǒ)着」出门扔垃圾,风 ...
- Azure 媒体服务支持 DASH 实时传送流
Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...
- JW Player 现在支持 Azure 媒体服务
Vishal Sood Azure媒体服务首席项目经理 此合作伙伴关系是关于什么内容? Azure媒体服务现已支持一些最常见的流媒体格式,其中包括 Microsoft SmoothStreaming ...
- 【Azure媒体服务 Azure Media Service】Azure Media Service中Stream Endpoint 说明 (流式处理终结点)
Azure 媒体服务是一个基于云的媒体工作流平台,用于生成需要编码.打包.内容保护和直播活动广播的解决方案. 在视频的直播,点播方案中,媒体服务的架构主要由三部分构成: 推流端,把本地视频或直播内容推 ...
- 通过新的 Azure 媒体服务资源管理器工具管理媒体工作流
Xavier Pouyat Azure 媒体服务高级项目经理 几个月前,一家广播公司找到了我,希望我向他们提供一种图形界面工具,好让他们使用 Azure媒体服务来上传.管理资产并对资产进行编 ...
- Azure 媒体服务可将优质内容传输至 Apple TV
作为内容提供商,如果想要将优质内容传输到Apple TV,需要使用Apple FairPlay Streaming (FPS)技术. 但是这个技术的构建比较繁琐,基于此,Azure提供了FairPla ...
- Azure媒体服务的Apple FairPlay流功能正式上线
在此我们高兴地宣布,Azure FairPlay Streaming服务已正式商用. FairPlay允许用户轻松构建解决方案,并可扩展到最新版本的Apple TV.Azure媒体服务可以结合现有的P ...
- 宣布正式发布 Azure 媒体服务内容保护服务
Mingfei Yan Azure媒体服务项目经理 我们非常高兴地宣布正式发布 Azure 媒体服务内容保护服务.这包括 Microsoft PlayReady许可服务和 AES明文密钥交付服务!此外 ...
- 中国Azure媒体服务RESTAPI的Endpoint
Amber Zhao Thu, Feb 26 2015 4:09 AM 由于海外Azure和中国Azure有不同的domain,很多用户在使用媒体服务RESTAPI时,需要指定中国Azure媒体服务 ...
随机推荐
- JS实现回到页面顶部动画效果 2016.03.23
最近在模仿各大网站写页面样式和交互,发现好多都有回到顶部的需要,所以写了一下js,记录下来. 发现还可以添加从快到慢的动画效果和随时下拉滚动条停止滚动的功能, 参考了imooc上相关课程,最终实现JS ...
- javascript闭包的理解
闭包是Javascript的一个难点,但也是一个很重要的知识点. 1.首先我们要知道变量作用域链 变量的作用域分两种:全局变量和局部变量.没有定义到任何函数中的变量为全局变量,在函数中定义的变量为局部 ...
- 08_一个java.lang.NullPointException报错
[报错代码] public class UserDaoTest{ private SqlSessionFactory sqlSessionFactory; //此方法在执行testFindUserBy ...
- HTML5学习笔记----html5与传统html区别
一. HTML5语法的改变 该知识点所说变化指的是基于HTML4基础上所定义的改变,主要有如下: HTML5的文件扩展符(.html或.htm)与内容类型(text/html)保持不变. HTML5中 ...
- php练习7——类的运用(四则运算or面积计算[javascript小技巧——根据需求显示不同界面])
要求:请编写一个类,该类可以进行四则运算,也可以进行矩形面积计算 1.程序 viewCount.html Count.class.php printCount.php 2.结果 ...
- laravel队列-让守护进程处理耗时任务
待解决的问题 最近在做一个服务器集群管理的web项目,需要处理一些极其耗时的操作,比如磁盘格式化分区.对于这个需求,最开始的想法是,为了让节点上的rpc(远程过程调用) service端尽可能简单(简 ...
- HTML5 改良的 input 元素的种类
html5中增加改良的input 元素 . 在过去我们制作网页输入框,会用到不少JS验证,如今有了HTML5写这种效果已经没有那么麻烦了,下面我来给大家介绍两种HTML5的input的新增加的类型应用 ...
- C# 两个获得程序运行路径的函数
EXE文件的存储路径,不太受调用时环境变量的影响: Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Lo ...
- cmd下运行java文件时,找不到或无法加载主类的解决方法
最近再看java,却被一个看似很基础的hellorworld头疼了十几分钟,百度了一下,若你在cmd下编辑及运行.java文件时报错,解决方案如下,如图所示:
- java 资料收集
java中线程队列BlockingQueue的用法 为什么jdk中把String类设计成final? 深入浅出单实例Singleton设计模式