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

自本周起 Azure Media Services 团队将撰写多篇文章,内容涵盖了 Microsoft Azure 实时串流服务的功能以及如何使用它们。 首先,我们会介绍一些基本的实时串流所需要的一些要件,并且将其应用到一个特定的场景 (网络直播桌面)。 而我们只需要透过 Azure 的管理入口网站,无需任何的程序代码即可达到所需要的设定。 但是在未来的几天,将会有另外一篇文章说明如何使用 Microsoft Azure SDK 以程控的方式来达到相同的设定。

直播流媒体的基本组成

首先我将简要介绍端到端解决方案的基本组成元素,并在下文的说明部分中将这些元素整合在一起。


  • Azure帐户和订阅 -如果您还没有 Microsoft Azure帐户,
  • 摄像机 -本文中我将使用我的笔记本电脑上的网络摄像头,当然您也可以采用其他任何摄像机。如果您的摄像机有 USB 等数字输出功能,可直接将其连接到您的 PC,如果没有,您还需要一个视频采集卡来将摄像内容传入至 PC。
  • 实时编码器 -目前 Azure媒体服务支持分段式 MP4/Smooth Streaming和 RTMP这两种实时输入协议。RTMP的使用现已相当普遍,因此有广泛的编码器软件可选,包括免费编码器(如 Flash Media Encoder 或FFMPEG)、平价编码器(如 Wirecast)、高产值产品(如 NewTek的 Tricaster)以及Cisco、Elemental、Image等提供的专业级编码器。在以下示例中,我将使用 Telestream的 Wirecast作为示范。如果您还没有安装编码器,可以从 Telestream的网站下载 Wirecast 试用版。需要注意的是,视频编码需要占用相当大的 CPU资源,因此我在笔记本电脑上示范编码时,将编码限制为三种质量等级,并使用相对较低的码率。如果您使用的笔记本电脑或其他 PC 的 CPU运算能力较低,您应时刻监视 CPU的使用率,若一直高于 70%,则应在编码配置文件中删除一个质量等级或降低码率和分辨率。
  • 高速 Internet连接 -要提供直播视频服务,您需要有 Internet连接,且连接须具备相当稳定的出站速度,至少要达到传输视频码率的 1.5倍,以弥补编码器输出时码率的波动。举例来说,在以下解决方案中,我将使用三种质量级别(呈现形式)的直播流,分别是 400、600和 900 Kbps,合计码率 1900Kbps,因此我需要至少2850Kbps (2.85Mbps)的出站速度。
  • Azure媒体服务通道 -通道是 Azure媒体服务中唯一新增的概念,用来实现直播流媒体。通道作为 Azure媒体服务的一部分,为编码器的输出提供一个传入点。
  • Azure媒体服务资源 -媒体服务中的资源是存储所有与流媒体有关的音频、视频和元数据的容器。
  • Azure媒体服务程序-程序是 Azure媒体服务中的一个实体,在通道上创建,以便开始将在此通道上收到的流媒体写入资源中。
  • Azure媒体服务流媒体定位器 -如果您想要让资源可以开始存取流媒体,需要在资源上创建一个定位器。
  • Azure媒体服务流媒体端点和流媒体单元 -流媒体端点为您提供一个URL,可从中找到您的直播和 VOD资源,同时还提供动态打包功能,并确保流媒体的成功传输。配置于流媒体端点的流媒体单元为端点提供最大输出量保证。每个流媒体单元提供 200Mbps 的流媒体输出容量,您也可以根据需要在您的流媒体端点增加更多单元,以提高其容量。
  • Azure CDN -在不久的将来,我们将直接集成 Azure CDN和 Azure媒体服务。集成完之后,流媒体端点将会有一个新设置,可允许您指定是否希望自动配置连接至您的流媒体端点的 CDN 端点;与此同时,您可以直接通过您的流媒体端点进行流处理,或者通过 Azure支持部分联系我们,让我们为您的流媒体端点设置 Azure CDN。
  • 视频播放器 - Azure 媒体服务流媒体端点提供动态打包功能,使您可以使用您想访问的每种设备所需的流媒体协议输出实时流。在下面示范的解决方案中,我将针对除 iOS 外的所有平台(桌面浏览器、Android和Windows Phone)使用遵循 MPEG-DASH标准的 HTML5/DASH.js播放器,针对 iOS平台使用 HLS版本 3播放器。有关我们的动态打包功能的更多信息,

