多协议、性能稳定、丰富API的流媒体服务器软件
如何用Wowza Transcoder为一个直播流配置转码?
这篇文章详细介绍了Wowza Transcoder 如何将一个输入流进行实时解码,再重新编码以输出播放终端所需要的格式,并且输出的多个不同码率且关键帧对齐的码流,以实现码率自适应。

内容


开始
对软件环境上的要求
关于硬件加速编码
支持的音视频编码格式
应用和直播流的配置
用Wowza Streaming Engine Manager管理界面配置转码
控制转码流程
用Stream Name Groups实现自适应码流
用XML文件配置

故障排查
日志
测试
自定义模版的转码问题
源流缺少帧率信息
降低帧率

开始



对软件环境上的要求


Wowza Transcoder 只能在64位的Windows和Linux系统上运行。此外也不支持Mac OS X 系统。

Wowza Transcoder在64位的Windows Server 上运行时, 系统必须先具备以下功能:

  • .NET Framework 3.5.1
  • Desktop Experience

关于硬件加速编码


Wowza Transcoder支持Windows和Linux系统下的硬件加速编码功能,我们推荐利用硬件加速编码功能,但这不是必须的。如果你的服务器硬件不支持硬件加速编码,则Wowza Transcoder会用默认的软件编码。

下面的文章介绍了关于这些技术的更多硬件要求:


注意:
  • 重要: NVIDIA最新的显卡驱动(340及以上版本)已经不支持NVIDIA CUDA 编码加速功能了。从Wowza Streaming Engine 4.1.2开始不再支持基于CUDA的加速编码.

  • 你应该在尝试硬件加速转码技术之前,先使用默认的MainConcept软件转码技术。MainConcept软件不会使用任何硬件加速功能。关于如何调试硬件编码的更多信息,请阅读如何验证Wowza Transcoder正在使用哪一种编码技术

  • 在较新版本的Windows系统上,当Wowza Media Server作为系统服务运行时,由于Session 0 Isolation的安全原因,Intel Quick Sync 和 NVIDIA CUDA 硬件加速功能可能无法使用。要了解更多关于如何解决这个问题,请阅读作为Windows系统服务运行时,Transcoder如何使用硬件加速功能

  • 当使用Windows远程桌面时, Quick Sync 加速可能无法使用。


支持的音视频编码格式


为了将输入流(被称作"channels")进行转码或转换为多个不同输出码率的输出流,Wowza Transcoder 提供了很多功能,它支持以下音视频编码格式:
Video (decoding)
Video (encoding)
H.264
MPEG-2
MPEG-4 Part 2
* VP8
* VP9




H.263v2
H.264
* H.265
* VP8
* VP9
Audio (decoding)
Audio (encoding)
AAC
G.711 (µ-law and A-law)
MPEG-1 Layer 1/2
MPEG-1 Layer 3 (MP3)
Speex
* Vorbis
* Opus
AAC
* Vorbis
* Opus

* 代表Wowza Transcoder技术预览性支持

这种技术预览性支持意味着这项功能刚刚发布出来用于测试,在Wowza Streaming Engine的后续版中会逐步完善. 因此,目前在使用这些功能时,可能会有一些未知的异常,为了更好的利用这些功能,你需要仔细阅读以下资料:

注意:
  • 对于mp3格式的音频,系统支持以下采样率: 48000, 44100, 32000

  • 当使用硬件加速特性时,不支持H.263 视频输出。
  • Instream CEA-608 隐藏字幕(closed caption)可以通过Wowza Transcoder 采用Apple HLS 流媒体被传送给基于iOS的终端设备。要了解更多信息,请阅读如何为HLS流媒体配置隐藏字幕(closed captioning)


wowza应用和直播流的配置


在开始转码前,你首先需要从编码器推送一个直播流进入Wowza Streaming Engine的直播应用。

用Wowza Streaming Engine Manager管理界面来配置转码


Wowza Transcoder 用一个转码模板文件来定义如何对一个直播流进行转码,Wowza Streaming Engine提供了一些基本的转码模板,可以用于大部分常见需求,包括: Transcode, TransrateAudio Only

你可以在Wowza安装目录下的transcoder/templates目录下找到它们,在开始配置转码前,建议你仔细阅读一遍这些转码模板文件,它为你理解转码的配置非常重要。
你可以在Wowza Streaming Engine Manager管理界面中对这些转码模板的参数进行修改。 下面以Transrate转码([install-dir]/transcoder/templates/transrate.xml)为例,在开始前,请先备份这个文件。

启用Transcoder

  1. Applications 面板,点击live, 在点击Transcoder. 在详情页,点击Enable Transcoder.

    Wowza Transcoder

  2. 重启application.

    Wowza

编码的参数配置

  1. Setup tab页,在Transcoder Templates下面点击Transrate (Default)选择.

    wowza

  2. Presets列表中,点击240pEdit图标

    wowza

  3. 将码率设置为240000bps。要了解更多其他参数,请阅读转码模板的细节- 编码参数.

    1. Video Settings部分,在Video Bitrate, 输入240000. 其它参数按默认的就好了。



    2. Frame Size部分,采取默认设置。



    3. Audio Settings 部分,采取默认设置 (Passthrough).



    4. Overlay Images 部分,采取默认设置.



      关于在转码时叠加图片,请阅读添加叠加图片.

  4. 点击Save以保存设置。

  5. 预设的编码输出列表中,点击240p, 然后点击Enable Preset来启用240p

    Wowza

