diff --git a/test/rtmp-publisher/RtmpPlayerLight.mxml b/test/rtmp-publisher/RtmpPlayerLight.mxml index 1e938bd..7284de8 100644 --- a/test/rtmp-publisher/RtmpPlayerLight.mxml +++ b/test/rtmp-publisher/RtmpPlayerLight.mxml @@ -10,9 +10,14 @@ import mx.core.FlexGlobals; import flash.display.StageDisplayState; import mx.managers.SystemManager; + import org.osmf.events.MediaPlayerStateChangeEvent; + import org.osmf.events.TimeEvent; + import org.osmf.media.MediaPlayerState; private var streamer:String; private var file:String; + private var videoEventsDisabled:Boolean; + private var previousVideoTime:Number; private function fullscreenListener(event:MouseEvent):void { try { @@ -29,6 +34,44 @@ } } + private function resetVideo():void { + videoEventsDisabled = true; + + try { + videoDisplay.source = ""; + } catch (any:*) {} + + setTimeout(resetVideoSource, 5000); + } + + private function resetVideoSource():void { + videoEventsDisabled = false; + previousVideoTime = NaN; + videoDisplay.source = streamer + "/" + file; + } + + protected function stateChangeListener(event:MediaPlayerStateChangeEvent):void { + if (videoEventsDisabled) { + return; + } + + if (event.state == MediaPlayerState.PLAYBACK_ERROR) { + resetVideo(); + } + } + + protected function timeChangeListener(event:TimeEvent):void { + if (videoEventsDisabled) { + return; + } + + if (isNaN(event.time) && !isNaN(previousVideoTime)) { + resetVideo(); + } else { + previousVideoTime = event.time; + } + } + private function init():void { videoDisplay.mx_internal::videoPlayer.bufferTime = 1; @@ -45,8 +88,10 @@ } videoDisplay.addEventListener(MouseEvent.DOUBLE_CLICK, fullscreenListener); - videoDisplay.source = streamer + "/" + file; - videoDisplay.play(); + videoDisplay.addEventListener("MediaPlayerStateChange", stateChangeListener); + videoDisplay.addEventListener("currentTimeChange", timeChangeListener); + + resetVideoSource(); } ]]> diff --git a/test/rtmp-publisher/RtmpPlayerLight.swf b/test/rtmp-publisher/RtmpPlayerLight.swf index ebe448b..e01a1c1 100644 Binary files a/test/rtmp-publisher/RtmpPlayerLight.swf and b/test/rtmp-publisher/RtmpPlayerLight.swf differ