示例场景:网络直播事件

现在我们先稍微解释一下我们下面将实施的场景。在以下步骤中,我们将构建一个进行桌面网络直播的解决方案,可用以播放来自我的 PC网络摄像头的培训内容。此项网络直播在直播流媒体专业术语中称为一个“事件”,即一个拥有开始时间和结束时间的实时流,这与始终处于开启状态的电视频道等无限期运行的“线性”流媒体有所区别。我们将在以后的博客文章中介绍如何将我们的直播服务运用到线性流媒体中。

事前设置

在运行事件之前,我们需要采取以下步骤进行事前设置。这些步骤可以在事件开始前任何时间进行,以实现全面妥当配置,不需要赶在“开始直播”前才进行。

创建 Azure媒体服务通道和流媒体端点

在第一组设置步骤中,我们将使用 Azure管理门户配置基础结构,以接收来自编码器的实时流,并对其进行流处理和打包以传输至所有客户端的播放设备。

打开 Azure 管理门户,然后单击顶部菜单栏中的“Portal”(门户)。使用您的微软 ID 登录,便会进入到管理门户。

2. 在左侧的垂直菜单条中,单击“MEDIASERVICES”(媒体服务)菜单项。您将可以看到您已创建的所有媒体服务帐户清单在右侧打开。

3. 单击您在本例中希望使用的媒体服务帐户,我在这里使用的是名为“jasonblog”的媒体服务帐户。现在您将能够看到有关该媒体服务帐户的所有详细信息,包括可用以创建和控制所有媒体服务实体类型的顶部菜单栏。如果您已经使用媒体服务一段时间的话,您将会注意到,目前在顶部菜单栏中新增了“CHANNELS”(通道)菜单项,所标志的状态为预览,其中包含对 Azure 媒体服务通道的所有管理和控制功能。

4. 单击顶部菜单栏中的“CHANNELS”(通道),将会列出您的帐户中的所有通道(如有)。

5. 如果您还没有建立任何通道,则会显示消息“Youhave no channels.  Add one to get started!”(您没有任何通道,请添加一个以开始使用!)。单击此消息下方的“ADD NEW CHANNEL”(新增通道),此时将打开一个对话框,您可以在其中设置通道的属性。

6. 在“Createa new Live Channel”(创建新的直播通道)对话框中,输入您的通道名称。本例中,我使用的名称为“webcast”。接下来指定您将使用的输入协议,本例中我将使用输出RTMP的Wirecast,因此将保留设置为默认状态。最底下有三个复选框:1)“Start the new channel now”(立即启动新通道)复选框。选中此复选框之后,您将不需要再执行额外操作来启动此通道。2)“Add one streaming unit”(添加一个流媒体单元)。如果您的“默认”流媒体端点尚未配置有任何流媒体单元,则将自动预设为选中。如果尚未配置流媒体单元,请保留选中状态,我们将自动为您配置一个流媒体单元,同样也可以为您省去后期再进行设置的麻烦。3)“Restrict video ingest to my computer’s current IP address”(将视频输入限制为我的计算机当前的 IP地址)。如果选中此复选框,则会针对您的通道应用一个 IP访问控制列表(ACL),将通道锁定为仅接受来自您的计算机的输入。本例中我们取消选中此复选框。以下是我的设置的屏幕截图。

7. 单击“Createa new Live Channel”(创建新的直播通道)对话框右下角的对勾按钮,将会创建并启动一个新通道,并将一个新的流媒体单元添加至您的“默认”流媒体端点中。您现在可以在屏幕底部看到创建及启动新通道的状态条。完成这些步骤大概需要花费几分钟时间。

配置并启动编码器

Cenk Dingiloglu已在其博客中发表重点介绍编码器配置的文章。我下面采取的步骤仍然有效,但若要获取更多详细信息​

现在我们已经拥有了媒体服务中所需要的基础结构,下一步是设置 Wirecast,并将流媒体推送至我们的通道中。Telestream正在开发针对 Azure 媒体服务集成的功能,从而可减少所需步骤,不过由于此选项尚未广泛应用,我还是会演示所有手动步骤。为加快设置的速度,我将使用先前已经创建好的 Wirecast 文档,其中提供了您所需的大多数设置。本文中将不会介绍此文档的创建细节,晚些时候,Cenk Dingiloglu将发表另一篇博文,介绍有关编码器的更多详情。