解码的参数配置

  1. 点击 Return to Transcoder Template.

    Wowza

  2. 点击Decoding PresetTab页,再点击Edit对解码参数做修改。

    Wowza

    • Description - 这就是一个描述,没啥用

    • Decoder Implementation - 解码的实现。请参考转码模板细节 - Decode中关于Video/Implementation的介绍。
    • Deinterlace source stream - 如果源流需要,就选择这个Deinterlace,好像是去隔行的意思。

    • Overlay Images - 请参考Add graphic overlay了解更多细节。

  3. 点击Save以保存修改。

叠加图片

你可以在视频上叠加一个静态图片,支持的图片格式包括GIF、JPEG、PNG以及BMP,这样就可以实现类似增加台标这样的需求。你可以自定义图片的位置、对齐方式、透明度。

你可以在Encoding Presets中为每一个输出流中定义不同的图片。 如果你要在每一个输出流中叠加同样的图片,那么你可以在Decoding Preset参数中设置。

在编码环节或这是解码环节,都可以在视频上叠加图片,点击Edit, 点击Add Overlay Image按钮

Wowza

Add Overlay Image对话框出现后,根据你的需求做设置,然后点击Add.

叠加图片的设置

Wowza

  • Image Name - 图片名,用于区分其它图片。

  • Image Path - 图片的路径.

  • Update overlay image when source image updates -是否定期(750毫秒)对图片文件做检查,当图片被修改时,可以自动生效.

  • Width and Height - 图片的宽和高。如果就用原始图片的大小,请选择Same as source image选项。另外,宽和高的最小值是4个像素,也必须是偶数。

  • Opacity - 图片的透明度,有效值是从0 (完全透明) 到 100 (完全不透明).

叠加图片的位置设定

Wowza

  • Location - 这个图里模拟了图片在视频界面中的位置,你根据你的需求选择其中一个

  • Horizontal OffsetVertical Offset - 设置一个横向和纵向的偏移量(单位:像素),这是相对于你在Location中选择的基准位置的偏移量。数值最小为0(最好是偶数).

    举个例子,相对视频窗口右小角10个像素,你先在Location中选择右小角的位置,然后在Vertical Offset中输入10


要启用这个图片,选中Enabled复选框,然后点击Save.

Wowza

你可以为一个输出流,设置多个叠加图片,只要用Move UpMove Down 图标来让它们以正确的顺序呈现即可。 在视频中,排在上面的图片会显示在排在下面的图片的上面.

Wowza

控制转码流程

一个直播应用中的所有输入流,都可以用一个相同的转码模板,这也是默认的配置。
按如下操作:

  1. live菜单中,点击Transcoder, 然后再点击Edit.

    Wowza Transcoder

  2. Transcoder Options, 去掉Match incoming stream name to template name复选框,再点击Save.

    Wowza

    去掉这个复选框是为了让所有输入流都用一个相同的转码模板。

当然,你也可以为每一个输入流配置一个转码模板。按如下操作:

  1. Transcoder Options, 选择Match incoming stream name to template name 复选框,点击Save, 然后重启应用。

    Wowza

  2. Transcoder Templates, 点击Copy Template.

    Wowza

  3. Copy Transcoder Template 对话框中,选择Transcode (Default). 输入新的模板名字(例如myStream),然后点击OK.

    Wowza

  4. 在这个新的转码模板中,根据需求对编码参数做修改。

    Wowza

    这个模板用于名字为myStream的输入流。 只要流的名字和模板名字匹配,就会用相应的模板来转码,如果没有匹配的模板,则会使用Fallback中的模板。

    Wowza

用StreamName逻辑组实现多码率自适应


转码后的多个输出流之间是关键帧对齐的,用以实现码率自适应。Stream Name 逻辑组的作用和用同步多媒体集成语言Synchronized Multimedia Integration Language (SMIL)描述的播放列表文件的作用是一样。

为了播放码率自适应流媒体,各种播放技术采用的播放URL如下所示:

Apple iOS device (Apple HLS/Cupertino)
http://[wowza-ip-address]:1935/live/ngrp:myStream_all/playlist.m3u8
		
Adobe Flash Player (Adobe HDS/San Jose)
http://[wowza-ip-address]:1935/live/ngrp:myStream_all/manifest.f4m
		
