Wowza Community

Smil Problem: Medialist is Empty

Hi,

I need to reproduce a playlist of files.

I’m trying to use Wowza Transcoder using smil file. Is that solution the correct one?

For now I tried the following.

Created an application called “test”, created directory “content/test” and putted in my mp4 (1.mp4,2.mp4,3.mp4) and smil file (playlist.smil).

Here the “playlist.smil”:

<smil>
 <head>
 </head>
 <body>
  <stream name="playlist"></stream>
  <playlist name="test" playOnStream="playlist" repeat="false" scheduled="2013-07-30 07:45:00">
   <video src="mp4:1.mp4" start="0" length="20"/>
   <video src="mp4:2.mp4" start="0" length="10"/>
	<video src="mp4:3.mp4" start="0" length="-1"/>
  </playlist>
 </body>
</smil>

When I try to play it, i receive that error with the player founded in “examples/VideoOnDemandStreaming/FlashHTTPPlayer” directory:

The F4M document contains errors URL missing from Media tag

and in log error I got that:

WARN server comment 2013-07-30 11:39:11 - - - - - 0.056 - - - - - - - - HTTPStreamerSanJoseLiveIndex.indexPlaylist[test/definst/smil:playlist.smil]: MediaList is empty.

I use that url to test streaming:

http://[my-wowza-machine-ip]:1935/test/smil:playlist.smil/manifest.f4m

I put here my Application.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/test</StorageDir>
			<KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
			<!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer, mpegdashstreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater, sanjosestreamingrepeater, dvrstreamingpacketizer, dvrstreamingrepeater -->
			<LiveStreamPacketizers>cupertinostreamingpacketizer,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>
			<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 -->
			<!-- If this is a dvrstreamingrepeater, define Application/Repeater/OriginURL to point back to the origin -->
			
			<!-- 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>
			<!-- Properties for DVR -->
			<Properties>
			</Properties>
		</DVR>
		<TimedText>
			<!-- VOD caption providers (separate with commas): vodcaptionprovidermp4_3gpp, vodcaptionproviderttml, vodcaptionproviderwebvtt,  vodcaptionprovidersrt, vodcaptionproviderscc -->
			<VODTimedTextProviders>vodcaptionprovidermp4_3gpp</VODTimedTextProviders>
			
			<!-- Properties for TimedText -->
			<Properties>
			</Properties>		
		</TimedText>
		
		<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, mpegdashstreaming, 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>
			</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>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>
<stream name="playlist"></stream>
	</Application>
</Root>

Somebody know how to fix that?

Best regards and thank you.

The .smil file you are using is used by the Wowza scheduler for sequential playback of vod sources as a live stream.

Take a look at the Adaptive Bitrate section of the Video On Demand Tutorial for the correct form for an ABR smil.

Richard

You just have to put the smil file and the files it refers to in the content folder, which in your case is [wowza-install-dir]/content/test

Please use the kind of smil in that VOD tutorial. That is the right way to do it.

Richard

The scheduler has nothing to do with vod ABR, in fact that is a live stream, so it is not even close. I’m not sure how you are conflating these two things. Please just follow the vod tutorial. If you need hands on help, you can post in the Find a Consultant forum, or write to support@wowza.com and ask for the video on demand tutorial.

Otherwise, start over with a new application, follow that tutorial very precisely. I can tell you are doing two things wrong: skimming and improvising. Don’t change anything that is not in the tutorial, like content location, until you get it working.

Richard

Okay, then do follow the scheduler guide

If you set it up exactly as shown, the stream name is “Stream1”. You do not reference the .smil file in playback. Advice is the same: follow the guides precisely and don’t improvise until you see it working.

Richard

The .smil file you are using is used by the Wowza scheduler for sequential playback of vod sources as a live stream.

Take a look at the Adaptive Bitrate section of the Video On Demand Tutorial for the correct form for an ABR smil.

Richard

Thank you for reply.

I already tried that tutorial and I tested the bigbuckbunny.smil wothout success…

With that smil, i give another error:

WARN	server	comment	2013-07-30	12:13:18	-	-	-	-	-	0.243	-	-	-	-	-	-	-	-	HTTPStreamerAdapterSanJoseStreamer.onPlaylist: Stream not found [live/smil:bigbuckbunny.smil/manifest.f4m]: bigbuckbunny.smil

using that url:

http://178.32.136.116:1935/live/smil:bigbuckbunny.smil/manifest.f4m

getting error:

Error #2032

There is any library to import in Wowza to make it working?

I don’t know if that matters, but I’m with Wowza 3.6 Trial Licence on Centos 6.4 x86_64.

Stefano

You just have to put the smil file and the files it refers to in the content folder, which in your case is [wowza-install-dir]/content/test

Please use the kind of smil in that VOD tutorial. That is the right way to do it.

Richard

I have my files (video and the smil) in “/content/test”:

[root@localhost content]# ls test/
1.mp4  1.smil  2.mp4  3.mp4  4.mp4  5.mp4  6.mp4  playlist.smil  sample.mp4

but it doesen’t work…

I also installed “wms-plugin-collection” and enabled it following that tutorial: https://www.wowza.com/docs/how-to-schedule-streaming-with-wowza-streaming-engine-streampublisher

I also tried the example in that tutorial but not even it work.

EDIT __________________

Using this player:

/examples/LiveVideoStreaming/FlashRTMPPlayer/player.html

Setting “stream” to “playlist”, i get:

Failed to play playlist; stream not found.

The scheduler has nothing to do with vod ABR, in fact that is a live stream, so it is not even close. I’m not sure how you are conflating these two things. Please just follow the vod tutorial. If you need hands on help, you can post in the Find a Consultant forum, or write to support@wowza.com and ask for the video on demand tutorial.

Otherwise, start over with a new application, follow that tutorial very precisely. I can tell you are doing two things wrong: skimming and improvising. Don’t change anything that is not in the tutorial, like content location, until you get it working.

Richard

Maybe I wrong explained my self.

I try to explain better.

I need to make a Television (so a live streaming) that will be play some video in order at specified time.

Ex: at 07:00AM will be reproduced 1.mp4, 2.mp4 and 3.mp4.

at 08:00AM will be reproduced 5.mp4, 4.mp4 and 6.mp4.

I explaind better what I need to do?