多协议、性能稳定、丰富API的流媒体服务器软件
如何在直播流中继架构下配置nDVR功能?
这篇文章介绍了如何在直播流中继(origin/edge)架构下配置nDVR功能。直播流中继是通过部署多台服务器将一个直播流提供给大规模用户的方法。这个架构使用源/边缘配置,原始的输入流被发布在源服务器上,内容片段也被录制在源服务器上, 之后,就可以通过多个边缘服务器访问直播流来播放。Wowza nDVR 会将播放列表信息从源服务器传递到边缘服务器。边缘服务器之后就会通过Http协议对外提供音频和视频数据。

注意: Wowza Streaming Engine™ 4.0 需要所有的源服务器和边缘服务器均运行Wowza Streaming Engine 4.0及以上版本。 在源和边缘架构中,Wowza Media Server 和 Wowza Streaming Engine 不能组合使用。



安装


获得授权并在源服务器和所有边缘服务器上安装 Wowza Media Server。所有的源服务器和边缘服务器上的Wowza Media Server必须采用相同的版本。

配置源服务器


这个章节介绍了在直播流中继架构下配置Wowza nDVR的基本步骤和Application.xml的配置。在这个例子中,缘服务器上的应用名为dvrorigin

  1. 创建文件夹[install-dir]/applications/dvrorigin

  2. 创建文件夹[install-dir]/conf/dvrorigin ,并将[install-dir]/conf/Application.xml文件拷贝到新的文件夹下。

  3. 用文本编辑器打开新拷贝的Application.xml文件,做如下改动:

    • Streams/StreamType 属性设置为livertp-live。如下:
      <StreamType>live</StreamType>
      				
    • Streams/LiveStreamPacketizers属性设置为:
      <LiveStreamPacketizers>dvrstreamingpacketizer</LiveStreamPacketizers>
      				
      这表示DVR会将录制的内容片段存储在这台Wowza Media server上。除了DVR流播放外,要使用直播流播放,你可以增加下面的打包器(packetizer)。例如:
      <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer,dvrstreamingpacketizer</LiveStreamPacketizers>
      				
    • DVR/Recorders属性设置为:
      <Recorders>dvrrecorder</Recorders>
      			   
    • DVR/Store属性设置为:
      <Store>dvrfilestorage</Store>
      				
    • DVR/WindowDurationDVR/ArchiveStrategy以及DVR/StorageDir 属性设置为你需要的值。要了解更多,请阅读Wowza Ndvr插件的一些高级配置

    • HTTPStreamers属性设置为:
      <HTTPStreamers>dvrchunkstreaming</HTTPStreamers>
      				
      将会使得源服务器可以向边缘服务器传送录制的音频和视频片段。


边缘服务器的配置


在每一个边缘服务器上配置创建一个新的Wowza Media Server 应用。在这个例子中,应用名为dvredge

  1. 创建文件夹[install-dir]/applications/dvredge

  2. 创建文件夹[install-dir]/conf/dvredge,并将[install-dir]/conf/Application.xml文件拷贝到这个新的文件夹下。

  3. 用文本编辑器打开这个新拷贝的Application.xml文件,并做如下改动:

    • Streams/StreamType属性修改为:
      <StreamType>liverepeater-edge</StreamType>
      				
    • Streams/LiveStreamPacketizers属性修改为:
      <LiveStreamPacketizers>dvrstreamingrepeater</LiveStreamPacketizers>
      				
      这表示DVR录制数据来自另一个Wowza Media Server,并由当前这个Wowza Media Server接收。处了DVR流播放外,要使用直播流播放,你需要增加下面的打包器(packetizer)。如下:
      <LiveStreamPacketizers>cupertinostreamingrepeater,smoothstreamingrepeater,sanjosestreamingrepeater,dvrstreamingrepeater</LiveStreamPacketizers>
      				
      这样可以测试是否可以从边缘服务器上播放直播流,这对排查故障非常有用。

    • 保持DVR/Recorders属性为空:
      <Recorders></Recorders>
      				
    • 保持DVR/Store属性为空,因为录制的数据存储在源服务器上:
      <Store></Store>
      				
    • 边缘服务器上的DVR/ArchiveStrategyDVR/StorageDir属性会被忽略,因此这些值没有任何影响。

    • DVR/WindowDuration属性应该保持为0或者不要设置它,因为对录制数据的任何清理只发生的源服务器上。

    • Application/Repeater/OriginURL 应该采用WOWZ™协议(Wowza messaging protocol)指向源服务器。这个设置决定了边缘服务器如何获得播放列表信息进而获得音频和视频数据段。例如:
      <Repeater>
      	<OriginURL>wowz://[origin-ip-address]/dvrorigin</OriginURL>
      </Repeater>
      				
      其中[origin-ip-address] 是源服务器的IP地址。

      WOWZ协议是Wowza Streaming Engine 中的一个新的基于TCP的消息协议,用于服务器和服务器之间的消息通信。它在默认情况下就是可用的。如果在源和边缘服务器中有一台服务器运行的不是Wowza Media Server 3.5,那么服务器之间将会建立RTMP连接。

    • HTTPStreamers协议的值设置为你在播放DVR流时需要的协议。请在cupertinostreamingsmoothstreamingsanjosestreaming选择一个或多个。 要使用全部协议的时,设置如下:
      <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
      				


发布直播流



  1. 启动 Wowza Streaming Engine。

  2. 向源服务器上的dvrorigin应用发送一个输入流。在这个例子中,流的名字(stream name)为myStream.


播放


H.264编码的输入流可以通过Wowza Streaming Engine支持的任何Http协议来传输。

在iOS设备的Safari web 浏览器上访问:
http://[wowza-ip-address]:1935/dvredge/myStream/playlist.m3u8?DVR
		

调优


MediaCache
因为边缘服务器将会从源服务器请求录制的数据段,我们推荐在边缘服务器的DVR配置中使用MediaCache。 这将允许DVR数据段在边缘服务器上缓存,从而降低从边缘服务器器到源服务器的访问请求。要了解更多,请阅读如何为Wowza nDVR功能配置MediaCache?

内存中的DVR数据段
默认情况下,Wowza nDVR 插件会将最近的10个录制数据段保存在内容中。在源服务器和边缘服务器上降低磁盘访问的方法就是增加这个数值。注意,你应该理解这样做的影响。 它会把每一个流的录制数据段保存在内存中,这样会导致内存占用增大。

例如,假设你有20个高码率的DVR流。 On average, 每一个视频数据端900KB,每一个音频数据段100KB (这样,每一个数据段有1 MB大小)。如果你将这个值从10增大到50,你将在内存中为每一个流多保存40个数据段,将占用接近1 GB 的服务器内存(20 * 40 * (900 KB + 100 KB) = 800 MB)。

在调整这个数值前,分析好需要占用多少内存,你是否还有剩余的内存,以及磁盘I/O是否是个问题。 之后,请在[install-dir]/conf/dvredge/Application.xml文件的DVR/Properties下面添加下面的属性:
<Property>
    <Name>chunkMemoryCacheSize</Name>
    <Value>20</Value>
    <Type>Integer</Type>
</Property>