Wowza nDVR快速上手指南
转载请注明:文章来自www.wowza.cn
注意: 要访问最新的技术资料,请访问http://www.ttstream.com/wowza/
这篇文章可以帮助你快速了解如何使用Wowza nDVR 插件。www.wowza.cn

内容



介绍

Wowza nDVR传输流的基本概念

安装和配置

最佳实践

常见问题


介绍



总览


在Wowza Media Server®3.0.0及以上版本中,Wowza nDVR 插件提供了在对直播流录制的同时允许用户播放、暂停、倒回到之前的一个录制点,或者回到当前直播点的能力。 个性化的配置让你可以控制录制流的归档策略以及它是否可用于对外提供流传输服务。此外,Wowza nDVR 需要输入流的音频和视频是对齐的。

在Wowza Media Server中配置可以Ndvr功能和配置基础的直播流应用基本类似,可以很容易被添加到现有的Wowza Media Server的配置中。

Wowza Ndvr传输流的基本概念




传输流的类型


Wowza nDVR 支持live类型的传输流,此外也支持在直播流中继(origin/edge)架构中的传输流类型:

  • live: 发布和播放直播内容(特别是针对1对多的直播节目)。

  • liverepeater-origin: 源(origin)传输流类型,用于在直播流中继(origin/edge)架构中传输单个流。

  • liverepeater-edge: 边缘(edge)传输流类型,用于在直播流中继(origin/edge)架构中传输单个流。

要配置Wowza nDVR 直播流中继,请参考如何在直播流中继架构中配置Wowza nDVR功能?

支持的媒体格式


Wowza nDVR 支持下面的视频和音频编码格式:

视频

  • H.264
  • 纯视频流

音频

  • AAC
  • MP3
  • 纯音频流

Wowza nDVR 很灵活,它可以通过配置支持多种业务流程。www.wowza.cn,输入流可以是H.264视频以及AAC或MP3音频。你也可以插入和录制纯音频或纯视频的输入流。

支持的播放器技术也必须能支持你的媒体格式:

  • Microsoft Silverlight 需要同时具备音频和视频才能播放。针对直播流,它的关键帧频率必须在1到4秒之间(最好是2秒)。超过4秒时可能引起播放暂停。

  • Apple iOS 设备需要H.264格式的视频编码以及AAC或MP3立体声。Profile 和 level 的支持依赖具体的设备,请阅读Apple iOS设备支持的Profile和level信息


支持的传输协议和播放器


Wowza Media Server 可以使用下面的HTTP协议传输H.264编码的流:

  • Adobe HTTP Dynamic Streaming (Adobe HDS)
  • Apple HTTP Live Streaming (Apple HLS)
  • Microsoft Smooth Streaming

在Wowza Media Server的安装包中已经包括了下面的例子播放器,你可以通过它来播放nDVR录制的文件内容:

Microsoft Smooth Streaming (Silverlight)

Wowza Media Server 3.5.0及以上版本: [install-dir]/examples/LiveDVRStreaming/SilverlightPlayer/player.html
Wowza Media Server 3.1.2及以前版本: [install-dir]/examples/LiveDvrStreaming/clientSilverlight/LiveDvrSmoothStreaming.html

Strobe

Wowza Media Server 3.5.0及以上版本: [install-dir]/examples/LiveDVRStreaming/FlashHTTPPlayer/player.html
Wowza Media Server 3.1.2及以前版本: [install-dir]/examples/LiveDvrStreaming/clientStrobe/DvrOSMFPlayer.html

这些例子播放器是为了让你在使用你自己的播放器之前对你的nDVR功能做基本的测试。

注意: 另外一个选择是JW Player。Flowplayer现在还不支持ndvr播放功能。

播放的URL

注意: 在下面的例子中,[wowza-ip-address]是运行Wowza Media Server的服务器IP地址或域名。

使用Adobe Flash 播放器(San Jose/Adobe HDS):

Wowza Media Server 3.5.0及以上版本
双击[install-dir]/examples/LiveDVRStreaming/FlashHTTPPlayer/player.html,输入下面的信息,然后点击Connect按钮。

