如何面向机顶盒强制输出MPEG-TS流?
转载请注明:文章来自www.wowza.cn
注意: 要访问最新的技术资料,请访问http://www.ttstream.com/wowza/
采用RTSP/RTP协议面向网络机顶盒提供直播或点播(VOD)服务时,你添加下面的属性参数以强制输入MPEG-TS流,因为这是大部分机顶盒所要求的。 www.wowza.cn

注意: 本文仅针对Wowza Media Server® 2.2.4 及更高版本。

配置


当采用RTSP/RTP流媒体协议,你可以在[install-dir]/conf/[application]/Application.xml文件的RTP/Properties中添加以下属性参数以强制输出MPEG-TS流(这是大部分机顶盒所要求的) :
Code:
<Property>
    <Name>forceMPEGTSOut</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>
<Property>
    <Name>rtpWrapMPEGTS</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>

高级参数


要控制MPEG-TS流的输出,你可以在[install-dir]/conf/[application]/Application.xmlStreams/Properties中添加以下属性参数:
Code:
<Property>
	<Name>mpegtsPCRBufferTime</Name>
	<Value>750</Value>
	<Type>Integer</Type>
</Property>			
<Property>
	<Name>mpegtsPacketsPerBlock</Name>
	<Value>7</Value>
	<Type>Integer</Type>
</Property>			
<Property>
	<Name>mpegtsAudioGroupCount</Name>
	<Value>3</Value>
	<Type>Integer</Type>
</Property>			
<Property>
	<Name>mpegtsFlushEveryPacket</Name>
	<Value>false</Value>
	<Type>Boolean</Type>
</Property>			
<Property>
	<Name>mpegtsDebugAACTimecodes</Name>
	<Value>false</Value>
	<Type>Boolean</Type>
</Property>			
	<Property>
	<Name>mpegtsAlwaysSendZeroPacketLen</Name>
	<Value>false</Value>
	<Type>Boolean</Type>
</Property>

高级参数的一些细节


  • mpegtsPCRBufferTime: 节目时钟基准(PCR)追踪一个音频和视频包的ID(PID)的显示时间戳(PTS)和解码时间戳(DTS) 的时长(单位毫秒)。默认值是750 毫秒。

  • mpegtsPacketsPerBlock: 一个UDP block中包含的传输流(TS)包的个数。一个TS包是188个字节。默认值是7

  • mpegtsAudioGroupCount: 一个传输流(TS)块中音频包的个数。默认值是3.

  • mpegtsFlushEveryPacket: 设置为true时, 在每一个新的音频或视频包之后都发送一个尚未全部完成的UDP包。默认是false

  • mpegtsDebugAACTimecodes: 对于AAC音频包,设置为true 以在将毫秒时间转换为90khz时钟时有更精确的计算。默认是false.

  • mpegtsAlwaysSendZeroPacketLen:对于很高码率的视频流,如果你不希望将多个视频帧的数据封装在多个TS包中,可以将它设置为true以让PES包的长度为"0" 默认是false.


验证


如果你要验证现在是按MPEG-TS流输出的,你可以将mpegtsFlushEveryPacket 设置为 true。这样就会在日志文件[install-dir]/logs/wowzamediaserver_access.log中生成下面的日志信息: www.wowza.cn
Code:
comment	server	INFO	200	-	RTPPacketizerMPEGTS.handleAMFPacket: mpegtsFlushEveryPacket:true
另一个办法是,你可以将mpegtsDebugAACTimecodes 设置为 true。这样当采用Standalone模式运行时,你会在控制台中看到类似下面的输出:
Code:
tc[0]: 2816:2816:48000
tc[0]: 2837:2837:48000
tc[0]: 2859:2859:48000