2. 启动Wirecast并打开刚刚下载的文档。您很可能会遇到和下图一样的错误,即Wirecast找不到文档中所述的媒体。出现此错误的原因是,您没有使用我在设置时使用的摄像设备,这里我们先单击“Cancel”(取消),接下来我们会解决这一问题。

3. 我们可以在Wirecast的用户界面中添加摄像来源。在用户界面的底部有三排源,将鼠标悬停在第一排中的“+”上,然后单击摄像机图标。此时会显示当前连接至您的 PC的摄像机列表,选择您所需要的摄像机。完成后,您就可以在第一排中看到新的摄像源以及来自此摄像机的实时视频源。

4. 现在,单击Wirecast中的“Output”(输出)菜单,选择“OutputSettings”(输出设置)。由于您使用的是我创建的文档,现在您应该能看到如下对话框,显示有三种流媒体编码的质量级别,分别是400、600和900Kbps。其中,400Kbps的质量等级使用H.264基本配置文件进行编码,用以支持较旧的Android设备,而600和900Kbps的质量级别则是使用主配置文件进行编码,可提供更高的质量等级。在对话框中唯一缺少的是推送流媒体到达的目标“Address”(地址),我们稍后会进行填写。

5. 回到Azure管理门户,在通道清单中找到您的通道。将鼠标悬停在“INGESTURL”(输入URL)列上,单击右侧的复制图标,将通道的输入URL复制到剪贴板中。

6. 回到 Wirecast和“Output Settings”(输出设置)对话框,将刚才复制的通道输入 URL 粘贴至“Address”(地址)文本框中。您需要对要编码的全部三种质量等级重复此操作。也就是说,要确保单击对话框左侧的每个“RTMP Flash Server”,为每一个都设置该地址。

7. 单击“Output Settings”(输出设置)对话框上的“OK”(确定)按钮。

8. 单击您在步骤 3 中创建的摄像源,可将其移动至用户界面的“Preview”(预览)部分。

9. 接下来单击“—>”按钮,将“Preview”(预览)的画面移动至“Live”(直播)之上,此时您应该可以在用户界面顶部的两个位置看到您的摄像来源

10. 现在您已经完成了所有Wirecast配置,剩下的唯一步骤就是点击Wirecast用户界面左上角的“Stream”(启动流)按钮,将流媒体推送至您的Azure媒体服务通道。如果一切顺利的话,您可以在按钮中看到一个红点,显示您目前正在进行直播。


11.现在您可以在通道预览发布点直接查看所收到的流媒体,来检查流媒体是否已正确传送至通道中。回到Azure管理门户,单击底部命令条中的“PLAY”(播放)命令。此时将显示子命令列表,单击“PlayPreview URL”(播放预览URL),此操作可在门户中打开一个视频播放器,并将其连接到您的通道上的预览URL。

注意:如果有任何原因需要停止并重启编码器,您应当首先通过 Azure 管理门户中的“RESET”(重置)命令来重置通道。

启动事件并播放流媒体

我们已经将流媒体传输至通道中,现在即可启动我们的事件,方法是通过创建资源、程序和流媒体定位器来归档流媒体,让观众通过流媒体端点观看直播。我们将借助门户中的一个快捷键一步完成所有这些操作。

创建和启动程序

1.    回到 Azure管理门户,并进入到“CHANNELS”(通道)部分。如果您的帐户中有多个通道,请确保已勾选您在上述步骤中设置的通道(用蓝色突出显示)。在页面底部的命令条中,单击“START STREAMING”(启动流媒体),然后在出现的请求确认信息中单击“YES”(是)。命令完成后,“PUBLISH URL”(发布 URL)列将显示一个URL,您可以用它从您的流媒体端点上获取您的流媒体。

播放直播流媒体

现在直播流媒体已经推送至资源中,便可以将资源从流媒体端点中拉出,并将其动态打包为所有我们目前支持的协议(MPEG-DASH、HLS版本 3、HLS版本 4、HDS和 Smooth Streaming)形式。我们将充分利用这些功能,使直播流媒体可以在桌面浏览器(通过使用名为Smooth的 Flash 控件)以及 iOS 和 Android设备(通过 HLS版本 3)上播放。

1.    在 Azure管理门户中,将鼠标悬停在您的通道的“PUBLISH URL”(发布 URL)上,单击复制按钮,将 URL复制到剪贴板中。

