如何降低从音视频捕获到播出的延时?
转载请注明:文章来自www.wowza.cn
注意: 要访问最新的技术资料,请访问http://www.ttstream.com/wowza/
这篇文章介绍了如何配置一个直播应用,并尽可能的降低从视频捕获到播出的延时。

注意: 使用于Wowza Media Server 2.0.0及以上版本。

配置


  1. 安装Wowza Stream Engine 4

  2. 在Wowza Media Server 上创建一个直播应用:

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

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

    3. 用文本编辑器打开这个新拷贝的[install-dir]/conf/live/Application.xml文件,将Streams/StreamType 属性设置为live-lowlatency


在播放器侧,很重要的一点是:NetStream.setBufferTime() 方法要设置为0(在Actionscript 3上,请使用"NetStream.bufferTime = 0;")。 这将让你的播放器获得最低的延时。www.wowza.cn

注意: 当你使用JW Player时,要使用bufferLength 参数设置缓冲时长。请阅读JW Palyer 6如何与Wowza Media Server配合使用?

注意: 尽管将缓冲时长设置为0可以为你带来最低的延时, 但是它可能导致播放并不流畅。因此你可能需要略微增加一点缓冲时长(例如.1.25)。 当使用H.264编码的视频时,我们发现在视频的帧率为30fps时,任何大于0的缓冲都会导致至少2-3秒的延时(更低的帧率会导致更多的延时)。www.wowza.cn 这可能是播放器的问题。

当使用NetStream.setBufferTime将缓冲设置为0时,你可以将帧率降低,让播放器能够更快的呈现帧的图像。 有时候,降低flushInterval的值可以获得更流畅的播放效果。你可以编辑[install-dir]/conf/[application]/Application.xml 文件并在Streams/Properties中添加下面的属性参数来实现它:
Code:
<Property>
	<Name>flushInterval</Name>
	<Value>25</Value>
	<Type>Integer</Type>
</Property>
<Property>
	<Name>onFlushNotifyClients</Name>
	<Value>true</Value>
	<Type>Boolean</Type>
</Property>
按这样的设置,服务器在处理每一个直播流传输所占用的CPU资源会上升。因此可以处理的并发用户数会降低。

时延也可能产生在视频编码环节。我们发现当使用Flash播放器的内建编码器(麦克风和摄像头)时可以将编码延时降到最低。www.wowza.cn 这个Flash播放器的内建编码系统对于视频编码采用了Sorenson Spark (一个H.263的变种),对于音频编码采用了NellyMoser ASAO或Speex。 要实现低延时,很重要的是你要用尽可能地的码率实现一个可接受的视频质量。在Wowza Media Server安装包中的例子VideoChat是一个如何使用Flash播放器内建编码实现地延时的很好的案例。

增加帧率或者降低关键帧间隔也可以降低播放的延时。

注意: NellyMoser ASAO 和 Speex 音频编码对于每一个数据包采用固定数值的采样率。www.wowza.cn 因为这个原因,采用较高的采样率是由于每秒中产生的数据包会更多,这样在降低延时方面会更好一些。 因此,我们建议当你使用内建的Microphone编码音频时,将Microphone.rate 设置为 11KHz22KHz