Results 1 to 8 of 8

Thread: Scheduled Streaming Problem. Unpublishes when it rolls to a new playlist

  1. #1
    Join Date
    Feb 2011
    Posts
    5

    Default Scheduled Streaming Problem. Unpublishes when it rolls to a new playlist

    I have been using the scheduled streaming through an AWS EC2 instance for my church for over 2 years. Out of the blue, the instance disappeared on me a couple of weeks ago. There really was no data loss since it's live streaming on Sundays and the archives are stored at S3. Anyway, I built a new instance, but have been having problems with the stream scheduler ever since. Basically, it works fine when I'm running the short "offline.mov" file on a loop, but as soon as it rolls over to a playlist for the live stream or an archived file, the whole stream stops. Below are snippets from the smil file and the log file showing the errors. The schedule is supposed to run something like this. Stream live on Sunday morning. Loop through the short "offline.mov" file until Monday morning. Every hour from Monday through Saturday, play the archived file that we edited and uploaded to S3. By the way, the "live" directory listed in the src is an s3fs-mounted directory under ~wowza/content.

    <smil>
            <head>
            </head>
            <body>
                    <stream name="Sermon"></stream>
    
                    <playlist name="pl0" playOnStream="Sermon" repeat="true" scheduled="2011-01-01 01:00:00">
                            <video src="mp4:live/offline.mov" start="0" length="-1"/>
                    </playlist>
                    <playlist name="pl1" playOnStream="Sermon" repeat="false" scheduled="2012-09-23 15:00:00">
                            <video src="mp4:live/current.mov" start="0" length="-1"/>
                    </playlist>
                    <playlist name="pl2" playOnStream="Sermon" repeat="true" scheduled="2012-09-24 00:59:00">
                            <video src="mp4:live/offline.mov" start="0" length="-1"/>
                    </playlist>
                    <playlist name="pl3" playOnStream="Sermon" repeat="false" scheduled="2012-09-24 01:00:00">
                            <video src="mp4:live/current.mov" start="0" length="-1"/>
                    </playlist>
    
    .....
    
                    <playlist name="pl288" playOnStream="Sermon" repeat="true" scheduled="2012-09-29 23:59:00">
                            <video src="mp4:live/offline.mov" start="0" length="-1"/>
                    </playlist>
                    <playlist name="pl289" playOnStream="Sermon" repeat="false" scheduled="2012-09-30 08:20:00">
                            <video src="service" start="-2" length="-1"/>
                    </playlist>
                    <playlist name="pl290" playOnStream="Sermon" repeat="true" scheduled="2012-09-30 13:00:00">
                            <video src="mp4:live/offline.mov" start="0" length="-1"/>
                    </playlist>
            </body>
    </smil>
    In the log snippet below, you'll see what happened when 3:00 PM rolled around and it attempted to play the "current.mov" file. The file does exist, but for some reason, it starts closing the stream. I've been using the same streamingschedule.smil template for the last couple of years, so I'm left to think there's a configuration I'm missing somewhere else.

    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.711	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.711	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.711	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.712	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.713	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.714	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.714	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.714	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.714	-	-
    2012-09-23	15:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	663.714	-	-
    2012-09-23	15:00:00	EDT	stop	stream	INFO	200	Sermon	-	-	-	-	171.109	-	-	-	-	-	-	-	173574	0	5467126	Sermon	-	-	-	-	-	rtmp://streaming.freedomlife.tv/live/Sermon	rtmp://streaming.freedomlife.tv/live/Sermon	-	-
    2012-09-23	15:00:00	EDT	unpublish	stream	INFO	200	Sermon	-	-	-	-	653.088	-	-	-	-	-	-	Sermon	-	-	-	-	-	/Sermon	/Sermon	-	-	-
    2012-09-23	15:00:00	EDT	destroy	stream	INFO	200	Sermon	-	-	-	-	653.088	-	-	-	-	-	-	-	Sermon	-	-	-	-	-	/Sermon	/Sermon	-	-	-
    2012-09-23	15:00:05	EDT	destroy	stream	INFO	200	Sermon	-	_defaultVHost_	live	_definst_	176.51	[any]	1935	rtmp://streaming.freedomlife.tv/live	190.109.197.246	rtmp	http://staging.freedomlife.tv/wp-content/uploads/jw-player-plugin-for-wordpress/player/player.swf	MAC 11,4,402,265	539577103758	5822195	1	-	0	5467126	Sermon	-	-	-	-	-	rtmp://streaming.freedomlife.tv/live/Sermon	rtmp://streaming.freedomlife.tv/l

  2. #2

    Default

    Hi flcc_matt,

    What is the file system path to current.mov? Normally you would put your media in the folder referenced by StorageDir in your Application.xml.

    If you wish to reference media in a folder nested under the "StorageDir" folder then you must specify an instance or use the "definst" method.

    If all your media is in the StorageDir, you can omit "live/" like so:
    <playlist name="pl1" playOnStream="Sermon" repeat="true" scheduled="2012-09-23 15:00:00">
     <video src="mp4:current.mov" start="0" length="-1"/>

  3. #3
    Join Date
    Feb 2011
    Posts
    5

    Default

    randall, thank you for the insight, but even why I try moving the file to the StorageDir location and remove the "live/" path from the SMIL file, it still bombs. Here's the latest after trying your recommeded switch:

    2012-09-24	10:00:00	EDT	comment	server	INFO	200	-	ServerListenerStreamPublisher: closing stream: Sermon	-	-	-	2945.553	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    2012-09-24	10:00:00	EDT	unpublish	stream	INFO	200	Sermon	-	-	-	-	2934.744	-	-	-	-	-	-	-	-	-	-	1	0	0	0	Sermon	-	-	-	-	-	/Sermon	/Sermon	-	-	-
    2012-09-24	10:00:00	EDT	destroy	stream	INFO	200	Sermon	-	-	-	-	2934.748	-	-	-	-	-	-	-	-	-	-	1	0	0	0	Sermon	-	-	-	-	-	/Sermon	/Sermon	-	-	-
    2012-09-24	10:00:00	EDT	app-stop	application	INFO	200	_definst_	live/_definst_	-	-	-	2945.718	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    2012-09-24	10:00:12	EDT	comment	server	INFO	200	-	MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/Sermon]: Destroy live stream packetizer: cupertinostreamingpacketizer	-	-	-	2957.662	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    2012-09-24	10:00:12	EDT	comment	server	INFO	200	-	MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/Sermon]: Destroy live stream packetizer: sanjosestreamingpacketizer	-	-	-	2957.663	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    2012-09-24	10:00:12	EDT	comment	server	INFO	200	-	MediaStreamMap.removeLiveStreamPacketizer[live/_definst_/Sermon]: Destroy live stream packetizer: smoothstreamingpacketizer	-	-	-	2957.663	-	-	-	-	-	-	-	-	-	-	-	-	-	-
    and the corresponding SMIL chunk...

                    <playlist name="pl21" playOnStream="Sermon" repeat="false" scheduled="2012-09-24 10:00:00">
                            <video src="mp4:current.mov" start="0" length="-1"/>
                    </playlist>
    for reference, here's the Application.xml for the "live" application. it's basically the default template with the Module added for scheduled streaming. the "current.mov" file exists in /home/wowza/content as stated in the 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>
    		<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>smoothstreamingpacketizer,cupertinostreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>			
    			<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 -->
    		<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: none, basic, digest -->
    			<Authentication>
    				<PublishMethod>none</PublishMethod>
    				<PlayMethod>none</PlayMethod>
    			</Authentication>
    			<!-- RTP/AVSyncMethod: 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>
    			</Properties>
    		</RTP>
    		<MediaCaster>
    			<RTP>
    				<RTSP>
    					<!-- udp, interleave -->
    					<RTPTransportMode>interleave</RTPTransportMode>
    				</RTSP>
    			</RTP>
    			<Properties>
    			</Properties>
    		</MediaCaster>
    		<MediaReader>
    			<Properties>
    			</Properties>
    		</MediaReader>
    		<MediaWriter>
    			<Properties>
    			</Properties>
    		</MediaWriter>
    		<LiveStreamPacketizer>
    			<Properties>
    			</Properties>
    		</LiveStreamPacketizer>
    		<HTTPStreamer>
    			<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>
    			<Module>
    				<Name>streamcontroller</Name>
    				<Description>ModuleStreamControl</Description>
    				<Class>com.wowza.wms.plugin.collection.module.ModuleStreamControl</Class>
    			</Module>
    		</Modules>
    		<Properties>
    		</Properties>
    	</Application>
    </Root>

  4. #4
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    When it stops after the playlist changes, will it play if you stop and start the player? If so, it is the encoding transition that the playback client cannot handle

    Richard

  5. #5
    Join Date
    Feb 2011
    Posts
    5

    Default

    Quote Originally Posted by rrlanham View Post
    When it stops after the playlist changes, will it play if you stop and start the player? If so, it is the encoding transition that the playback client cannot handle

    Richard
    Richard, thanks for the reply. When you say "stop and start the player", are you referring to JW Player (or whatever other Flash player)? If so, the answer is no. I have to restart Wowza to get it to publish again. Otherwise, it simply says "stream not found: Sermon". Even then, it usually spins for the rest of the hour until the next playlist is set to hit and the bombs again. At first I thought maybe there was something up with the way we encoded our files, but they play fine through vods3.

  6. #6
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    I see the problem. If you set the Playlist to repeat that should fix it. This is the bit of code in the example that is running in this case and unpublishing the stream:

    public void onPlaylistItemStop(Stream stream, PlaylistItem item)
            {
            	if (item.getIndex() == (stream.getPlaylist().size() - 1))
            	{
            	if (! stream.getRepeat())
            	{
            	stream.close();
            	WMSLoggerFactory.getLogger(null).info("ServerListenerStreamPublisher: closing stream: " + stream.getName());
            	}
            	}
            }
    As you can see, this will never happen if the Playlist is set to repeat (repeat="true").

    Richard

  7. #7
    Join Date
    Feb 2011
    Posts
    5

    Default

    Thanks Richard. That definitely seems to have fixed it. Do I run the risk of all the playlists overlapping and running simultaneously since they are on repeat? Or will each one terminate as the next one starts since they are in the same stream? I'm also curious as to why I need to do this now and didn't have to in the past. Could it be something about my video files that cause it to not run until the end?

  8. #8
    Join Date
    Dec 2007
    Posts
    21,962

    Default

    Matt,

    They won't overlap. When a playlist starts on a stream any playlist that was playing will be replaced. Not sure why it changed, maybe the live stream went on longer before.

    Richard

Similar Threads

  1. Scheduled Playlist (TV Channel) style FEASIBILITY QUESTIONS
    By mattbodman in forum Integrating Wowza into your workflow
    Replies: 1
    Last Post: 04-04-2013, 12:37 AM
  2. Problem streaming MP4 videos - Server-side Playlist
    By hacebe in forum General Forum
    Replies: 7
    Last Post: 09-13-2012, 09:26 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •