Microsoft Azure Media Services 实时直播服务 ( Live )其实早已被 NBC 运动频道用于多项重大运动赛事直播,包括英超联赛、NHL、周日橄榄球之夜 ( Sunday Night Football ) 以及 2014 年索契冬季奥运会。在最近刚结束的 2014 世界杯足球赛期间,Azure Media Services 实时媒体服务同样的也被10 家世界性的电视传播公司用来转播比赛。也因此,我们对于这项服务的稳定性、可扩充性以及性能都深具信心,也很高兴可以让所有使用者都可尝试提供实时直播服务给他们的用户。

首先,我会介绍一些基本的实时串流所需要的一些要件,并且将其应用到一个特定的场景 (网络直播桌面)。而我们只需要透过 Azure 的管理入口网站,无需任何的程序代码即可达到所需要的设定。

实时串流的基本组件 :

以下将开始介绍在进行实时串流时所需要用到的组成,并且在文章的最后,将这些组件做结合。
Azure 的订阅账户
Azure Media Services 媒体服务帐户
视讯摄影机
实时编码器 (Live Encoder),前支持 RTMP 这项协议的编码器软件已经变得相当普遍,使用 Telestream 的 Wirecast 做为演示编码器,如果您没有此一编码器软件,可以从Telestream的网站去下载 Wirecast 试用版。
高速的网络连接,提供视讯直播的服务,您需要连接一个高速的网络,而这个网络需要有相当稳定的传出速度 ( 至少要为传送视讯的比特率的 1.5倍 )。
Azure Media Services Channel 媒体服务信道:道 ( Channel ) 是在 Azure 媒体服务中的功能,用来实现实时串流。信道在 Azure 媒体服务范围内提供编码器输出一个内嵌点 ( ingest point )。
Azure Media Services Streaming Endpoint and Streaming Units 媒体服务串流端点与串流单位

1. 串流端点 (Streaming Endpoint) 提供了一个URL,从中您可以得到您的实时串流或是 VOD (Video On Demand) 资产,同时,也提供了动态封装功能以及安全的传送串流。
2. 串流单位 (Streaming Units) 保证了一定的最大输出量提供给串流端点,每个串流单位提供了 200 Mbps 的串流流出产量,并且根据使用上的需求,可以增加更多的容量到您的串流端点。
视讯拨放器

Azure 媒体服务的串流端点提供了动态封装的功能,因此可用来针对多种不同客户端所使用的通讯协议,提供不同的媒体流格式 ,例如 : iOS 使用到 HTTP 实时数据流版本3格式 ( HLS version 3 ) 。在以下范例中,我们将使用一个遵循 动态与适应性媒体串流标准 (MPEG-DASH) 的 HTML/DASH.js 拨放器来支持多个平台的影片拨放 (计算机浏览器、Android、Windows Phone)。


实际范例 : 网络直播

现在,让我们来解释一下本篇案例将可以达到何种效果。

在以下的步骤中,我们将建立一个网络直播,用来拨放计算机视讯镜头所拍摄的事件。在直播串流的专有名词中,我们可以把这项直播想象成一个”事件”(event)并且拥有一个开始的时间和结束的时间。这个观念和我们平常在电视上看到的直播节目(线性串流Linear streaming)为一个对比,在之后的介绍文章中,我们也会介绍如何使用Azure媒体服务来达到线性串流。

事前设定(Pre-Event Setup)

在要进行直播的事件前,我们需要透过以下的步骤来做事前设定。

注意 : 这些步骤可以在任何时间点进行,而不需要赶在开始直播前做设定。

建立一个 Azure Media Services channel 媒体服务信道和串流端点

在第一组设定步骤中,我们将使用Azure管理入口网站配置一些基础建设,这些基础建设将要用来接收来自编码器(encoder)的直播串流还有来自客户端的拨放设备所传送的封包(packet)。

1. 点击连结到azure官方站点,上方的选单中点选”入口网站”(Portal),登入您的Azure订阅账户,您将会进入到Azure的管理网站。

2. 在最左侧的垂直选单中,选取”媒体服务” (MEDIA SERVICES),您将可以看到在 Azure 订阅帐户中的所有媒体服务。


3. 选取你要在哪个媒体服务中建立这项范例。

在这篇文章中,将使用先前建立好的名为 barttest 的媒体服务。