注意:
  • 要在逻辑组中包含原始的输入流,最好的办法是将输入流加入到一个<Encode> 中,然后将Video/CodecAudio/Codec 都设置为PassThru。同时<StreamName> 必须唯一。

  • 你可以为Apple HLS streaming 创建一个逻辑组,其中包含一个只有音频的输出流,类似在How to create Apple App Store compliant streams中的介绍。如果你要这么做, 你需要在逻辑组中添加一个 <MediaListRendition>元素,并且在它的里面设置一个 <WowzaAudioOnly>true的元素。下面是一个例子:
    <StreamNameGroup>
    	<Name>all</Name>
    	<StreamName>${SourceStreamName}_all</StreamName>
    	<Members>
    		<Member>
    			<EncodeName>source</EncodeName>
    		</Member>
    		<Member>
    			<EncodeName>360p</EncodeName>
    		</Member>
    		<Member>
    			<EncodeName>160p</EncodeName>
    		</Member>
    		<Member>
    			<EncodeName>160p</EncodeName>
    			<MediaListRendition>
    				<WowzaAudioOnly>true</WowzaAudioOnly>
    			</MediaListRendition>
    		</Member>
    	</Members>
    </StreamNameGroup>

用xml文件来配置


建立一个直播应用,然后对Application.xml文件进行一些配置以使用Wowza Transcoder,请按下面进行:

  1. 创建一个应用的目录[install-dir]/applications/live.

  2. 创建一个配置目录[install-dir]/conf/live ,将[install-dir]/conf/Application.xml 文件拷贝到这个新目录下

  3. 用文本编辑器打开这个新拷贝的Application.xml 文件,然后做如下改动(有些设置可能已经配好了):

    1. Streams/StreamType 设置为:
      <StreamType>live</StreamType>
      				
    2. HTTPStreamers 设置为:
      <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
      				
    3. Streams/LiveStreamPacketizers 设置为:
      <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>
      				
    4. RTP/Authentication/PlayMethod 设置为:
      <PlayMethod>none</PlayMethod>
      				
    5. Transcoder/LiveStreamTranscoder 设置为:
      <LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
      				
    6. 如果输入流是H.264视频编码AACMP3 音频编码,你希望创建多个不同码率的输出流,以实现码率自适应,请将Transcoder/Templates 设置为:
      <Templates>${SourceStreamName}.xml,transrate.xml</Templates>
      				
      如果输入流是MPEG-2MPEG-4 Part 2 视频编码,你希望转码为H.264AAC,以面向Wowza支持的例如Adobe Flash播放器、Apple iOS 设备和Microsoft Silverlight的播放器技术, 请将Transcoder/Templates 设置为:
      <Templates>${SourceStreamName}.xml,transcode.xml</Templates>
      注意: 当使用transcode.xml时,同样也支持多码率自适应。
  4. (只针对基于RTSP/RTP的编码器),用文本编辑器打开[install-dir]/conf/publish.password文件,添加一个用户名和密码来控制对RTSP/RTP 推流的访问。 下面是一个例子,用户名为myuser,密码为mypassword)。
    # Publish password file (format [username][space][password])
    # username password
    myuser mypassword
  5. 启动 Wowza Media Server.

转码模版的细节


如果你使用系统自带的transrate.xmltranscode.xml 模版文件, 转码后的输出流将使用下面的stream names:

  • [stream-name]_360p: Main Profile stream
  • [stream-name]_160p: Baseline Profile stream
  • ngrp:[stream-name]_all: 面向Apple HTTP Live Streaming (cupertino)、 Microsoft Smooth Streaming以及 Adobe HTTP Dynamic Streaming (sanjose)的码率自适应

[stream-name] 是输入到Wowza Media Server的输入流。例如,一个输入是myStream, 那么转码后的输出流就是myStream_360pmyStream_160p以及 ngrp:myStream_all

转码的工作机制很简单。推送到live应用的所有输入流将被采用在[install-dir]/conf/[application]/Application.xml文件Transcoder/Templates中设置的转码模版文件中的参数来转码。 你可以根据需要配置多个转码后的输出流。

