Я пытаюсь воспроизвести видео на планшете Android с помощью stageVideo, но каждый раз, когда я нажимаю кнопку воспроизведения и добавляю видео на сцену, приложение дырки мерцает, а затем видео добавляется на сцену.Затем видео начинается с пикселизации.Затем он уходит и начинает играть правильно с несколькими прыжками.Мне интересно, что это за случай?Есть ли лучший способ загрузить видео.Это также может произойти при использовании видеообъекта в flex.Видео хранится локально в файле: /// mnt / sdcardТип видео H.264Спасибо за вашу помощь!Если я пропустил что-то, что вам нужно знать, пожалуйста, прокомментируйте, и я отредактирую свой вопрос.
Вот вид для видео.(я использую мобильное приложение, основанное на просмотре)
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="stageVidPage" backKeyPressed="0" xmlns:mx="library://ns.adobe.com/flex/mx" backgroundAlpha="0" alpha="1">
<fx:Script>
<![CDATA[
import ios.iOSStageVideo;
import mx.core.UIComponent;
import mx.events.FlexEvent;
protected function backClick(event:MouseEvent):void
{
navigator.pushView(SliderAppHomeView);
}
protected function playVideo(event:MouseEvent):void
{
var path:String = new String(new File("file:///mnt/sdcard/Movies/Video_test_11.mp4").url);
var vid:iOSStageVideo = new iOSStageVideo( path , 1280 , 720 );
vid.addEventListener('videoDone' , videoStop);
var container:UIComponent = new UIComponent();
container.width = stage.stageWidth;
container.height = stage.stageHeight;
addElement( container );
container.addChild( vid );
}
private function videoStop(e:Event):void {
//vid.stopVideo();
//container.removeChild( vid );
//removeElement( container );
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:actionContent>
<s:Button click="backClick(event)" label="Back"/>
</s:actionContent>
<s:Button left="10" bottom="10" label="Play" alpha="1" click="playVideo(event)"/>
</s:View>
Вот класс As, который я нашел в Интернете, чтобы помочь воспроизвести видео (на самом деле не использую его много, и, поскольку оно дает некоторые ошибки, когда видеозаканчивается, мне нужно будет переписать его. Я закомментировал эти части)
package ios
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.events.StageVideoAvailabilityEvent;
import flash.events.StageVideoEvent;
import flash.geom.Rectangle;
import flash.media.StageVideo;
import flash.media.StageVideoAvailability;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
[Bindable]
public class iOSStageVideo extends Sprite
{
private var videoPath:String;
private var videoWidth:Number;
private var videoHeight:Number;
private var _sv:StageVideo;
private var _vd:Video;
private var _obj:Object;
private var _ns:NetStream;
public function iOSStageVideo( path:String , w:Number , h:Number ){
videoPath = path;
videoWidth = w;
videoHeight = h;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
//stage is ready
private function onAddedToStage(e:Event):void{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var nc:NetConnection = new NetConnection();
nc.connect(null);
_ns = new NetStream(nc);
_obj = new Object();
_ns.client = _obj; _ns.bufferTime = 2;
_ns.client = _obj;
_obj.onMetaData = MetaData;
_sv = stage.stageVideos[0];
_sv.viewPort = new Rectangle(0, 0, videoWidth , videoHeight );
_sv.attachNetStream(_ns);
playVideo();
}
//video is ready, play it
//public, can be called externally
public function playVideo():void{
_ns.play( videoPath );
_ns.addEventListener(NetStatusEvent.NET_STATUS, videoStatus);
}
//required metadata for stagevideo, even if not used
private function MetaData(info:Object):void{ }
//get video status
private function videoStatus(e:NetStatusEvent):void{
switch(e.info.code){
case "NetStream.Play.StreamNotFound":
//do something
break;
case "NetStream.Play.Start":
//do something
break
case "NetStream.Play.Stop":
stopVideo();
break;
case "NetStream.Buffer.Empty":
//do something
break;
case "NetStream.Buffer.Full":
//do something
break;
case "NetStream.Buffer.Flush":
//do something
break;
}
}
//stop and clear the video
//public, can be called externally
public function stopVideo():void{
_ns.close();
_ns.dispose();
dispatchEvent( new Event('videoDone', true ) );
}
}
}
Видео находится на планшете в локальной файловой системе.Спасибо за любую помощь!