您可以在媒体服务里面看到顶端的选单,这里可以用来建立和控制所有媒体服务的细部设定。若您已经使用 Azure 媒体服务一段时间的话,您将会注意到,现在新增”信道”这项新功能,在这里可以管理和控制 Azure 媒体服务的实时信道 ( Live Channel )。

4. 选取最上方选单的”信道”选项,将会列出您在这个媒体服务中所建立的信道列表(如果您有建立的话)

5. 若您还没有建立任何的通道,则在下方会显示”您没有任何通道”,选取”新增通道”,将会打开一个对话宽,在这个对话框中设定您的信道属性。


6. 在”建立新的实时通道”对话框中,输入您的通道名称。

接下来要指定通道所使用的采集内嵌协议 (ingest protocol)。在本范例中,我所使用编码器为 Wirecast,其输出嵌入协议为RTMP。

最底下有三个选项 :

A. “立即启动新通道” : 选取这个选项,之后您就不需要再做额外的动作去启动这个通道。

B. “加入一个数据流单位” : 这个选项在您的串流端点上没有任何串流单位时,将会自动预设为选取。选取这个选项,Azure 将会自动提供一个串流单位给您,这样您就不需要再去花时间做设定。

C. “将影片内嵌限制为我计算机的目前IP地址” : 若选取这个选项的话,它会为您的通道申请一个 IP 访问控制列表 (IP access control list , ACL ),ACL 将会锁定这个通道只能够在您的计算机上作输入的动作。在本范例中我们将此选项取消。


7. 点击对话框右下角的确认按钮,则Azure媒体服务就会开始建立一个新的通道,并且将一个新的串流单位加到您默认的串流端点中。

您可以在屏幕的底部看到建立新信道的进度列,新增一个新的通道大概需要花上几分钟的时间。


配置和启动编码器 (Encoder)

透过上面的事前设定,我们现在拥有了进行媒体服务时所需要的基础建设。

下一个步骤则是设置 Wirecast,并且在我们的 Azure 服务通道上启动它。

为了加快设定的步骤,我们使用先前已经建立好的 Wirecast 配置文件,在这里面已经设定好了实时转播所需要的设定。

1. 下载 Wirecast 配置文件 http://jasonsueblog.blob.core.windows.net/wirecastdocument/WirecastDocument.wcst

2. 打开 Wirecast 和刚刚下载的配置文件。您很可能得到和下面图示一样的错误,那就是 Wirecast 找不到文件中所描述的媒体装置。会显示这项错误的原因是因为您并没有使用与本文中相同的录像设备。在这里我们先点击取消,在下一个步骤中我们将会解决这个问题。


3. 在 Wirecast 的用户接口中,我们可以新增新的影像来源。

在客户端的底部有三排来源,点取”+”,并且选择相机的图标,此时会显示目前连接计算机的录像装置,选取您要的录像装置之后,您就可以在录像来源上看到目前摄影机的输出画面。


4. 选取 Wirecast 的 ”Output” 清单,并且选择 ”Output Setting”。

您可以在对话框上看到,目前有三种串流编码的质量等级 (400Kbp、600Kbp、900Kbps)。

400Kbp 质量等级是使用 H.264 视讯编译码标准中的 Baseline profile 编码格式(H.264 Baseline profile),用来支持旧的 Andorid 播放设备,而 600Kbp 和 900Kbps 质量等级则是 Main profile编码格式,用来提供高质量的视讯水平。

在对话框中唯一缺少的则是目标串流地址(Address),我们在稍后会填写上去。


5. 回到Azure管理入口网站并且找到您的信道列表。

在信道列表上选取内嵌 URL (INGEST URL),并且复制这段URL。


6. 再次回到 Wirecast 并且选取 ”Output Setting” 对话框,将刚才复制的内嵌 URL 贴到 ”Address” 框中,在这里要确保三种质量等级的串流编码都有进行此项动作。


7. 点击”OK”按钮。

8. 点击您在步骤三时所建立的录像来源,并且让它显示在用户接口上 ”Preview” 的地址


9. 接下来,点击“—>”按钮,将“Preview”的画面移动到“Live”上,此时您在画面上可以看到录像的输出


10. 完成以上的步骤,您已经完成了所有 Wirecast 的设定,剩下唯一的步骤就是要将您的串流”推”’到您的 Azure 媒体服务信道上。

点选左上角 ”Stream” 按钮,若一切顺利的话,您将可以看到有一个红点在按钮中,让您知道您目前正在进行直播。