让我们仔细看以下转码模版中的配置。下面是随Wowza Media Server安装后自带的transrate.xml模版文件:
<!-- Example template for transrate, producing four new streams at different bitrates. Resultant streams can be played back individually or as a group. source, 360p and 160p encode blocks are enabled through the Enable property, other examples are not enabled. Add additional encode blocks to your template as needed. -->
<Root>
	<Transcode>
		<Encodes>
			<!-- Example Encode block for source, not required unless Member of StreamNameGroup. --> 
			<Encode>
				<Enable>true</Enable>
				<Name>source</Name>
				<StreamName>mp4:${SourceStreamName}_source</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceVideoBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceAudioBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
			<!-- Setup for 720p, high bandwith, main profile for desktop or set-top box -->
			<Encode>
				<Enable>false</Enable>
				<Name>720p</Name>
				<StreamName>mp4:${SourceStreamName}_720p</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>H.264</Codec>
					<!-- default, CUDA, QuickSync, NVENC -->
					<Transcoder>default</Transcoder>
					<GPUID>-1</GPUID>
					<FrameSize>
						<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
						<FitMode>fit-height</FitMode>
						<Width>1280</Width>
						<Height>720</Height>
						<!-- <Crop>0,0,0,0</Crop> -->
						<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
					</FrameSize>
					<!-- baseline, main, high -->
					<Profile>main</Profile>
					<Bitrate>1300000</Bitrate>
					<KeyFrameInterval>
						<FollowSource>true</FollowSource>
						<Interval>60</Interval>
					</KeyFrameInterval>
					<Overlays>
						<Overlay>
							<Enable>false</Enable>
							<Index>0</Index>
							<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
							<CheckForUpdates>false</CheckForUpdates>
							<Opacity>100</Opacity>
							<Location>
								<X>4</X>
								<Y>4</Y>
								<Width>${ImageWidth}</Width>
								<Height>${ImageHeight}</Height>
								<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
								<Align>left,top</Align>
							</Location>
						</Overlay>
					</Overlays>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceAudioBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
			<!-- Setup for 360p, high bandwith, main profile for desktop -->
			<Encode>
				<Enable>true</Enable>
				<Name>360p</Name>
				<StreamName>mp4:${SourceStreamName}_360p</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>H.264</Codec>
					<!-- default, CUDA, QuickSync, NVENC -->
					<Transcoder>default</Transcoder>
					<GPUID>-1</GPUID>
					<FrameSize>
						<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
						<FitMode>fit-height</FitMode>
						<Width>640</Width>
						<Height>360</Height>
						<!-- <Crop>0,0,0,0</Crop> -->
						<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
					</FrameSize>
					<!-- baseline, main, high -->
					<Profile>main</Profile>
					<Bitrate>850000</Bitrate>
					<KeyFrameInterval>
						<FollowSource>true</FollowSource>
						<Interval>60</Interval>
					</KeyFrameInterval>
					<Overlays>
						<Overlay>
							<Enable>false</Enable>
							<Index>0</Index>
							<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
							<CheckForUpdates>false</CheckForUpdates>
							<Opacity>100</Opacity>
							<Location>
								<X>4</X>
								<Y>4</Y>
								<Width>${ImageWidth}</Width>
								<Height>${ImageHeight}</Height>
								<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
								<Align>left,top</Align>
							</Location>
						</Overlay>
					</Overlays>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceAudioBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
			<!-- Setup for 240p, medium bandwidth, baseline profile -->
			<Encode>
				<Enable>false</Enable>
				<Name>240p</Name>
				<StreamName>mp4:${SourceStreamName}_240p</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>H.264</Codec>
					<!-- default, CUDA, QuickSync, NVENC -->
					<Transcoder>default</Transcoder>
					<GPUID>-1</GPUID>
					<FrameSize>
						<!-- letterbox, fit-width, fit-height, crop, stretch, match-source  -->
						<FitMode>fit-height</FitMode>
						<Width>360</Width>
						<Height>240</Height>
						<!-- <Crop>0,0,0,0</Crop> -->
						<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
					</FrameSize>
					<!-- baseline, main, high -->
					<Profile>baseline</Profile>
					<Bitrate>350000</Bitrate>
					<KeyFrameInterval>
						<FollowSource>true</FollowSource>
						<Interval>60</Interval>
					</KeyFrameInterval>
					<Overlays>
						<Overlay>
							<Enable>false</Enable>
							<Index>0</Index>
							<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
							<CheckForUpdates>false</CheckForUpdates>
							<Opacity>100</Opacity>
							<Location>
								<X>4</X>
								<Y>4</Y>
								<Width>${ImageWidth}</Width>
								<Height>${ImageHeight}</Height>
								<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
								<Align>left,top</Align>
							</Location>
						</Overlay>
					</Overlays>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceAudioBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
			<!-- Setup for 160p, low bandwith, baseline profile for 3G mobile devices such as iOS, Android, Blackberry -->
			<Encode>
				<Enable>true</Enable>
				<Name>160p</Name>
				<StreamName>mp4:${SourceStreamName}_160p</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>H.264</Codec>
					<!-- default, CUDA, QuickSync, NVENC -->
					<Transcoder>default</Transcoder>
					<GPUID>-1</GPUID>
					<FrameSize>
						<!-- letterbox, fit-width, fit-height, crop, stretch, match-source  -->
						<FitMode>fit-height</FitMode>
						<Width>284</Width>
						<Height>160</Height>
						<!-- <Crop>0,0,0,0</Crop> -->
						<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
					</FrameSize>
					<!-- baseline, main, high -->
					<Profile>baseline</Profile>
					<Bitrate>200000</Bitrate>
					<KeyFrameInterval>
						<FollowSource>true</FollowSource>
						<Interval>60</Interval>
					</KeyFrameInterval>
					<Overlays>
						<Overlay>
							<Enable>false</Enable>
							<Index>0</Index>
							<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
							<CheckForUpdates>false</CheckForUpdates>
							<Opacity>100</Opacity>
							<Location>
								<X>4</X>
								<Y>4</Y>
								<Width>${ImageWidth}</Width>
								<Height>${ImageHeight}</Height>
								<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
								<Align>left,top</Align>
							</Location>
						</Overlay>
					</Overlays>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>PassThru</Codec>
					<Bitrate>${SourceAudioBitrate}</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
			<!-- Setup for H.263, low bandwith, streaming to older mobile devices -->
			<Encode>
				<Enable>false</Enable>
				<Name>h263</Name>
				<StreamName>mp4:${SourceStreamName}_h263</StreamName>
				<Video>
					<!-- H.264, H.263, PassThru, Disable -->
					<Codec>H.263</Codec>
					<!-- default, CUDA, QuickSync, NVENC -->
					<Transcoder>default</Transcoder>
					<GPUID>-1</GPUID>
					<FrameSize>
						<!-- letterbox, fit-width, fit-height, crop, stretch, match-source  -->
						<FitMode>letterbox</FitMode>
						<Width>176</Width>
						<Height>144</Height>
						<!-- <Crop>0,0,0,0</Crop> -->
						<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
					</FrameSize>
					<!-- baseline, main, high -->
					<Profile>baseline</Profile>
					<Bitrate>150000</Bitrate>
					<KeyFrameInterval>
						<FollowSource>false</FollowSource>
						<Interval>60</Interval>
					</KeyFrameInterval>
					<Overlays>
						<Overlay>
							<Enable>false</Enable>
							<Index>0</Index>
							<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
							<CheckForUpdates>false</CheckForUpdates>
							<Opacity>100</Opacity>
							<Location>
								<X>4</X>
								<Y>4</Y>
								<Width>${ImageWidth}</Width>
								<Height>${ImageHeight}</Height>
								<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
								<Align>left,top</Align>
							</Location>
						</Overlay>
					</Overlays>
					<Parameters>
					</Parameters>
				</Video>
				<Audio>
					<!-- AAC, PassThru, Disable -->
					<Codec>AAC</Codec>
					<Bitrate>64000</Bitrate>
					<Parameters>
					</Parameters>
				</Audio>
				<Properties>
				</Properties>
			</Encode>
		</Encodes>
		<Decode>
			<Video>
				<Deinterlace>false</Deinterlace>
				<Overlays>
					<Overlay>
						<Enable>false</Enable>
						<Index>0</Index>
						<ImagePath>${com.wowza.wms.context.VHostConfigHome}/content/wowzalogo.png</ImagePath>
						<CheckForUpdates>false</CheckForUpdates>
						<Opacity>100</Opacity>
						<Location>
							<X>4</X>
							<Y>4</Y>
							<Width>${ImageWidth}</Width>
							<Height>${ImageHeight}</Height>
							<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
							<Align>left,top</Align>
						</Location>
					</Overlay>
				</Overlays>
				<Parameters>
				</Parameters>
			</Video>
			<Properties>
			</Properties>
		</Decode>
		<StreamNameGroups>
			<!-- Note: Play stream using stream name ngrp:[stream-name] -->
			<StreamNameGroup>
				<Name>all</Name>
				<StreamName>${SourceStreamName}_all</StreamName>
				<Members>
					<Member>
						<EncodeName>source</EncodeName>
					</Member>
					<Member>
						<EncodeName>720p</EncodeName>
					</Member>
					<Member>
						<EncodeName>360p</EncodeName>
					</Member>
					<Member>
						<EncodeName>240p</EncodeName>
					</Member>
					<Member>
						<EncodeName>160p</EncodeName>
					</Member>
				</Members>
			</StreamNameGroup>
			<StreamNameGroup>
				<Name>mobile</Name>
				<StreamName>${SourceStreamName}_mobile</StreamName>
				<Members>
					<Member>
						<EncodeName>240p</EncodeName>
					</Member>
					<Member>
						<EncodeName>160p</EncodeName>
					</Member>
				</Members>
			</StreamNameGroup>
		</StreamNameGroups>
		<Properties>
		</Properties>
	</Transcode>
