Wowza Community

live stream playback issue for ios and silverlight

Hello. I am using a Winnov Cbox to stream h.264 live to a Wowza dev server using RTP over UDP with an SDP file. The stream plays back with no issues in a flash player, but doesn’t work on ios and silverlight. On an ipad, the stream will rarely play and if it does it freezes in a few seconds. Normally the screen just stays black and nothing happens. On an iphone the message “Loading video” is displayed and just hangs there. For Silverlight the video played once for a min or so, but now it just says “Streaming Error: too many consecutive chunk parse errors (5)”. Thanks for the help! Here is my App.xml

<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>
			<Property>
				<Name>smoothStreamingMediaMajorVersion</Name>
				<Value>2</Value>
				<Type>Integer</Type>
			</Property>
		</Properties>
	</Application>
</Root>

What is the audio and video encoding parameters? To playback on Flash, iOS and Silverlight, the video should be h.264 Baseline 3, the audio should be AAC or MP3-stereo-44100Hz, and the key frame frequency should be 2 seconds. A lower bitrate might help.

Richard

What is the FPS? Because key frame frequency is either set directly or is (key frame interval / fps). For Smooth streaming, key frame frequency has to be between 1 and 4 seconds, and 2 seconds is recommended

If the audio is AAC, 48khz should be okay. But if it is MP3, at least on some IPhones, it has to be 44.1khz

Do you have a m3u8 and Manifest url on a public IP I can test? Send to support@wowza.com if you don’t want to post it here, and include a link to this thread.

Richard

I don’t think you will need to update sdp in that case. I don’t think encoding changes will change the sdp. You can compare two to check.

The fps and key frame interval seem right for 2 second key frame frequency. But look for a message like this:

WARN server comment - LiveStreamPacketizerSmoothStreaming.handlePacket[smooth/definst/ch08mobile]: Fragment duration greater than suggested range of 1-4 seconds. Adjust keyframe interval accordingly: Fragment durations: [10.0,10.0,10.0]

Richard

The time limit on live http streaming with developer license is 3 minutes and 7 streams. Timecode out of order is unrelated problem with encoder

Richard

Oliver,

Which player are you using? Did you test in Wowza LiveVideoStreaming Silverlight player? [wowza-install-dir]/examples/LiveVideoStreaming/clientSilverlight

Richard

Are you using a developer license? There are time limits on live http streaming.

Richard

This time limit of the developer license only applies to Live HTTP Streaming, not VOD HTTP Streaming or any kind of Flash streaming.

This is most likely the problem. Take a look at the access log, you will probably see messages regarding this timeout. The dev license is impractical for this testing, you need an eval license.

Look for:

WARN server comment - Licensing: *** Hit license limit for stream. Stream is stopped. ***

Richard

I changed the max keyframe interval to 60. I couldn’t change the audio from 48khz. All other settings seem to be good. The bit rate is at 500 for video and 64 for audio. i was planning on going higher than that so I don’t want to lower it.

Sorry, forgot to mention I get the same error/problems. :slight_smile:

FPS is 29.97. Audio is AAC. My server is not public accessible unfortunately.

Quick follow up question: as I make changes to the encoding parameters on my encoder, do I need to upload the sdp file every time I make a change? I’m unlcear on how the sdp file works and what it does. Sorry for the cross post but I thought it was relevant here.

What do you make of this warning:

LiveStreamPacketizerSmoothStreaming.handlePacket[live/definst/myStream.sdp]: Timecode out of order [audio]: 317120000:317970000

OK, pretty sure I’ve found the issue: Licensing. I got everything setup, restarted the server, started watching the log, started the stream, and viewed it on my ipad. It played for about 3 min, then the log issued the warning:

WARN server comment 2011-03-10 17:23:20 - - - - - 341.334 - - - - - - - -Licensing: *** Hit license limit for stream. Stream is stopped. ***

Then the stream froze on the ipad. The confusing part is I thought the time limit on the dev server for HTTP streaming was 10 min?

Ah, that was the issue then. I thought it was 10 min for some reason, that’s why I was confused. Thanks for the help Richard!

Hello,

I’ve got the same problem. I’m getting the “Too many consecutive chunk parse errors (5)” error message when I try to view my broadcast in Silverlight.

I’m using Flash Media Live encoder, H.264 baseline 3 and 2sec keyframe frequency.

This is the manifest file:

  <?xml version="1.0" encoding="utf-8" ?> 
- <SmoothStreamingMedia MajorVersion="2" MinorVersion="1" Duration="0" Timescale="10000000" LookAheadFragmentCount="2" DVRWindowLength="0" IsLive="TRUE">
- <StreamIndex Type="audio" Index="0" Chunks="0" Timescale="10000000" QualityLevels="1" Url="QualityLevels({bitrate})/Fragments(audio={start time})/WowzaSessions(1221084709).isma">
  <QualityLevel Bitrate="128074" FourCC="WMAP" SamplingRate="44100" Channels="2" BitsPerSample="16" PacketSize="4" AudioTag="85" CodecPrivateData="5500020044ac000000000000010000000000" /> 
  <c t="335544320000" /> 
  <c t="335564510000" /> 
  <c t="335584630000" /> 
  <c t="335604750000" /> 
  <c t="335624850000" /> 
  <c t="335644970000" /> 
  <c t="335665080000" /> 
  <c t="335685200000" /> 
  <c t="335705310000" /> 
  <c t="335725430000" d="20110000" /> 
  </StreamIndex>
- <StreamIndex Type="video" Chunks="0" Timescale="10000000" QualityLevels="1" MaxWidth="176" MaxHeight="144" DisplayWidth="176" DisplayHeight="144" Url="QualityLevels({bitrate})/Fragments(video={start time})/WowzaSessions(1221084709).ismv">
  <QualityLevel Index="0" Bitrate="84720" FourCC="H264" MaxWidth="176" MaxHeight="144" CodecPrivateData="000000016742801e96520589d80a84000003000400000300cb81800927000118c3fc638c0c0049380008c61fe31c3b4285490000000168cb8d48" /> 
  <c t="335544320000" /> 
  <c t="335556380000" /> 
  <c t="335595160000" /> 
  <c t="335634400000" d="39170000" /> 
  </StreamIndex>
  </SmoothStreamingMedia>

Thank you for your help!

Oliver

Hi Richard,

thank you for your reply. Yes, I’m testing it with this player.

Oliver

Yes, this is a developer licesnse, but I think I’m not beyond the limits. I’ve also looked into the console’s output and it says nothing about the limits exceeded. And the streaming to flash works without any problem…

Ok, I will request the eval. Thank you!

Oliver