2.    将发布 URL粘贴至您最喜爱的文本编辑器中,类似于“http://<帐户名称>.origin.mediaservices.windows.net/<locator_guid>/<stream_guid>.ism/manifest”,即 Smooth Streaming URL。再粘贴一次,并添加“(format=mpd-time-csf)”,这将告诉流媒体端点将流媒体打包为 MPEG-DASH 格式。然后再次粘贴,并添加“(format=m3u8-aapl-v3)”,这将告诉流媒体端点将流媒体打包为 HLS 版本 3格式。

3. 在Windows PC 或Mac上(您需要支持媒体源扩展的浏览器,例如最新版本的Internet Explorer 或Chrome),这是我创建的一个样本 DASH.js 视频播放器,您可以用来测试您的流媒体。将DASH URL 粘贴至顶部的文本框中,然后单击“Load”(加载)。您可以在Android设备和Windows Phone 上重复此项操作。


注意:我的样本 DASH播放器也可以将 DASH URL作为 URL上的查询参数。换句话说,您可以创建一个类似以下示例的 URL,并将其分配至不同设备:http://dashplayer.azurewebsites.net/?URL=http://<jason的帐户>.origin.mediaservices.windows.net/../…ism/manifest(format=mpd-time-csf)

4.    在 iOS设备上,打开 Safari浏览器,在地址栏中输入 HLS版本 3格式的 URL,就可以直接通过手机播放器播放流媒体。您也可以创建一个带有video标签的 HTML5 页面,并赋予其 HLS URL作为视频的来源,或者建立一个本地应用程序,来达到同样的效果。

结束事件

要结束事件,您需要停止程序,使其停止将流媒体推送至资源中。此操作为简单的一步式操作。

回到Azure管理门户,选择您所使用的通道,然后单击底部命令条中的“STOPSTREAMING”(停止流媒体)命令,并在出现的请求确认信息中单击“YES”(是)。此操作将会阻止程序在通道中运行并会将其删除。

我们的直播服务的一项重要功能就是,我们的资源可以实现从直播到点播的无缝/即时转换。如果您现在再次通过您的视频播放器播放刚才的流媒体,您会发现仍可以使用同样的 URL 观看到流媒体,只是现在变成了点播状态,不再是直播。

清理通道

如果您希望启动另一个事件,您可以将当前一切保持运行状态。您需要做的就是按照上述步骤在通道上开启一个新程序。但一切都结束后,您可以将上面配置的基础结构部分或全部清除掉。

1.    首先是编码器,点击 Wirecast中的“Stream”(流媒体)按钮,停止推送流媒体,之后便可以关闭应用程序。

2.    现在也可以关闭通道。在 Azure管理门户网中,再次进入 Channel(通道)页面,然后在底部命令条中单击“STOP”(停止)命令。完成后,通道将处于“Stopped”(已停止)状态,表明此通道不会再消耗任何资源,您可以使通道无限期处于这一状态,这样就不会产生任何费用。当您希望再次使用此通道时,您可以单击“START”(启动)命令,即可再次启动此通道,并且拥有相同的输入 URL,因此您无需重新配置您的编码器。

3.    最后是流媒体端点方面。如果您想继续以点播流媒体方式提供您的直播事件的归档,您需要使流媒体端点保持运行。但如果您不需要,则可以进入管理门户的“STREAMING ENDPOINTS”(流媒体端点)选项卡,选择您可能名为“default”(默认)的流媒体端点,然后单击底部命令条中的“STOP”(停止)命令。

结论及下一步计划

在上文中,我们介绍了使用 Azure 管理门户对直播事件进行无需代码的设置、执行和清除(如需要)所需要的步骤。未来几天,我们将发表更多文章,介绍我们测试过的 RTMP 编码器列表、如何设置此类编码器、如何通过我们的 SDK设置和运行直播事件、如何确保直播流媒体的内容安全性以及如何运行线性流媒体等等。

结论以及下一步发展

在上面的文章内容中,我们已经透过 Azure 的管理页面来进行设定、执行、移除一个实时的串流。 在未来的几天,我们将会发表更多文章,内容涵盖了如何对使用 RTMP 的编码器进行设定、如何使用我们的 SDK 来执行现场活动 ( live event )、如何保护影片内容的安全性以及如何进行线性串流 ( linear streams )。