</Root>

转码模板的细节 - Encode

模版细节: <Encode>...</Encode>

这部分是编码的设置。一个包含多个<Encode> 的模版.

  • Enable. 如果你设置为 true, 那么这部分的编码就是启用状态。如果你设置为 false, 这部分的编码将被忽略。默认的模版的含有多个 <Encode> 的例子, 并不是所有的都启用了。你可以根据需要在你的模版文件中启用或添加一个新的编码设置。

  • Name. 每一个编码设置都有一个名字,这个名字在整个模版中必须唯一。

  • StreamName. 这是转码后的输出流的stream name. 你可以使用${SourceStreamName} 变量, 它将被输入流的stream name替换。一个应用内的输出流的名字必须唯一。你最好把输入流的stream name作为输出流的stream name的一部分。

  • Video/Codec. 视频编码的相关设置:
    • H.264. 转码为H.264 。也用于将H.264编码的输入流输出多个不同的码率或profile等等。
    • H.263. 转码为H.263.
      注意: 当使用硬件加速时,无法输出 H.263 编码的视频。如果你将 Video/Transcoder 设置为以下硬件加速方案 (QuickSync, CUDA, 或NVENC), 这个设置将被忽略,系统将使用默认的MainConcept软件编码器来生成H.263编码的视频。
    • PassThru. 将输入流的视频透传出来,不做任何变化。
    • Disable. 屏蔽掉视频流

  • Video/Transcoder. 转码的实现方案:
    • default. 系统内建的MainConcept软件编码器(非硬件加速).
    • QuickSync. Intel Quick Sync 的编码加速(支持Windows和Linux). 如果你的硬件不支持Quick Sync指令集,那么系统将使用不带硬件加速的MainConcept软编码技术。
    • CUDA. NVIDIA CUDA 编码加速(仅针对Windows)。如果你的硬件不支持CUDA指令集,那么系统将使用不带硬件加速的MainConcept软编码技术。
    • NVENC. NVIDIA NVENC 编码加速(支持Windows和Linux)。如果你的NVIDIA 显卡不支持NVENC基于硬件的视频编码,那是带有新的Kepler GPU架构的大多数NVIDIA显卡都具有的能力。如果你的硬件支持它,那么系统将使用NVIDIA CUDA 的编码加速功能。如果你的系统不支持这些硬件编码加速的功能,那么系统将使用不带硬件加速的MainConcept软编码技术。
  • Video/GPUID. 编码时需要的NVIDIA CUDA/NVENC 的GPUID。 Wowza Transcoder 可以使用多个NVIDIA 显卡; 然而,它无法自动在多个显卡之间做的负载均衡。因此你需要用这个参数直接指定其中一个显卡,如果它被设置为-1则意味着选择拥有最高容量GPU的那个。多个GPU 以0 开始编号,当Transcoder启动时,将检查每一个GPU。

  • Video/FrameSize.帧的图形大小相关设置:
    • letterbox. 保持输入流中帧的宽高比,并按输出流中帧的大小进行扩展,对空白处用黑色条块来填充。
    • fit-width. 调整高度,以保持输入流的宽高比。
    • fit-height. 调整宽度,以保持输入流的宽高比。
    • crop. 对视频图像进行放大和裁剪以适应一个设定的宽和高,但保持输入流的宽高比。
    • stretch. 对视频图像进行拉伸,以适应一个设定的宽和高。
    • match-source. 使用和输入流一样的宽和高。

  • Video/Crop. 对输入流视频图像进行裁剪。x,x,x,x 的值代表裁剪区域的像素位置,依次为左、右、上、下。不能和Video/SourceRectangle 一起使用。

  • Video/SourceRectangle. 只选择输入流图像的一部分进行编码. x,x,x,x 的值代表一个矩形区域,依次为上、左、宽度、高度。不能和Video/Crop 一起使用。

  • Video/Profile. 视频编码的profile:
    • baseline. 针对移动流媒体的最低复杂度的设置
    • main. 针对桌面和机顶盒流媒体的较高的复杂度的设置

  • Video/Bitrate. 输出流的码率, in bits per second (bps). The value is ignored if Video/Codec is set to PassThru. The ${SourceVideoBitrate} variable can be used and will be replaced with the video bitrate of the source stream.
  • Video/KeyFrameInterval. 关键帧的间隔:
    • FollowSource. 如果设置为true,采用和输入流一样的关键帧间隔。如果设置为false,那么将采用在Video/KeyFrameInterval/Interval 中的设置。
    • Interval. 一个整数,代表关键帧的间隔(单位秒)

  • Video/Overlays/Overlay. 像水印那样,设置一个图片,覆盖在图像上。你既可以在解码时设置这个图片,也可以在每一个输出流的编码时设置这个图片。如果你希望所有的输出流采用同样的设置,那么你可以在解码时设置这个图片。
    注意: 当Wowza Transcoder使用图片覆盖时,系统对图片的设置有明确的要求。要了解更多细节,请阅读Transcoder 对叠加图片的要求
    • Enable. 设置为true 以使用覆盖图片. Overlays with a transparency require extra CPU resources.
    • Index. 图片覆盖的图层顺序
    • ImagePath. 图片的路径。支持GIF、JPEG、PNG以及BMP格式的图片文件。
    • CheckForUpdates. 当设置为true, Wowza Transcoder 将每隔750毫秒重新load一次图片(如果图片有修改,将获得最新图片)。 注意: 当使用CheckForUpdates 特性以动态检测图片的更新时,请确定按单一的原子操作去更新图片。这将确保Wowza Transcoder 可以得到一个完整的图片文件。要了解更多关于原子文件更新,请阅读:
    • Opacity. 透明度。从0(完全透明)到100(完全不透明)之间的数值.
    • Location/XLocation/Y. 开始覆盖的起始坐标位置,可以是负数。
    • Location/WidthLocation/Height. 覆盖区域的宽度和高度。如果被设置为 ${ImageWidth}${ImageHeight}, 将使用图片的大小。
    • Location/Align. 默认的覆盖区域起始位置(horizontal,vertical)。合法的horizontal 包括 leftright以及 hcenter; 合法的vertical 包括topbottom以及vcenter。例如距离右下角10个像素的位置开始用图片覆盖:
      <Location>
      	<X>-10</X>
      	<Y>-10</Y>
      	<Width>${ImageWidth}</Width>
      	<Height>${ImageHeight}</Height>
      	<!-- horiz: left, right, hcenter - vert: top, bottom, vcenter -->
      	<Align>right,bottom</Align>
      </Location>
  • Video/Parameters。为在编码时实现一些特殊的需求而设定的参数(为以后使用保留)。

  • Audio/Codec. 音频编码:
    • AAC. 采用AAC编码。
    • PassThru. 将音频透传,不做任何改动。
    • Disable. 将音频屏蔽掉。

  • Audio/Bitrate.音频的码率,(单位bps)。当Audio/Codec 被设置为 PassThru时,它将被忽略。可以使用 ${SourceAudioBitrate} 变量,如果这样设置,那么将采用输入流的码率。