11. 现在您可以检查串流是否正确地从预览的发送点传送到通道中。

回到Azure管理账户中,在底部的工具栏选取”播放”按钮。此时会有对话框出现,选择”播放预览URL”,这个动作将会打开一个视讯拨放器,并且将其连接到您通道上的预览URL。

clip_p_w_picpath036

NOTE : 注意,若您有任何理由需要停止编码器并且重新启动的话,您首先需要在Azure管理账户上选取”重设通道”来重新调整您的通道设定。

开启事件 (Event) 和播放串流

现在已经将视讯串流移动到信道之中,现在我们可以透过建立媒体服务资产(Asset)、媒体服务节目(Program)还有媒体服务串流定位器来开始我们的事件(Event),并且让观看者可以透过串流端点来观看我们的直播。

我们将使用一个快速的方法来达到以上的所有目标。

建立和开启节目

1. 回到 Azure 管理帐户,并且进入到通道的设定页面里,点击页面最下方工具栏的”启动数据流”,一旦完成这项步骤之后,通道列表上的”发行URL”将会被填入,您可以从上方的串流端点上拉进您的串流。


播放直播串流

现在,直播串流已经被存入资产中,资产是可以从串流端点中拉出的,并且可以动态的打包目前我们所支持的协议 ( MPEG-DASH,、HLS version 3、 HLS version 4、HDS、Smooth Streaming ),我们将充分利用这项功能让直播串流可以在桌上计算机、iOS  和Android设备上播放

1. 在 Azure 管理入口网站中,在通道列表的页面,选取复制”发行URL”。

2. 将"发行URL"将它贴到任何一个文本编辑器上

它看起来像是

“http://<您的账号名称>.origin.mediaservices.windows.net//.ism/manifest”

在这段URL上添加 (format=mpd-time-csf),这将告诉串流端点要把串流打包为 MPEG-DASH。若增加的是 (format=m3u8-aapl-v3)则是告诉串流端点将串流打包为 HLS (version3)。

3. 在 Windows PC 或 MAC 上,(您需要一个浏览器可以支持扩充软件资源,像是最新版本的 Internet Explorer 或 Chrome ),您可以透过http://aka.ms/dashplayer,用来测试您的串流。

在页面顶端贴上 DASH URL 并且选取 ”Load”。您可以在Android装置或是Windows Phone重复这项动作。

NOTE : DASH 拨放器也可以用来把 DASH URL 当成查询的参数,换句话说,您可以建构一个如以下范例的URL,并且分配到不同的装置上

http://dashplayer.azurewebsites.net/?URL=http://<您的账号名称>.origin.mediaservices.windows.net/../…ism/manifest(format=mpd-time-csf)

4. 在 iOS 设备上,打开 Safari 浏览器,并且输入 HLS ( version3 ) 的URL,就可以直接获取本机播放器的串流,您也可以建立一个带有视频标签的 HTML5 页面,并且给予它一个 HLS 的 URL 作为其视讯的来源,来达到同样的效果。

停止事件

当要结束一个事件时,您需要停止将串流传入到资产中,这可以透过一个简单的步骤来达成。

回到 Azure 管理页面,并且选择您所使用的通道,在最底下的工具栏中,选取"停止数据串流"。这个动作将会阻止节目在您的通道中运作并且会将其删除。


我们的实时服务所拥有的功能之一,就是我们的资产在实时或是VOD状态是无缝接轨的,如果您现在去连接先前的URL,您还是可以发现原先的串流还是存在,但是是VOD而不是实时的。

清除通道

若您想要在通道内运行其它的节目,您当然可以清除掉先前的串流。

1. 第一,透过选取 Wirecast 上方的"Steam"按钮,停止传送串流,之后就可以关闭编码器。

2. 第二,回到Azure管理页面,选取"通道",并且选取最下方工具栏的"停止通道"。当通道状态变为"已停止",则表示该通道并不会消耗任何的资源,当然这样也不会有任何的费用产生。

下次您要再次使用该通道时,您可以选取"启动信道",此时该信道会再次的启动,并且拥有相同的内嵌URL ( ingest URL ),这样您就不需要重新设定您的编码器了。

3. 最后,关于串流端点,若您想要继续提供 VOD 的纪录,则您需要让串流端点保持运作。但是若您不需要,则可以进入到"数据流端点"页面中,在最底下选取"停止",则您的串流端点就不会再继续运作。