NetStream Flash AS3 - видео прерывается, без указания причины - PullRequest
0 голосов
/ 31 марта 2011

Я почти весь день искал этот ответ, но нашел больше вопросов, чем ответов.

У меня полноэкранное флеш-приложение .exe, которое загружает видеофайлы (и многое другое) через внешний источник. Все связывается хорошо, за исключением того, что, когда видео воспроизводится, оно часто отключается и просто останавливается. Где он перестает играть, это случайно. Иногда он меньше 2 секунд, иногда он будет длиться 30 секунд, но он никогда не делал полных 58 секунд видео.

Я отследил загруженные байты до общего количества, и они совпадают (это файл с локальной ссылкой, без сети).

Вот код. Если есть лучший способ сделать это (не включающий занятия), пожалуйста, помогите.

    function loadCaseVideo(sourceVideo:String):void {
//sourceVideo = reference link from XML data
    if(!videoLoadedAlready){
        var videoLoadedAlready:Boolean;
    }
    NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
    var mNetConnection:NetConnection=new NetConnection();
    mNetConnection.connect(null);
    var mNetStream = new NetStream(mNetConnection);
    var video = new Video();
    video.width = 728;
    video.height = 522;
    video.y = 0;
    video.x = 0;

    video.attachNetStream(mNetStream);
    videoHolder.videoInner.addChild(video);

    mNetStream.client=new Object();
    mNetStream.bufferTime=60;
    mNetStream.play(sourceVideo);       
    mNetStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStreamStatusEvent);

    function onNetStreamStatusEvent(event:NetStatusEvent):void 
    {
        trace(event.info.code);
            if (event.info.code == "NetStream.Play.Start") 
            {
                //trace("NetStream.Play.Start");
                //trace(mNetStream.bytesLoaded +", " + mNetStream.bytesTotal);
            }
            if (event.info.code == "NetStream.Play.StreamNotFound") 
            {
                    //trace("Video Not Found");     
            }   
            if (event.info.code == "NetStream.Buffer.Flush")
            {
//I saw this being called so I ran a trace on it, these two are equal, meaning fully loaded?
                trace('loaded: '+ mNetStream.bytesLoaded +", total: " + mNetStream.bytesTotal);
            }
    }

    function onMetaData(metadata:Object):void
    {
    }




 }

1 Ответ

2 голосов
/ 31 марта 2011

Я смог решить эту проблему следующим образом:

  1. Удаление всего обратно
  2. Добавление объекта FLVPlayback в мой мувиклип (который содержал макет)

вызов этой функции, когда временная шкала достигла этого кадра:

function loadCaseVideo(sourceVideo:String):void {
    videoHolder.videoPlayer.width = 728;
    videoHolder.videoPlayer.height = 522;
    videoHolder.videoPlayer.x = 0;
    videoHolder.videoPlayer.y = 0;
    videoHolder.videoPlayer.fullScreenTakeOver = false;
    videoHolder.videoPlayer.scaleMode = "exactFit";
    videoHolder.videoPlayer.source = sourceVideo;
 }

Когда НЕ СДЕЛАНО С ПОТОКОМ ВЕБ-САЙТА, ​​казалось, что это лучший способ сделать это.Сначала я попытался использовать этот компонент, но в то время я также решал, почему не работает f4v - потому что я был в более старой версии Flash.После того, как я использовал CS5, компонент работал для меня, как и ожидалось, с f4v.

  • Только для рабочего стола
  • Динамические источники в порядке
  • Если ваше приложение полноэкранное, убедитесь, чтоВы установили fullScreenTakeOver в false или видео будет полноэкранным в вашем приложении.
...