HTTP Live Streaming from VLC to Wowza to Roku - No Audio

I’m trying to set up streaming from my PC running Windows 7 to my Roku box connected to my TV using VLC and Wowza. As a first test I’m trying to stream the sample.mp4 file from VLC to Wowza using VLC’s RTP / MPEG Transport Steam mode then access the stream from Roku using HTTP Live Streaming. The video works perfectly; however, there is no audio at all.

Here are the steps I’ve taken so far:

  • Create a folder [install-dir]/applications/roku

  • Create a folder [install-dir]/conf/roku

  • Copy [install-dir]/conf/live/Application.xml to [install-dir]/conf/roku

  • Create a file [install-dir]/content/mpegts.stream containing: udp://0.0.0.0:10000

  • Add an entry to [install-dir]/conf/admin.password containing: username password

  • Start Wowza Media Server 2.2.2

  • Run the Wowza Media Server 2 Stream Manager: http://localhost:8086/streammanager

  • Under the entry roku/definst click ‘start receiving stream’

  • Select MediaCaster Type: rtp

  • Enter Stream Name: mpegts.stream

  • Start the VLC media player version 1.1.5

  • Select Media>Streaming…>File>Add… then enter the path to sample.mp4

  • On the Stream Output Page select the ‘RTP / MPEG Transport Stream’ streaming method using Address: 127.0.0.1 and Base Port: 10000.

  • Note that this gives a stream generated using the following:

:sout=#transcode{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{dst=127.0.0.1,port=10000,mux=ts} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep
  • On my Roku box I installed their sample SimpleVideoPlayer application, changing the URL it reads from to:
http://192.168.0.100:1935/roku/mpegts.stream/playlist.m3u8

When I run the application on Roku the video works but there is no sound at all. Any

suggestions of any other steps I need to take or settings to tweak to make this work? The Roku specs state that the audio must be encoded as AAC-LC, which I believe is what VLC is using, but I'm not sure about that. All this is very new to me. Any help would be appreciated.

Here's the code in my Application.xml file:

<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>
		<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming -->
		<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>
			<!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by this applications -->
			<Properties>
				<Property>
				    <Name>forceInterleaved</Name>
				    <Value>true</Value>
				    <Type>Boolean</Type>
				</Property>			
				<Property>
					<Name>callFCSubscribe</Name>
					<Value>true</Value>
					<Type>Boolean</Type>
				</Property>
			</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>

It is most likely an encoding problem. I would turn on debug logging in VLC to see if there are any errors or warning on that side of things. I might also try to play the MPEG-TS stream directly in another copy of VLC to see if you get the audio.

You might also try playing the playlist.m3u8 stream from Wowza on an iOS device or Snow Leopard (QuickTime 10.x).

Charlie

It looks like you might be right, Charlie.

I turned on debug logging in VLC and got the following:

    [04990214] logger interface: VLC media player - 1.1.5 The Luggage
    [04990214] logger interface: Copyright c 1996-2010 the VideoLAN team
    [04990214] logger interface:
    Warning: if you can't access the GUI anymore, open a command-line window, go to
    the directory where you installed VLC and run "vlc -I qt"
    [04990214] logger interface: using logger.
    [009f15c4] main stream out error: [B]Failed to create audio filter[/B]
    [009f15c4] stream_out_transcode stream out error: [B]Failed to find conversion filt
    er for resampling[/B]
    [009f15c4] stream_out_transcode stream out error: [B]cannot create audio chain[/B]
    [0831888c] main decoder error: [B]cannot create packetizer output (mp4a)[/B]
    x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
    x264 [info]: profile High, level 2.1
    x264 [info]: using SAR=1/1
    x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
    x264 [info]: profile High, level 2.1

So it looks like I have a missing conversion filter. I’ll head over to the VideoLAN forums to try and track it down. Thanks for your help.

It turns out that the “,samplerate=44100” was the problem. If I remove that or change the 44100 to 48000 then the audio works.