You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.8 KiB
102 lines
2.8 KiB
5 years ago
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
|
||
|
xmlns:s="library://ns.adobe.com/flex/spark"
|
||
|
xmlns:mx="library://ns.adobe.com/flex/mx"
|
||
|
minWidth="500" minHeight="350" creationComplete="init()">
|
||
|
|
||
|
<fx:Script>
|
||
|
<![CDATA[
|
||
|
import mx.controls.Alert;
|
||
|
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 {
|
||
|
switch (stage.displayState) {
|
||
|
case StageDisplayState.FULL_SCREEN:
|
||
|
stage.displayState = StageDisplayState.NORMAL;
|
||
|
break;
|
||
|
default:
|
||
|
stage.displayState = StageDisplayState.FULL_SCREEN;
|
||
|
break;
|
||
|
}
|
||
|
} catch (err:SecurityError) {
|
||
|
Alert.show('Fullsceen error: ' + err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
|
||
|
streamer = FlexGlobals.topLevelApplication.parameters.streamer;
|
||
|
if(streamer == null) {
|
||
|
Alert.show('Missing flashvars: streamer');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
file = FlexGlobals.topLevelApplication.parameters.file;
|
||
|
if(file == null) {
|
||
|
Alert.show('Missing flashvars: file');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
videoDisplay.addEventListener(MouseEvent.DOUBLE_CLICK, fullscreenListener);
|
||
|
videoDisplay.addEventListener("MediaPlayerStateChange", stateChangeListener);
|
||
|
videoDisplay.addEventListener("currentTimeChange", timeChangeListener);
|
||
|
|
||
|
resetVideoSource();
|
||
|
}
|
||
|
]]>
|
||
|
</fx:Script>
|
||
|
<s:BorderContainer x="0" y="0" width="100%" height="100%">
|
||
|
<s:VideoDisplay doubleClickEnabled="true" width="100%" height="100%" id="videoDisplay"></s:VideoDisplay>
|
||
|
</s:BorderContainer>
|
||
|
</s:Application>
|