转码模板的细节 - Decode

模版细节: <Decode>...</Decode>

这个部分是解码时的设置。一个模版只有一个<Decode> 的设置.

  • Video/Deinterlace. 如果输入流是隔行扫描的,请设置为true

  • 注意: 当Wowza Transcoder使用图片覆盖时,系统对图片的设置有明确的要求。要了解更多细节,请阅读Transcoder 对叠加图片的要求.
  • Video/Parameters. 为在解码时实现一些特殊的需求而设定的参数(为以后使用保留).


转码模板的细节 - StreamNameGroup

模版细节: <StreamNameGroup>...</StreamNameGroup>

这个部分的设置是为了实现多码率自适应而定义的一个输出流的逻辑组。<Name> 是逻辑组的名字。<StreamName> 用于在使用Apple HLS、Adobe HDS或Microsoft Smooth Streaming流媒体技术时,为实现码率自适应而使用的stream name。例如,有一个 stream name为 myStream的输入流,然后将前面的逻辑组的stream name设置为myStream_all。 当对这个部分进行设置之前,你首先要定义每一个编码后的输出流,并确保它们可以正常播放。

针对Wowza Media Server用户,如何控制转码流程?


默认配置下,所有的转码会话都使用一个转码模版。

按下面的配置,为每一个应用配置一个模版文件:

