多协议、性能稳定、丰富API的流媒体服务器软件
如何实现多码率自适应?
这篇文章介绍了Wowza® Media Server实现多码率自适应(ABR)的详细步骤。

内容





VOD点播业务的多码率自适应


面向Adobe Flash播放器、Apple iOS设备、Microsoft Silverlight播放器的多码率自适应(ABR)流媒体需要你事先按照需要的码率大小,将一个视频内容预先编码为多个不同码率的视频文件。为了保持正常和平滑的切换,不同码率的多个文件的关键帧必须要对齐。这是必须在编码的时候通过设置正确的关键帧间隔和帧率来完成的。当你完成这些准备后,请将这些视频文件拷贝到[install-dir]/content 目录下,然后创建一个同步多媒体集成语言(SMIL)文件将多个不同码率的文件组织在一起。

例如,一个同样的VOD内容有下面四个不同码率的文件:

  • bigbuckbunny_450.mp4 (450kbps total bitrate)
  • bigbuckbunny_750.mp4 (750kbps total bitrate)
  • bigbuckbunny_1100.mp4 (1100kbps total bitrate)
  • bigbuckbunny_1500.mp4 (1500kbps total bitrate)

用一个文本编辑器在[install-dir]/content文件夹下创建一个名字为bigbuckbunny.smil的SMIL文件,包含下面的内容:
<smil>
    <head>
    </head>
    <body>
        <switch>
            <video src="mp4:bigbuckbunny_450.mp4" system-bitrate="450000"/>
            <video src="mp4:bigbuckbunny_750.mp4" system-bitrate="750000"/>
            <video src="mp4:bigbuckbunny_1100.mp4" system-bitrate="1100000"/>
            <video src="mp4:bigbuckbunny_1500.mp4" system-bitrate="1500000"/>
        </switch>
    </body>
</smil>
        
你可以看到在<switch>里面的<video>实体,它表示了每一个待播放的视频内容。system-bitrate 是这个文件的总码率(单位bits-per-second)(包括音频和视频)。

注意:你最好按码率大小从低向高的顺序来组织不同的码率,就像上面的例子那样。如果你没有从最低的码率开始按增序组织,可能所有播放器都无法实现码率自适应功能。 Microsoft Smooth流媒体只能在视频之间切换,音频将采用<switch>下面第一个文件中的音频轨道。如果你想采用第一个文件意外的另外一个音频轨道,你可以在<switch>中添加一个<audio> 实体。例如:
<smil>
    <head>
    </head>
    <body>
        <switch>
            <video src="mp4:bigbuckbunny_450.mp4" system-bitrate="450000"/>
            <video src="mp4:bigbuckbunny_750.mp4" system-bitrate="750000"/>
            <video src="mp4:bigbuckbunny_1100.mp4" system-bitrate="1100000"/>
            <video src="mp4:bigbuckbunny_1500.mp4" system-bitrate="1500000"/>
            <audio src="mp4:bigbuckbunny_1500.mp4" system-bitrate="128000"/>
        </switch>
    </body>
</smil>
        
注意:
  • 当使用Adobe HDS (San Jose) 或 Apple HLS (Cupertino) 流媒体技术时,<audio> 实体将被忽略。
  • JWplayer和Flowplayer采用客户端侧的XML文件来描述每一个码率的内容文件,不是本文上面介绍的服务端SMIL文件。它们都使用BWCheck 模块
你可以从下面的链接下载SMIL文件和对应的视频文件:

H.264 Main profile
http://www.wowzamedia.com/_h264/bigbuckbunny.smil
http://www.wowzamedia.com/_h264/bigbuckbunny_450.mp4
http://www.wowzamedia.com/_h264/bigbuckbunny_750.mp4
http://www.wowzamedia.com/_h264/bigbuckbunny_1100.mp4
http://www.wowzamedia.com/_h264/bigbuckbunny_1500.mp4

针对移动流媒体的低码率的配置(H.264 Baseline profile - 兼容iPhone 和 iPod touch):
http://www.wowzamedia.com/_h264/bigbuckbunnyiphone.smil
http://www.wowzamedia.com/_h264/bigb...iphone_300.mp4
http://www.wowzamedia.com/_h264/bigb...iphone_400.mp4
http://www.wowzamedia.com/_h264/bigb...iphone_600.mp4

这些例子内容文件已经经过了正确的编码并且是关键帧对齐的。

VOD 播放


Adobe Flash 播放器 (San Jose/Adobe HDS)

针对Wowza Media Server 3.5.0及以上版本,双击[install-dir]/examples/VideoOnDemandStreaming/FlashHTTPPlayer/player.html, 输入下面的信息,然后点击Connect 按钮。
Stream: http://[wowza-ip-address]:1935/vod/smil:bigbuckbunny.smil/manifest.f4m

Apple iOS 设备 (Cupertino/Apple HLS)

在iOS设备的Safari浏览器上输入下面的URL:
URL: http://[wowza-ip-address]:1935/vod/smil:bigbuckbunny.smil/playlist.m3u8

Microsoft Silverlight (Smooth Streaming)

针对Wowza Media Server 3.5.0及更高版本,双击[install-dir]/examples/VideoOnDemandStreaming/SilverlightPlayer/player.html, 输入如下信息, 然后点击Connect 按钮。
Stream: http://[wowza-ip-address]:1935/vod/smil:bigbuckbunny.smil/Manifest