Wowza Media Server 3.1.2及更早的版本
双击[install-dir]/examples/LiveDvrStreaming/clientStrobe/DvrOSMFPlayer.html,输入下面的信息,然后嗲级Play按钮。

Code:
http://[wowza-ip-address]:1935/dvr/myStream/manifest.f4m?DVR

使用Apple iOS设备(Cupertino/Apple HLS):

在设备的Safari web浏览器上输入下面的URL:
Code:
http://[wowza-ip-address]:1935/dvr/myStream/playlist.m3u8?DVR

使用Microsoft Silverlight (Smooth Streaming):

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

Wowza Media Server 3.1.2及更早版本
双击[install-dir]/examples/LiveDvrStreaming/clientSilverlight/LiveDvrSmoothStreaming.html,输入下面的信息,然后点击Play按钮。

Code:
http://[wowza-ip-address]:1935/dvr/myStream/manifest?DVR

注意: 播放URL可以包含大写的"DVR" 或小写的"dvr"。但Wowza Media Server的应用名是区分大小写的。

码率自适应流传输


当Wowza nDVR 功能被添加到你的直播业务流程中,你可以为直播流使用Synchronized Multimedia Integration Language (SMIL) 文件。SMIL的工作机制需要你的编码器能够从一个输入源生成不同码率的、关键帧对齐的多个输出流。

重要: 多个不同码率的输出流必须是关键帧对齐的。Wowza nDVR 创建切片文件时依赖关键帧对齐,并且在不同码率之间切换时刚好发生在切片的边界(可以从新的切片文件开始)。

码率自适应的播放URL

smil:前缀被用于播放用SMIL文件定义的一个输出流的组合。要看SMIL文件的例子,请阅读在How to set up live streaming using an RTMP-based encoder中的"Adaptive bitrate streaming"主题。

使用Adobe Flash 播放器(San Jose/Adobe HDS):

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

Wowza Media Server 3.1.2及更早版本
双击[install-dir]/examples/LiveDvrStreaming/clientStrobe/DvrOSMFPlayer.html,然后输入下面的信息,然后点击Play按钮。

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

使用Apple iOS 设备(Cupertino/Apple HLS):

在设备的Safari Web浏览器上输入下面的URL:
Code:
http://[wowza-ip-address]:1935/live/smil:myStream.smil/playlist.m3u8?DVR

使用Microsoft Silverlight (Smooth Streaming):

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

Wowza Media Server 3.1.2及更早版本
双击[install-dir]/examples/LiveDvrStreaming/clientSilverlight/LiveDvrSmoothStreaming.html,输入下面的信息,然后点击Play按钮。

Code:
http://[wowza-ip-address]:1935/live/smil:myStream.smil/manifest?DVR

注意: 播放URL可以包含大写的"DVR" 或小写的"dvr"。但Wowza Media Server的应用名是区分大小写的。

安装和配置



授权


要开始使用Wowza nDVR 插件时,必须先用试用、合约(日租或月租)、永久或开发者授权安装Wowza Media Server。

包括Wowza Media Server和所有插件在内的所有Wowza产品的授权码都存储在[install-dir]/conf/Server.license文件中。如果你用试用、合约(日租或月租)、开发者授权安装了Wowza Media Server,那么Wowza nDVR 和其它增加插件就已经包含在Server中的授权中了,不需要另外的插件授权码了。

如果用永久授权安装Wowza Media Server,请用文本编辑器打开Server.license文件,并在新的一行里添加你的Wowza nDVR授权码。 www.wowza.cn 当服务器在独立模式(standalone)下重新启动后,这个新的授权将会生效。这些授权是叠加的,因此当你在Server.license中添加授权码时,请确定要保留文件中原有的授权码,并在新的一行添加新的授权码。这些授权码的顺序并不重要。 授权码的前5个和最后5个数字将显示在控制台窗口上。

下面是一个Server.license文件的例子,它有一个永久Wowza Media Server授权码、2个Wowza Transcoder插件授权码以及一个Wowza nDVR 插件授权码:

