Как воспроизводить видео на планшете Android с Adobe Air Mobile без их изменчивости? - PullRequest
4 голосов
/ 27 января 2012

Я пытаюсь создать приложение, которое будет воспроизводить видео на планшете Android. Планшет-трансформер работает под управлением Android версии 4.0.3. Я использую Flash Builder 4.6 с Flex 4.6.0. Каждый раз, когда я добавляю видео на планшет, оно очень прерывистое и нервное. Если я пытаюсь использовать любое видео, не являющееся flv, то оно всегда отправляется на задний план позади всего другого контента и больше не остается в контейнере, в который оно помещено. Я создал скользящие контейнеры, которые можно перемещать влево или вправо, и видео перемещается вместе с ними, и оно работает с файлами flv, но не с любыми другими форматами файлов (такими как H.264 и f4v), оно остается на стадии x = 0 и y = 0 не группа x = 0 и y = 0 и не двигается. Когда воспроизводится видео, всегда мигает экран, а затем воспроизводится видео. Flv файлы всегда худшие для воспроизведения. Извините, я не пытаюсь бродить, я просто пытаюсь получить импортированную информацию
Вот код для группы воспроизведения видео, которую я создал.

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" width="960" height="533" xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
    <![CDATA[
        import mx.events.EffectEvent;
        [Bindable] public var imgSource:String = new String(); 
        [Bindable] public var isThereAVideo:Boolean = new Boolean()
        public var movieSource:String = new String();
        [Bindable] protected var bytes:uint = new uint();
        [Bindable] protected var bytesTotel:uint = new uint();

        protected function playMovieClick(event:MouseEvent):void
        {
            // TODO Auto-generated method stub
            trace ("you clicked")
            var nc:NetConnection = new NetConnection();
            nc.connect(null);
            var ns:NetStream = new NetStream(nc);
            ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
            ns.client={ onMetaData:function(obj:Object):void{} }
            ns.play(movieSource);
            var myVideo:Video = new Video();
            myVideo.width = 960;
            myVideo.height = 533;
            myVideo.attachNetStream(ns);
            uic.addChild(myVideo);
            ns.addEventListener(NetStatusEvent.NET_STATUS, netstatusHandler);
            quickfade.target = uic;
            quickfade.alphaFrom = 0;
            quickfade.alphaTo = 1;
            quickfade.play();
            ns.soundTransform.volume = 0;


        }


        public function netstatusHandler(evt:NetStatusEvent):void {
            if (evt.info.code == "NetStream.Play.Stop") {
                quickfade.target = uic;
                quickfade.alphaTo = 0;
                quickfade.alphaFrom = 1;
                quickfade.play();
                quickfade.addEventListener(EffectEvent.EFFECT_END, fadeEffectEnd);
            }
        }

        private function fadeEffectEnd(event:EffectEvent):void {
            trace("effect ending");
            uic.visible = false;
            trace("....effect ending");
            quickfade.removeEventListener(EffectEvent.EFFECT_END, fadeEffectEnd);
        }

        public function asyncErrorHandler(event:AsyncErrorEvent):void {
            trace(event.text);
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <s:Fade id="quickfade" duration="1500" />
</fx:Declarations>
<s:Image width="100%" height="100%" source="{imgSource}"/>
<s:Image width="75" height="75" bottom="5" right="5" source="img/videoIcon.png" click="playMovieClick(event)" visible="{isThereAVideo}" />
<mx:UIComponent x="0" y="0" id="uic" width="960" height="533" alpha="0" />
<s:Label x="10" y="508" text="v0.1"/>

Так вот мои вопросы вопросы
Есть ли лучший способ воспроизвести это видео, чтобы оно было более плавным? Я слышал о stage.stagevideo, но если я отслеживаю stage.stagevideo.length, я всегда получаю 0?
Почему видео теряет контейнер. Может ли это быть как-то связано с настройкой местоположения контейнера с использованием ширины сцены?
Есть ли способ буферизовать видео?

1 Ответ

1 голос
/ 04 августа 2015

Лучший способ воспроизвести видео с использованием родного плеера вместо гибкого видеоплеера.Тем не менее, вам нужно играть внутри flex, тогда вы можете попробовать Stage Video (http://www.adobe.com/devnet/flashplayer/articles/stage_video.html), потому что flex на мобильном телефоне пропускает кадр видео.

...