[FFmpeg-user] Switching live streams without interruption?

DopeLabs dopelabs at dubstep.fm
Sun Oct 26 01:26:52 CEST 2014


i have the publisher/controller/loop until live all setup/automated with ffmpeg providing 4 live streams which rotate  

this allows me to have a ‘main stream’ in which the wowza server rotates content on a time based schedule. the cut between streams is very subtle.

the 2 modules im using are stream publisher and loop until live


in wowza/conf/live/Application.xml

<Module>
	<Name>ModuleStreamPublisher</Name>
	<Description>ModuleStreamPublisher</Description>
	<Class>com.wowza.wms.plugin.collection.module.ModuleStreamPublisher</Class>
</Module>
<Module>
	<Name>ModuleLoopUntilLive</Name>
	<Description>ModuleLoopUntilLive</Description>
	<Class>com.wowza.wms.plugin.collection.module.ModuleLoopUntilLive</Class>
</Module>



<Property>
	<Name>streamPublisherSmilFile</Name>
	<Value>streamschedule.smil</Value>
</Property>
<!-- This property is the name of the dj stream or streams that will be published to your application. -->
<Property>
	<Name>loopUntilLiveStream</Name>
	<Value>djstream</Value>
</Property>
<!-- This property is the name of the server-side stream or streams that the live stream(s) will be inserted into. -->
<Property>
	<Name>loopUntilLiveOutStream</Name>
	<Value>dubstepfm</Value>
</Property>
<!--  Reload the entire stream playlist when switching back to the filler video. -->
<Property>
	<Name>loopUntilLiveReloadEntirePlaylist</Name>
	<Value>true</Value>
</Property>
<!--  Handle MediaCasters properly by only switching the stream when the MediaCaster is ready. -->
<Property>
	<Name>loopUntilLiveHandleMediaCasters</Name>
	<Value>true</Value>
</Property>


in wowza/content/streamschedule.smil

<smil>
<head>
</head>
<body>
<stream name=“dubstepfm"></stream>
<playlist name=“audioviz" playOnStream=“dubstepfm" repeat="true" scheduled="2014-01-01 12:59:59">
	<video src="spectrum1.stream" start="-2" length="86400"/>
	<video src="spectrum2.stream" start="-2" length="86400"/>
	<video src="wavesline.stream" start="-2" length="86400"/>
	<video src="wavespoint.stream" start="-2" length="86400"/>
</playlist>
</body>
</smil>


in wowza/content/wavespoint.stream
udp://127.0.0.1:10040

in wowza/content/wavesline.stream
udp://127.0.0.1:10030

in wowza/content/spectrum2.stream
udp://127.0.0.1:10020

in wowza/content/spectrum1.stream
udp://127.0.0.1:10010


and finally the ffmpeg instances that create the audio viz


ffmpeg -i http://stream.dubstep.fm:5000 -filter_complex showwaves=s=1280x720:mode=point,drawtext=fontfile=d3.ttf:fontsize=28:fontcolor=white:textfile=dsfm.tv.txt:y=10:x=10 -c:v libx264 -b:v 3000k -pix_fmt yuv420p -c:a copy -preset ultrafast -bsf h264_mp4toannexb -f mpegts udp://127.0.0.1:10040?pkt_size=1316

ffmpeg -i http://stream.dubstep.fm:5000 -filter_complex showwaves=s=1280x720:mode=line,drawtext=fontfile=/d3.ttf:fontsize=28:fontcolor=white:textfile=dsfm.tv.txt:y=10:x=10 -c:v libx264 -preset ultrafast -b:v 3000k -pix_fmt yuv420p -c:a copy -bsf h264_mp4toannexb -f mpegts udp://127.0.0.1:10030?pkt_size=1316

ffmpeg -i http://stream.dubstep.fm:5000 -filter_complex showspectrum=mode=separate:s=1280x720,drawtext=fontfile=d3.ttf:fontsize=28:fontcolor=white:textfile=dsfm.tv.txt:y=10:x=10 -c:v libx264 -b:v 3000k -pix_fmt yuv420p -c:a copy -preset ultrafast -bsf h264_mp4toannexb -f mpegts udp://127.0.0.1:10020?pkt_size=1316

ffmpeg -i http://stream.dubstep.fm:5000 -filter_complex showspectrum=s=1280x720,drawtext=fontfile=d3.ttf:fontsize=28:fontcolor=white:textfile=dsfm.tv.txt:y=10:x=10 -c:v libx264 -preset ultrafast -b:v 3000k -pix_fmt yuv420p -c:a copy -bsf h264_mp4toannexb -f mpegts udp://127.0.0.1:10010?pkt_size=1316


to sum it all up im generating 2 spectrograms and 2 waveforms using the audio from a shoutcast server. each one plays for 24 hours before switching to the next one in the list. if a stream is published with the name djstream, it will immediately switch to that content… once djstream is finished it goes back to the schedule again, rotating once every 24 hours to the next stream… the single

i believe the app type has to be ‘live’ for most of this stuff to work, and i dont think you can switch to a stream published to a different app.


results -> http://dsfm.tv

ok enough wowza on the ffmpeg list.. let me know if you have any q’s, etc

cheers!

> On Oct 25, 2014, at 1:54 PM, Felix E. Klee <felix.klee at inka.de> wrote:
> 
> Thanks Luke! Hm, I thought it was standard feature. But being not, I
> guess I'll first look at Wowza which seems to be scriptable with
> ActionScript. Fortunately, I've used ActionScript before: Many years
> ago, I wrote a streaming video player, based on AMS.
> 
> Anyhow, there must be a smooth solution.  l just can't believe that
> it's not possible to run something akin to a TV station on the
> Internet.
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user



More information about the ffmpeg-user mailing list