SVRP3-LaGpC-ZrTD9-F4Y3S-a9bR2-h5t3C
TRN23-Ry6qe-4mT8J-yKj2W-4N5sH-2Td3a
TRN13-y9Gj2-kneqT-2zjHp-GadzB-N6fwa
DVRA3-k3r3R-nzxCB-ypjs5-Sk3y9-ahFdF


应用配置


要为直播流配置Wowza nDVR功能,请阅读如何为直播业务配置和运行Wowza nDVR功能?

内容存储


当Wowza nDVR开始对直播流进行录制时,将会创建一个内存存储目录。这个内容存储目录定义在Application.xml文件的DVR/StorageDir属性中。 默认的位置为[install-dir]/dvr/[app-name]/_definst_/[streamName].[n]

如果应用名([app-name]) 是 live,流的名字([streamName]myStream,在Application.xml的默认设置下,存储目录将会位于[install-dir]/dvr/live/_definst_/myStream.0

如果你将DVR/StorageDir属性设置为E:/myStorage ,你的流的名字为myStream, 存储目录将位于E:/myStorage/live/_definst_/myStream.0

目录结构

当Wowza nDVR 录制直播流时,它会默认在存储目录下每隔600秒(10分钟)创建一个新的文件夹。这个文件夹的的命名规则为HHHH_MM_SS 其中 H = hours, M = minutes, S = seconds. 举个例子,如果Wowza nDVR 录制直播流1小时10分钟,那么内容存储目录下将包含下面的文件夹:

0000_00_00
0000_10_00
0000_20_00
0000_30_00
0000_40_00
0000_50_00
0001_00_00
0001_10_00
manifest.txt

每一个用时间轴表示的文件夹下都包含.m4fa (音频数据) 和 .m4fv (视频数据) 文件以及一个.txt (manifest) 文件。 如果输入流包含metadata数据,则还会创建一个.m4fm (metadata)文件。 这些文件采用MPEG-4格式编码,它们一起表示一段音频和视频的切片数据,它将被用于DVR播放。 以0000_00_00文件夹为例,第一个切片的相关文件如下:

A-0000_00_00_000.m4fa
dvrManifest_0000_00_00.txt
M-0000_00_00_000.m4fm
V-0000_00_00_000.m4fv

在时间轴表示的文件夹下的这些文件的名字规则是在其所属文件夹的名字前加上一个A (audio)、V(video) 或 M(metadata) 在加上一个毫秒为单位的时间戳(A-HHHH_MM_SS_mmm)。

重要: 不要删除或移动任何这些文件,否则将会出现播放错误。

归档策略


你可以配置一个归档策略,用于告诉nDVR插件:如果已经有了一个同名的流存储目录,当有一个新的采用同样的应用名和同样的流名的流到来时该如何处理。(例如,当编码器重新连接后)。 这个策略由Application.xml文件中的DVR/ArchiveStrategy属性控制。 你可以将这个属性设置为以下类型:

  • append: 让Wowza nDVR 将录制的数据追加到已有的存储目录下。这是默认的设置。

  • delete: 让Wowza nDVR 将已有的录制存储删除掉,用新的代替。

  • version: 让Wowza nDVR 创建一个新的录制存储目录。假设流名为myStream,第一次的录制数据将被存储在[install-dir]/dvr/[application-name]/myStream.0目录下,第二次的录制数据将被存储myStream.1目录下,以此类推。无论之前是否有同名的录制数据,之前的都会不会被删除或覆盖。


DVR 平移窗口时长


你可以设置一个时长(单位秒),用来约定DVR存储中可以播放的录制数据。这个时长是一个平移窗口,它从当前直播点开始,然后向后倒推。在这个窗口之外的旧数据将被文件系统清除掉。 这个时长的值由Application.xml文件中的DVR/WindowDuration属性控制。默认的WindowDuration0 ,意味着没有DVR平移窗口,所有的数据都是可以用于DVR播放的。

最佳实践



音频和视频的对齐


输入流有较短的关键帧间隔及对齐的音频和视频能实现最好的效果。Wowza nDVR 希望输入流的音频和视频是对齐的。 www.wowza.cn 当音频和视频不对齐超过了容忍的限度,你将会在[install-dir]/logs中看到下面的警告信息:
Code:
WARN  DvrPacketHandler.handlePacket[live/_definst_/myStream]: Tossing packet with excessive duration: {DvrAMFPacket: size:6785, type:9, src:32185, seq:126, absTimecode: 35557077, timecode:131362, utcTc:1337890914597}
如果遇到不对齐的问题,你可以在Application.xml文件中设置参数来做一些补偿。然而,Wowza nDVR不能解决这个问题。请看Wowza Ndvr插件的一些高级配置中关于dvrAllowableAVPacketDelta参数的介绍。 注意,这个属性对音频和视频不对齐的情形有一定帮助。如果你已经有不对齐的问题,增加默认值可能会导致更多的问题。增加这个值将增加没有录制的切片的数量,这将导致整体质量变得不可接受。

关键帧间隔大小


HTTP流传输至少有三个切片的延时,这就是为什么更小的关键帧间隔被经常推荐。更小的关键帧间隔会让播放列表中有更多的数据。 当确定你的编码器设置时,请考虑到播放列表的大小以及从服务器发送出来的频率。

稳定的直播流


Wowza nDVR需要你的直播流是稳定的。当对Wowza nDVR做故障排查时,首先要测试的是在没有使用nDVR功能时,你的直播流是可以正常播放。

录制长度


Wowza nDVR 录制的最大时长为30小时。在实际部署环境下,处理这么大的播放列表数据是无法工作的。同时,如果在录制过程中发生问题(磁盘满了、网络故障、内存不够等) 会影响整个录制数据。超大的manifest文件也可能会引起性能问题,因为整个manifest文件必须被加载到内存中。 因此要选择一个策略,将数据录制到一个合理的长度,这样小一点的manifest文件可以被快速加载到内存也可以快速从内存中丢弃。 如果录制的数据中只有一小部分会被用来对外提供流播放服务,那么稍长一些的录制数据也是可以的。 www.wowza.cn 例如,一个24小时的录制数据但只有1或2个小时播放窗口对比一个涵盖整个24小时录制数据的播放列表而言有较小的播放列表。 每隔几秒(基于关键帧大小)中将重复请求播放列表; 因此,一个超大的播放列表会导致播放故障,应该避免这种情况的发生。 要了解更多关于如何请求录制数据的一部分来播放,请阅读如何使用Wowza nDVR的 playlist request API

推荐的基于OSMF的播放器


我们推荐使用OSMF2.0版本,用户报告说当用更早的版本时会遇到缓存上的一些问题。随Wowza Media Server 3.5.0 (或更高版本)一同安装的Strobe播放器位于[install-dir]/examples/LiveDVRStreaming/FlashHTTPPlayer/player.html,它使用默认的缓存参数。

内建的安全保护


Wowza nDVR 有多个内建的安全机制,而不需要任何附加的配置。

如果Wowza nDVR 检测到一个非法的数据段,它将会通过重新计算尝试对错误进行修复 if the clock was reset. 或者,如果它不能修复这个问题,这个数据段将被抛弃。例如,视频数据远远超前于音频数据的一个有问题的输入流可能会打来一段非法的数据段。如果遇到这种问题,在日志中将会出现类似下面的警告信息:
Code:
WARN LiveStreamDvrRecorder.endChunk[live/_definst_/myStream]: Recalculating duration by estimating.  Was -601.  Is now 811.
WARN  DvrPacketHandler.handleHolder(): Skipping holder that cannot be re-aligned. Holder: {DvrPacketHolder: type:V pt:3332574 utc:1335872445912 dur:1230 (KEY, ) codec:7 numPackets:0 dataLen:18513 enc.n:0 pkt:{{DvrAMFPacket: size:18513, type:9, src:1, seq:0, absTimecode: 3332574, timecode:1230, utcTc:1335872445912}}}

常见问题



请举例说明用户可以灵活的从某个时间点开始观看直播内容?


Wowza nDVR 适用于哪些希望对直播流进行录制并可以灵活播放的应用场景。如果你有一个一次性的直播活动,或者是类似于教堂礼拜这样的重复行活动,你可以将这个活动直播出来提供给实时用户以及来迟的用户:

  1. 对于在直播活动一开始就观看的用户,他/她在观看时可以倒回到之前的某一个视频片段上观看,之后又可以回到当前直播点继续观看。

  2. 如果用户迟到了,他们可以从直播开始后的时间观看,直到直播活动结束。在这个场景下,用户可以从直播开始后的任意时间起观看--1 分钟后或1 小时后。

  3. 用户可以在直播活动结束后观看。在这个场景下,播放时是将已经录制的内容当作VOD播放的。


我在什么时候需要用Wowza nDVR来实现录制功能?


Wowza nDVR 适用于当你在录制直播流时希望可以进行暂停、回退、重新回到当前直播点等操作的应用场景。其它Wowza Media Server支持的录制方法,比如Live Stream Recordlive-record stream type, 适用于当你希望将录制的数据封装到MP4或FLV文件中用于日后的VOD播放的应用场景。

如果我已经有了一个配置好的Wowza直播应用,为实现nDVR功能,我是否需要另外再创建一个Wowza应用?


不需要,你可以很容易的将nDVR功能加入到已有的直播应用中。详细步骤,请阅读如何为直播业务配置和运行Wowza nDVR功能?。 如果你有多种应用流程,例如有一些直播流是不需要录制的或者你希望为不同的输入流应用不同的DVR录制参数,那么你可以为每一个应用流程配置一个应用。

当直播活动和录制都已经结束后,我如何播放录制的内容?


请保持当前Wowza直播应用的配置,哪怕是直播流已经停止发布了。播放的URL和你观看直播流的URL是一样的。 请看如何为直播业务配置和运行Wowza nDVR功能?中的"Playback"部分,以了解播放的URL。

在播放时,我如何设定一个开始时间和结束时间?


要了解更多关于如何控制播放请求(它可以带有一个开始时间和可选的结束时间),请阅读How to use Wowza nDVR Playlist Request API.

当我的输入流中断时,nDVR录制会发生什么?


当输入重新连接时,Wowza nDVR 会重新开始录制。streamTimeout参数设置了Wowza Media Server在停止录制前等待数据包到来的时间。 默认的参数值被设置为从编码器断开连接到重新连接的时间。要了解更多,请阅读Wowza Ndvr插件的一些高级配置中关于streamTimeout的介绍。

我是否可以用RTSP、RTP、RTMP协议来播放Wowza nDVR的录制流?


目前Wowza nDVR录制流的播放仅支持HTTP协议:

  • Flash HTTP Dynamic Streaming (Flash HDS) Microsoft® Smooth Streaming
  • Apple HTTP Live Streaming (Apple HLS)
  • Microsoft Smooth Streaming


我怎么才能播放之前录制流版本的内容?


如果ArchiveStrategy属性的值被设置为version,那么你在播放的URL中设置要播放哪一个录制流版本。例如,下面的URL:

http://localhost:1935/live/myStream.3/playlist.m3u8?dvr

上面的URL表示通过HLS协议播放Wowza Server上的应用live上的录制流myStream的"版本3"的内容。

要了解更多如何控制你的nDVR录制工作,请阅读如何使用Wowza Ndvr插件的录制API

如何解决Strobe播放器的#2032错误?


这个错误表示没有找到对应的流。它可能是由于错误的URL或直播流不可用。

dvrstreamingpacketizer 做了什么?


这个封包器获得一个输入流,并通过Wowza nDVR录制功能将数据保存下来。作为激活Wowza nDVR功能的一部分配置。你需要将Application.xml中的dvrstreamingpacketizer属性设置为Streams/LiveStreamPacketizers。你还要在配置中添加附加的直播流封包器属性值(cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer) 以使用支持这些协议的播放器和设备。

如果我没有设置存储位置将会发生什么?


Wowza nDVR 将使用默认设置:
Code:
<Store>dvrfilestorage</Store>
在直播中继(origin/edge)架构下,这个属性必须空着。要了解更多,请阅读 如何在直播流中继架构(origin/edge)下使用Wowza nDVR 插件www.wowza.cn