注意: 在下面的操作指南中,用你的应用名替换[application]
  1. 用一个文本编辑器打开[install-dir]/conf/[application]/Application.xml 文件,将Transcoder/Templates 设置为 [application].xml:
    <Templates>[application].xml</Templates>
    			
  2. [install-dir]/transcoder/templates/transrate.xml 文件拷贝并命名为 [install-dir]/transcoder/templates/[application].xml。这个文件将成为针对你这个应用的转码模版。


转码模版也可以只针对某一个输入流(stream name),请按下面操作进行:

注意: 在下面的操作指南中,将[streamName] 替换为你的输入流的stream name。
  1. 用一个文本编辑器打开[install-dir]/conf/[application]/Application.xml文件,将Transcoder/Templates 设置为 [streamName].xml:
    <Templates>[streamName].xml</Templates>
  2. [install-dir]/transcoder/templates/transrate.xml 文件拷贝并命名为 [install-dir]/transcoder/templates/[streamName].xml。这个文件将成为针对这个流的转码模板。


针对使用Wowza Media Server 的用户,Application.xml文件里的一些其它配置

如果你是用应用配置文件(Application.xml)来配置直播流,要使用Wowza Transcoder,你还需要在这个文件中添加以下配置参数:

  1. Transcoder/LiveStreamTranscoder设置为:
    <LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
  2. 如果你的源流是H.264视频和AACMP3音频,你希望转码率输出多个不同分辨率的码率,那么你需要将Transcoder/Templates 设置为:
    <Templates>${SourceStreamName}.xml,transrate.xml</Templates>
    如果你的源流是MPEG-2MPEG-4 Part 2 视频,需要转编码为H.264AAC格式,你需要将Transcoder/Templates 设置为:
    <Templates>${SourceStreamName}.xml,transcode.xml</Templates>
    			  
    注意: 当用transcode.xml时,也可以支持多码率自适应流媒体。
  3. 如果你的源流是SHOUTcastIcecast MP3 流,你需要在MediaCaster/Properties中添加以下参数,以让Wowza media在每一个数据包中发送一个MP3帧:
    <Property>
    	<Name>shoutcastMP3GroupCount</Name>
    	<Value>1</Value>
    	<Type>Integer</Type>
    </Property>
  4. 为某一个流做转码或每个流用独立的转码模板:
    <Templates>${SourceStreamName}.xml</Templates>
    			
    为每一个流创建一个以流名字命名的转码模板[stream-name].xml.


控制转码流程,针对Wowza Media Server用户

所有输入流用相同的转码模板来转码,这是默认的设置。如果要针对一个应用配置一个转码模板,按如下操作:

注意: 在下面的说明中,[application]是你要配置的直播应用。
  1. 用文本编辑器打开[install-dir]/conf/[application]/Application.xml,将Transcoder/Templates设置为[application].xml:
    <Templates>[application].xml</Templates>
    			
  2. 拷贝[install-dir]/transcoder/templates/transrate.xml文件,命名为[install-dir]/transcoder/templates/[application].xml. 这个文件将成为你这个应用将要使用的转码模板。


转码模板也可以用流名字来命名,要让所有的输入流使用跟自己流名字一样的转码模板文件,按如下配置:

注意: 在下面的说明中,[streamName]代表流的名字.
  1. 用文本编辑器打开[install-dir]/conf/[application]/Application.xml,将Transcoder/Templates设置为[streamName].xml:
    <Templates>[streamName].xml</Templates>
  2. 拷贝[install-dir]/transcoder/templates/transrate.xml文件,命名为[install-dir]/transcoder/templates/[streamName].xml. 你的直播流将用这个文件作为转码模板

故障排查


检查日志



故障排查的测试


Test #1: 最基本的直播流播放验证


