Icecast Restreaming and AAC Transcoding

Hello,

i am new the wowza and got simple Icecast MP3 Restreaming to work quite easily :wink:

I can listen to different icecast streams now via Flash Player, VLC (rtsp) and iOS.

But i can’t get the transcoding to work ;(

My Application.xml based on the wowza tutorials and suggestions:

<Root>
        <Application>
                <!-- Uncomment to set application level timeout values
                <ApplicationTimeout>60000</ApplicationTimeout>
                <PingTimeout>12000</PingTimeout>
                <ValidationFrequency>8000</ValidationFrequency>
                <MaximumPendingWriteBytes>0</MaximumPendingWriteBytes>
                <MaximumSetBufferTime>60000</MaximumSetBufferTime>
                <MaximumStorageDirDepth>25</MaximumStorageDirDepth>
                -->
                <Connections>
                        <AutoAccept>true</AutoAccept>
                        <AllowDomains></AllowDomains>
                </Connections>
                <!--
                        StorageDir path variables
                        ${com.wowza.wms.AppHome} - Application home directory
                        ${com.wowza.wms.ConfigHome} - Configuration home directory
                        ${com.wowza.wms.context.VHost} - Virtual host name
                        ${com.wowza.wms.context.VHostConfigHome} - Virtual host config directory
                        ${com.wowza.wms.context.Application} - Application name
                        ${com.wowza.wms.context.ApplicationInstance} - Application instance name
                -->
                <Streams>
                        <StreamType>live</StreamType>
                        <StorageDir>${com.wowza.wms.context.VHostConfigHome}/content</StorageDir>
                        <KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
                        <!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater, sanjosestreamingrepeater -->
                        <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>
                        <!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
                        <Properties>
                        </Properties>
                </Streams>
                <Transcoder>
                        <!-- To turn on transcoder set to: transcoder -->
                        <LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
                        <!-- [templatename].xml or ${SourceStreamName}.xml -->
                        <!-- <Templates>${SourceStreamName}.xml,transrate.xml</Templates> -->
                        <!-- <Templates>${SourceStreamName}.xml,transcode.xml</Templates> -->
                        <Templates>audioonly.xml</Templates>
                        <ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
                        <TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
                        <Properties>
                        </Properties>
                </Transcoder>
                <DVR>
                        <!-- As a single server or as an origin, use dvrstreamingpacketizer in LiveStreamPacketizers above -->
                        <!-- Or, in an origin-edge configuration, edges use dvrstreamingrepeater in LiveStreamPacketizers above -->
                        <!-- As an origin, also add dvrchunkstreaming to HTTPStreamers below -->
                        <!-- To turn on DVR recording set Recorders to dvrrecorder.  This works with dvrstreamingpacketizer  -->
                        <Recorders></Recorders>
                        <!-- As a single server or as an origin, set the Store to dvrfilestorage-->
                        <!-- edges should have this empty -->
                        <Store></Store>
                        <!--  Window Duration is length of live DVR window in seconds.  0 means the window is never trimmed. -->
                        <WindowDuration>0</WindowDuration>
                        <!-- Storage Directory is top level location where dvr is stored.  e.g. c:/temp/dvr -->
                        <StorageDir>${com.wowza.wms.context.VHostConfigHome}/dvr</StorageDir>
                        <!-- valid ArchiveStrategy values are append, version, delete -->
                        <ArchiveStrategy>append</ArchiveStrategy>
                        <!-- If this is a dvrstreamingrepeater, define ChunkOriginURL to point back to origin -->
                        <!-- And define Application/Repeater/OriginURL to point back to the origin -->
                        <Repeater>
                                <ChunkOriginURL></ChunkOriginURL>
                        </Repeater>
                        <!-- Properties for DVR -->
                        <Properties>
                        </Properties>
                </DVR>
                <!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, dvrchunkstreaming -->
                <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
                <SharedObjects>
                        <StorageDir></StorageDir>
                </SharedObjects>
                <Client>
                        <IdleFrequency>-1</IdleFrequency>
                        <Access>
                                <StreamReadAccess>*</StreamReadAccess>
                                <StreamWriteAccess>*</StreamWriteAccess>
                                <StreamAudioSampleAccess></StreamAudioSampleAccess>
                                <StreamVideoSampleAccess></StreamVideoSampleAccess>
                                <SharedObjectReadAccess>*</SharedObjectReadAccess>
                                <SharedObjectWriteAccess>*</SharedObjectWriteAccess>
                        </Access>
                </Client>
                <RTP>
                        <!-- RTP/Authentication/[type]Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->
                        <Authentication>
                                <PublishMethod>digest</PublishMethod>
                                <PlayMethod>none</PlayMethod>
                        </Authentication>
                        <!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->
                        <AVSyncMethod>senderreport</AVSyncMethod>
                        <MaxRTCPWaitTime>12000</MaxRTCPWaitTime>
                        <IdleFrequency>75</IdleFrequency>
                        <RTSPSessionTimeout>90000</RTSPSessionTimeout>
                        <RTSPMaximumPendingWriteBytes>0</RTSPMaximumPendingWriteBytes>
                        <RTSPBindIpAddress></RTSPBindIpAddress>
                        <RTSPConnectionIpAddress>0.0.0.0</RTSPConnectionIpAddress>
                        <RTSPOriginIpAddress>127.0.0.1</RTSPOriginIpAddress>
                        <IncomingDatagramPortRanges>*</IncomingDatagramPortRanges>
                        <!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this application -->
                        <Properties>
                        </Properties>
                </RTP>
                <MediaCaster>
                        <RTP>
                                <RTSP>
                                        <!-- udp, interleave -->
                                        <RTPTransportMode>interleave</RTPTransportMode>
                                </RTSP>
                        </RTP>
                        <!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by this applications -->
                        <Properties>
                                <Name>shoutcastMP3GroupCount</Name>
                                <Value>1</Value>
                                <Type>Integer</Type>
                        </Properties>
                </MediaCaster>
                <MediaReader>
                        <!-- Properties defined here will override any properties defined in conf/MediaReaders.xml for any MediaReaders loaded by this applications -->
                        <Properties>
                        </Properties>
                </MediaReader>
                <MediaWriter>
                        <!-- Properties defined here will override any properties defined in conf/MediaWriter.xml for any MediaWriter loaded by this applications -->
                        <Properties>
                        </Properties>
                </MediaWriter>
                <LiveStreamPacketizer>
                        <!-- Properties defined here will override any properties defined in conf/LiveStreamPacketizers.xml for any LiveStreamPacketizers loaded by this applications -->
                        <Properties>
                        </Properties>
                </LiveStreamPacketizer>
                <HTTPStreamer>
                        <!-- Properties defined here will override any properties defined in conf/HTTPStreamers.xml for any HTTPStreamer loaded by this applications -->
                        <Properties>
                        </Properties>
                </HTTPStreamer>
                <Repeater>
                        <OriginURL></OriginURL>
                        <QueryString><![CDATA[]]></QueryString>
                </Repeater> 
                <Modules>
                        <Module>
                                <Name>base</Name>
                                <Description>Base</Description>
                                <Class>com.wowza.wms.module.ModuleCore</Class>
                        </Module>
                        <Module>
                                <Name>properties</Name>
                                <Description>Properties</Description>
                                <Class>com.wowza.wms.module.ModuleProperties</Class>
                        </Module>
                        <Module>
                                <Name>logging</Name>
                                <Description>Client Logging</Description>
                                <Class>com.wowza.wms.module.ModuleClientLogging</Class>
                        </Module>
                        <Module>
                                <Name>flvplayback</Name>
                                <Description>FLVPlayback</Description>
                                <Class>com.wowza.wms.module.ModuleFLVPlayback</Class>
                        </Module>
                </Modules>
                <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
                <Properties>
                </Properties>
        </Application>
</Root>

My audioonly template:

<!-- Example template for audio only transcoding to AAC from any support audio codec -->
<Root>
        <Transcode>
                <Encodes>
                        <!-- Example Encode block for source, not required unless Member of StreamNameGroup. -->
                        <Encode>
                                <Enable>true</Enable>
                                <Name>aac</Name>
                                <StreamName>mp4:${SourceStreamName}_aac</StreamName>
                                <Video>
                                        <!-- H.264, PassThru, Disable -->
                                        <Codec>Disable</Codec>
                                        <Bitrate>${SourceVideoBitrate}</Bitrate>
                                        <Parameters>
                                        </Parameters>
                                </Video>
                                <Audio>
                                        <!-- AAC, PassThru, Disable -->
                                        <Codec>AAC</Codec>
                                        <Bitrate>48000</Bitrate>                
                                        <Parameters>
                                        </Parameters>
                                </Audio>
                                <Properties>
                                </Properties>
                        </Encode>
                </Encodes>
                <Decode>
                </Decode>
                <StreamNameGroups>
                </StreamNameGroups>
                <Properties>
                </Properties>
        </Transcode>
</Root>

The system is an Debian (still Lenny) 64bit running a Wowza 3.1.2 with java 1.6.0_26

In the access.log the following lines are listed:

JNI:TranscoderSession.audioDecoderCreate[_defaultVHost_:live/_definst_/***.stream]: Create audio decoder: MP3: default
transcoder      INFO    200     ***.stream {codec:MP3, objectType:MPEG1LAYER3, sampleRate:44100, channels:2}
JNI:TranscoderSession.audioEncoderAdd[_defaultVHost_:live/_definst_/***.stream:aac]: Create audio encoder: AAC: default
JNI:AudioEncoderAAC.initialize[_defaultVHost_:live/_definst_/***.stream:aac]: channels:2 sampleRate:44100 bitRate:48000

Listening to .stream works well, but listening to mp4:.stream_aac plays no music at all and from time to time some rubbish (like extreme fast forwarding) can be heard.

What do i miss? Any ideas?

Regards

.nowrap

Which step in the Transcoder Troubleshooting tests fails?

Which step in the Transcoder Troubleshooting tests fails?

Hello,

i guess, the tests doesn’t fail :confused:

I checked the steps 3a to 3e under Test #2

3a is present

comment server  INFO    200     -       TranscoderSessionNative.loadLibrary: Load transcoder list: /usr/local/WowzaMediaServer/lib-native/linux64/transcoder.list

3b is present

comment server  INFO    200     -       LiveStreamTranscoder.init[live/_definst_/***.stream]: Load transcoder template: file:///usr/local/WowzaMediaServer/transcoder/templates/audioonly.xml

3c is present

publish stream  INFO    200     ***.stream_aac

3d is present

decoder-audio-start     transcoder      INFO    200     ***.stream        {codec:MP3, objectType:MPEG1LAYER3, sampleRate:44100, channels:2}

3e is present

encoder-audio-start     transcoder      INFO    200     ***.stream        {name:"aac", bitrate:48000, codec:AAC, objectType:LC, sampleRate:44100, channels:2}

Some Hints i’ve found:

comment server  INFO    200     -       JNI:TranscoderSession.isCUDAAvailable[_defaultVHost_:live/_definst_/***.stream]: NVidia CUDA hardware acceleration is NOT available on Linux
comment server  INFO    200     -       JNI:TranscoderSession.isQuickSyncAvailable[_defaultVHost_:live/_definst_/***.stream]: Intel Quick Sync hardware acceleration is NOT available on Linux

But this is the correct behaviour under linux, i guess and the software transcoder jumps in, or?

And:

comment server  WARN    200     -       TranscodingStreamUtils.loadTemplateStreamVideo: Error parsing transcoding template: (file:///usr/local/WowzaMediaServer/transcoder/templates/audioonly.xml:aac). Video <Bitrate> can only be set to ${SourceVideoBitrate} if <Codec> is set to PassThru. Video <Bitrate> will be set to: 250000 

Fixing this setting doesn’t change the none hearable transcoded audio.

Within my Flash Tester i got the following debug output:

nsPlay: NetStream.Play.Start (Started playing ***.stream_aac.)
onMetaData
  trackinfo = [object Object]
  transcoder = [object Object]
  audiodatarate = 46
  audiochannels = 2
  audiosamplerate = 44100
  StreamTitle =  - 
  audiocodecid = mp4a
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)
nsPlay: NetStream.Buffer.Full (undefined)
nsPlay: NetStream.Buffer.Empty (undefined)

Regards

.nowrap

I found my error, a missing Property-XML-Container within the MediaCaster section of the Application.xml :wink:

This was wrong:

<Properties>
	<Name>shoutcastMP3GroupCount</Name>
	<Value>1</Value>
	<Type>Integer</Type>                         
</Properties>

It needs to be;

<Properties>
	<Property>
		<Name>shoutcastMP3GroupCount</Name>
		<Value>1</Value>
		<Type>Integer</Type>
	</Property>                                  
</Properties>

Thanks for reporting your solution. Seeing your troubleshooting steps might help someone else.