Force a non-compliant H.264 live stream to use Baseline level 3 profile (iPhone/iPod)

This article has been taken out of print because it is not very useful. It might help represent a Baseline 4 stream as Baseline 3 (which doesn’t matter in most phones now), but it is not going to help if you are using Main profile, for example.

We’re actually using this method for some baseline 4 streams. A Java upgrade has killed us. What version of Java do we need? There are log complaints about the wrong Media Framework causing a mismatch. I think we have 2.1.1e now.

Shouldn’t it be “LiveStreamPacketizers” NOT “LiveStreamPacketizer” at least that is how it is listed in the Wowza 2.1.1 Application.xml.

Can this work for a repeater?

I follow the post

http://community.wowza.com/t/-/87

and add configs in this post,it seems it doesn’t work.

Can anybody help me to solve this problem?

This link to https://www.wowza.com/forums/content.php?61 does not work for me. It says I “do not have permission to access this page” Can you help?

No, you are thinking of /Streams /LiveStreamPacketizers, which is toward the top of the Application.xml

The LiveStreamPacketizer section is further down in the Application.xml.

Richard

I believe akami is more or less the origin in this case, and any Wowza server that is set up to re-stream using this technique is essentially an edge.

Richard

I think this is taken out of print because it is not very useful. It might help represent a Baseline 4 stream as Baseline 3 (which doesn’t matter in most phones now), but it is not going to help if you are using Main profile.

Richard

No, not in Wowza 2. Yes in the future release of Wowza 3 (probably with addon feature), but not till later this year.

Meanwhile, you can use ffmpeg or VLC to transcode live streams on the fly:

https://www.wowza.com/docs/how-to-use-vlc-as-a-live-stream-encoder-with-wowza-media-server-mpeg-ts)

https://www.wowza.com/docs/how-to-use-ffmpeg-with-wowza-media-server-mpeg-ts)

Richard

The latest JDK is always recommended. And Wowza 2.2.4, you can use the installer and re-configure is best. Don’t copy old files.

Richard

Here are the basic instructions:

To turn on this feature do the following:

Setup a live or video on demand streaming application.

Edit [install-dir]/conf/[application]/Application.xml (where [application] is the name of the application that you have setup for streaming) and add the following property to the LiveStreamPacketizer/Properties container (your Application.xml file may not contain a LiveStreamPacketizer/Properties container, if not then see the Application.xml file in the conf folder of the patch to see where it should be added to the file) (this example shows the entire LiveStreamPacketizer section):

<LiveStreamPacketizer>
 <Properties>
  <Property>
   <Name>forceH264BaselineProfile</Name>
   <Value>true</Value>
   <Type>Boolean</Type>
  </Property>
 </Properties>
</LiveStreamPacketizer>
For vod add the property to the HTTPStreamer/Properties
Code:
<HTTPStreamer>
 <Properties>
  <Property>
   <Name>forceH264BaselineProfile</Name>
   <Value>true</Value>
   <Type>Boolean</Type>
  </Property>
 </Properties>
</HTTPStreamer>

As noted at top, this technique it is “…not very useful. It might help represent a Baseline 4 stream as Baseline 3 (which doesn’t matter in most phones now), but it is not going to help if you are using Main profile, for example.”

Richard

Thanks for explaining. Is there no way to down-convert a Main or High profile at the server?

Can you please re post the whole thread again…This feature was working for us and we used it. When we updated our wowza it blew out that config and now we cannot stream to iphones…HELP

This code works in the last version of wowza?

<LiveStreamPacketizer>
 <Properties>
  <Property>
   <Name>forceH264BaselineProfile</Name>
   <Value>true</Value>
   <Type>Boolean</Type>
  </Property>
 </Properties>
</LiveStreamPacketizer>
For vod add the property to the HTTPStreamer/Properties
Code:
<HTTPStreamer>
 <Properties>
  <Property>
   <Name>forceH264BaselineProfile</Name>
   <Value>true</Value>
   <Type>Boolean</Type>
  </Property>
 </Properties>
</HTTPStreamer>

My application live config:

<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></LiveStreamTranscoder>
			<!-- [templatename].xml or ${SourceStreamName}.xml -->
			<Templates>${SourceStreamName}.xml,transrate.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>
			</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>
				<Property>
					<Name>forceH264BaselineProfile</Name>
	    				<Value>true</Value>
	    				<Type>Boolean</Type>
				</Property>	
			</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>