在测试转码之前,首先要确认你的直播流是可以正常播放的,这是前提。

Test #2: 验证你的Wowza Transcoder 的授权码是否配置好了



Test #3: 检查Transcoder是否被启用了



Test #4: 播放单个转码后的流,看是否能正常播放


如果以上检查都没问题,请试着播放一个转码后的输出流,看看能否播放成功.

  1. 确认要把Application.xml文件中的Transcoder/LiveStreamTranscoder设置为transcoder:
    <LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
  2. 可以用Wowza的Test Player测试播放,看看转码后的流能否播放.

  3. 如果不能正常播放,请按下面的介绍,查看[install-dir]/logs/wowzastreamingengine_access.log文件,并依次检查:

    1. Wowza Transcoder 的类库是否被加载成功了? 如果Application.xml文件有错误,可能会导致这个类库无法加载,下面是Windows 64位下的日志信息:

      Comment server INFO 200 TranscoderSessionNative.loadLibrary: Load Transcoder list: C:\Program Files (x86)\Wowza Media Systems\Wowza Media Server 4.0.0/lib-native/win64/transcoder.list

    2. 因为转码模板文件没有被找到,或文件损坏,导致转码模板没有被加载也是一个可能的原因。转码模板文件默认位于[install-dir]/transcoder/templates下。 下面的日志信息显示Wowza Transcoder加载了默认的转码模板文件(transrate.xml):

      comment server INFO 200 LiveStreamTranscoder.init[live/_definst_/myStream]: Load Transcoder template: C:\Program Files (x86)\Wowza Media Systems\Wowza Media Server 4.0.0/transcoder/templates/transrate.xml

    3. 检查源流是否已经成功发布?

      publish stream INFO 200 myStream_360p

      如果还没有,回到Test #1 最基本的直播流播放验证看看.

    4. 检查输入的源流能够被正确的解码吗?

      decoder-video-start transcoder INFO 200 myStream {codec:H264, profile:Main, level:3.0, frameSize:224x168, displaySize:224x168, frameRate:30.0}
      decoder-audio-start transcoder INFO 200 myStream {codec:AAC, objectType:LC, sampleRate:44100, channels:2}

      如果没有,请检查源流的编码格式是否是Wowza Transcoder所支持的格式。

    5. 检查源流是否能被正确的再编码,下面的日志显示了两个输出流myStream_360pmyStream_160p的编码信息。如果转码失败也可能是模板文件配置错误或没有找到文件等。

      encoder-video-start transcoder INFO 200 myStream {name:"360p", bitrate:850000, codec:H264, profile:Main, level:3.0, frameSize:480x360, displaySize:480x360, frameRate:30.0}
      encoder-audio-start transcoder INFO 200 myStream {name:"360p", bitrate:96000, codec:AAC, objectType:LC, sampleRate:44100, channels:2}

Test #5: 播放转码后的一组输出流


如果转码后的每个流都能正常播放,再继续测试播放这一组输出流.

  1. 输出流的组创建了吗?请检查转码模板中<StreamNameGroups>/<StreamNameGroup>部分是正确的。 下面的日志显示了转码模板中创建了一个叫做myStream_mobile的输出流组:

    comment server INFO 200 TranscoderStreamNameGroup.addInternal[live/_definst_/myStream]: Add name group: myStream_mobile

  2. 源流中没有声音吗?

  3. 播放流时候的URL中的流名与<StreamNameGroup>/<StreamName>中设置的一样吗?

  4. 这个转码模板确实被加载了吗?这些请一一检查。

  5. <StreamNameGroup>/<Members>/<Member>/<EncodeName> 中配置的流名与<Encodes>/<Encode>/<Name> 的配置一样吗?

转码模板或源流可能存在的问题

  1. 确定Wowza Transcoder加载了你配置的转码模板文件?

    comment server INFO 200 LiveStreamTranscoder.init[live/_definst_/myStream]: Load Transcoder template: C:\Program Files (x86)\Wowza Media Systems\Wowza Streaming Engine 4.0.0/transcoder/templates/myTemplate.xml

    在这个日志中显示,被加载的转码模板文件名为myTemplate.xml.如果不对,请检查Application.xml文件中<Transcoder>/<Templates>的设置。


检查源流


  1. 源流是否缺声音?

  2. 源流的编码格式是Wowza Transcoder支持的输入格式吗?

源流中缺少帧率信息


检查你的wowzastreamingengine_access.log文件中是否有下面的错误日志,如果有,你可以在转码模板的<Properties>中添加sourceStreamFrameRate参数。 要了解更多,请参考Wowza Transcoder在源流中没有检测到帧率信息,如何处理?.

TranscoderWorkerVideoDecoder.handlePacket[_defaultVHost_:live/_definst_/myStream]: Source stream frame rate could not be calculated. Using default source stream frame rate: 29.97

在转码时降低帧率


通常,Wowza Transcoder在转码时会保持源流的帧率大小,这个不会变,但因为有些终端设备可能播放不了太高的帧率的视频,所以需要在转码时降低帧率。 Wowza Transcoder提供了这个功能,请参考Wowza Transcoder在转码时如何降低帧率?.