默认情况下,Microsoft Smooth 流媒体将将为manifest data 实时地计算内容我呢见的视频码率和音频码率. 如果你希望使用Wowza Media Server 使用SMIL文件中的码率信息,你需要在[install-dir]/conf/[application]/Application.xml文件的HTTPStreamer/Properties添加下面的属性设置:
<Property>
    <Name>smoothStreamingUseSMILBitrates</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>
        
当在这个配置下运行时,Wowza Media Server 将认为视频和音频的system-bitrate 的数值仅仅针对视频和音频自己。

Adobe Flash Player (RTMP)

针对Adobe Flash 的动态流传输,则需要在客户端做一定的工作。下面的资料展现了如何在Flash里实现动态流传输的详细步骤:

Dynamic streaming in Flash (part 1)
Dynamic streaming in Flash (part 2)
Dynamic streaming in Flash (part 3)

当你采用Wowza Media Server的Adobe HTTP Dynamic Streaming (Adobe HDS)时,最好打开dynamic stream 标签,它将提供更精确的带宽计算能力。要打开dynamic stream 标签,请打开[install-dir]/conf/[application]/Application.xml文件,在Streams/Properties 里添加下面的属性:
<Property>
    <Name>enableDynamicStreamMarkers</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>
		

直播业务的多码率自适应


面向Adobe Flash播放器、Apple iOS设备、Microsoft Silverlight播放器的直播业务多码率自适应(ABR)需要你的编码器能够从一个直播源生成多个不同码率的直播流并且关键帧要对齐。 你同样可以用一个SMIL文件将这些流组织在一起。

例如,假定编码器输出了三个不同的码率的直播流:

  • myStream_700 (700kbps total bitrate)
  • myStream_350 (350kbps total bitrate)
  • myStream_200 (200kbps total bitrate)

用一个文本编辑器,在[install-dir]/content文件夹下创建一个名称为myStream.smil的SMIL文件。内容如下:
<smil>
    <head>
    </head>
    <body>
        <switch>
            <video src="myStream_200" system-bitrate="200000"/>
            <video src="myStream_350" system-bitrate="350000"/>
            <video src="myStream_700" system-bitrate="700000"/>
        </switch>
    </body>
</smil>
你可以看到在<switch>中有一个<video>实体代表了每一个码率的直播流。system-bitrate 的数值代表了每一个直播流的总码率(单位bits-per-second)。

注意:你最好按码率大小从低向高的顺序来组织不同的码率,就像上面的例子那样。如果你没有从最低的码率开始按增序组织,可能所有播放器都无法实现码率自适应功能。 Microsoft Smooth流媒体只能在视频之间切换,音频将采用<switch>下面第一个文件中的音频轨道。如果你想采用第一个文件意外的另外一个音频轨道,你可以在<switch>中添加一个<audio> 实体。例如:
<smil>
    <head>
    </head>
    <body>
        <switch>
            <audio src="myStream_200" system-bitrate="96000"/>
            <video src="myStream_200" system-bitrate="200000"/>
            <video src="myStream_350" system-bitrate="350000"/>
            <video src="myStream_700" system-bitrate="700000"/>
        </switch>
    </body>
</smil>
注意:
  • 当使用 Apple HLS (Cupertino) 流媒体技术时,<audio> 实体将被忽略。

直播播放


Adobe Flash Player (San Jose/Adobe HDS)

针对Wowza Media Server 3.5.0及更高版本,双击[install-dir]/examples/LiveVideoStreaming/FlashHTTPPlayer/player.html, 输入如下信息,然后点击Connect 按钮。

Stream: http://[wowza-ip-address]:1935/live/smil:myStream.smil/manifest.f4m

Apple iOS 设备 (Cupertino/Apple HLS)

在iOS设备的Safari浏览器上输入如下的URL:

URL: http://[wowza-ip-address]:1935/live/smil:myStream.smil/playlist.m3u8

Microsoft Silverlight (Smooth Streaming)

针对Wowza Media Server 3.5.0及更高版本,双击[install-dir]/examples/LiveVideoStreaming/SilverlightPlayer/player.html, 输入下面的信息,软后点击Connect 按钮。

Stream: http://[wowza-ip-address]:1935/live/smil:myStream.smil/Manifest

默认情况下,Microsoft Smooth 流媒体将将为manifest data 实时地计算内容我呢见的视频码率和音频码率. 如果你希望使用Wowza Media Server 使用SMIL文件中的码率信息,你需要在[install-dir]/conf/[application]/Application.xml文件的HTTPStreamer/Properties添加下面的属性设置:
<Property>
    <Name>smoothStreamingUseSMILBitrates</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>
		
当在这个配置下运行时,Wowza Media Server 将认为视频和音频的system-bitrate 的数值仅仅针对视频和音频自己。

Adobe Flash Player (RTMP)

针对Adobe Flash 的动态流传输,则需要在客户端做一定的工作。下面的资料展现了如何在Flash里实现动态流传输的详细步骤:

Dynamic streaming in Flash (part 1)
Dynamic streaming in Flash (part 2)
Dynamic streaming in Flash (part 3)