Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   NetStream.seek & appendBytes (http://www.flasher.ru/forum/showthread.php?t=202952)

AlexCooper 21.08.2013 20:00

NetStream.seek & appendBytes
 
Вложений: 1
Всем доброго время суток.
Гружу локальный flv и атачу его в нетстрим через appendBytes но ни как не могу перематывать видео. Получается только воспроизвести заново. Гугл изучил и перепробовал все до китайских ссылок. Уверен кто-то из Вас работал или хотя бы понимает в чем проблема. Привожу код и видеоролик во вложении для хороших людей которые хотят помочь.
Код AS3:

package  {
 
        import flash.display.Sprite;
        import flash.net.URLLoader;
        import flash.net.URLLoaderDataFormat;
        import flash.net.URLRequest;
        import flash.events.Event;
        import flash.display.Loader;
        import flash.utils.ByteArray;
        import flash.media.Video;
        import flash.net.NetConnection;
        import flash.net.NetStream;
        import flash.events.NetStatusEvent;
        import flash.events.IOErrorEvent;
        import flash.events.SecurityErrorEvent;
        import flash.net.NetStreamAppendBytesAction;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
 
 
                public function Main() {
 
 
                        var _loader:URLLoader = new URLLoader();
                                _loader.dataFormat = URLLoaderDataFormat.BINARY;
                                _loader.addEventListener(Event.COMPLETE, onResultDownload);
                                _loader.load(new URLRequest("c:\\1.flv"));
 
                        stage.addEventListener(MouseEvent.MOUSE_DOWN, click );
                }
 
                private function click(eve:Event):void {
                        ns.seek(3);
                }
 
                private var ns:NetStream;
                private var _client: Object = new Object();
                private var _bytes:ByteArray;
                private function onResultDownload(event:Event):void {
 
                        var video:Video = new Video();
                                addChild(video);
 
                        var nc:NetConnection = new NetConnection();
                                nc.connect(null);
 
                        ns = new NetStream(nc);
                        ns.client = _client;
 
                        _client.onMetaData = metaDataHandler;
 
                        video.attachNetStream(ns);
 
                        ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
                        ns.addEventListener(IOErrorEvent.IO_ERROR, function(event:Event) { trace(event) } );
                        ns.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(event:Event) { trace(event) } );
 
                        _bytes = event.target.data;
 
                        ns.play(null);
 
                        addChild(video);
 
                        ns.appendBytesAction(NetStreamAppendBytesAction.END_SEQUENCE);
                        ns.appendBytes(_bytes);
 
                }
 
                private function metaDataHandler(info:Object):void
                {
                        for ( var i in info) {
                                trace(i+" >> "+info[i]);
                        }
                }
 
                private function netStatusHandler(e:NetStatusEvent):void
                {
 
                        trace(e.info.code);
                        switch (e.info.code)
                        {
                case "NetStream.Seek.InvalidTime" :
 
                    break;
                                  case "NetStream.Play.Stop" :
 
                    break;
                                case "NetStream.Seek.Notify":
 
                                        ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
                                        ns.appendBytes(_bytes);
 
 
                                        break;
            }
                }
 
        }
 
}


AlexCooper 21.08.2013 20:36

Цитата:

Сообщение от okouser (Сообщение 1144392)
У appendBytes, конечно, есть масса подводных камней.
Но к чему флаг RESET_BEGIN при перемотке?! Вот здесь и осуществляется перемотка в начало.
Используйте флаг RESET_SEEK.

Если использовать другую структуру тогда видео просто "зависает" а скорей всего просто останавливается

AlexCooper 21.08.2013 20:47

Дело в том что я пытался и так поступить, но видео к примеру данное не давало метаданный keyframes. То-есть уже трабла еще до сего начатия.

Добавлено через 1 минуту
Я уже готов резать видео на куски, задача вообще была не тривиальная и в такой ступор ввела, аж дико если честно.

Добавлено через 2 минуты
+ по задаче мне нужно перемотка с рандомного места (то-есть оперделять место совсем не важно). Мне хоть как то объясните, а лучше покажите как перемотать и начать воспроизведение с любого места кроме начала при скармливании appendBytes

AlexCooper 21.08.2013 20:54

Цитата:

Сообщение от okouser (Сообщение 1144400)
А не всегда их можно таким образом получить.
Поэтому для надежности нужно распарсить исходный байтовый массив на flv-теги.

Это как мне кажеться не имеет смысла для решения данной задачи, мне нужно просто воспроизвести с случайного места.

Добавлено через 40 секунд
Цитата:

Сообщение от okouser (Сообщение 1144400)
Куда бы вы не перематывали, вам нужно определять место (в исходном массиве), куда вы перемотали.
Вот тут и нужно ручной парсинг тегов, чтобы найти тэг с временной меткой, наиболее близкой к перемотанному времени.

научите

Akopalipsis 21.08.2013 21:11

я уверен, что в скором будущем столкнусь с подобными проблемами и чтобы не создавать похожую, просто вежливо попрошу здесь - если кто то знает хорошие ссылки, на создание хорошего плеера ( видео ), поделитесь пожалуйста! ( чтобы там и перемотка была и все ). Может статьи какие то.

Vasya Pupkin 21.08.2013 23:55

А зачем грузить из байтмассива если можно тупо просто грузить. Если файл локальный он быстро загрузится и как бы будет доступна перемотка по всему фильму. А если из инета надо грузить видео так там я так понимаю без серверных приблуд типа FMS или http dinamic hren' не обойтись .

AlexCooper 22.08.2013 13:10

Цитата:

Сообщение от Vasya Pupkin (Сообщение 1144425)
А зачем грузить из байтмассива если можно тупо просто грузить. Если файл локальный он быстро загрузится и как бы будет доступна перемотка по всему фильму. А если из инета надо грузить видео так там я так понимаю без серверных приблуд типа FMS или http dinamic hren' не обойтись .

Тут несколько не так. Задача стоит в том что мы грузим удалённый видеофайл через URLLoader байтарей, потом его шифруем ( добавляем пару байт в начало файла ( защита лёгкая но не даст воспроизводить файл из другого плеера )) после чего полученный зашифрованный байтеррей сохраняем на устройство пользователя с названием file.dat. И теперь загруженное видео доступно для просмотра только через специально декодируемый плеер. Все остальные будут ругаться на некорректный файл.

Добавлено через 5 минут
Подкиньте ссылку на побайтовый парсинг видео файлов

AlexCooper 22.08.2013 14:03

Нашел порезчик флв https://code.google.com/p/flvslicer/ который указываешь с какой милисек по какую обрезать. Но чет он не хочет работать как надо. Буду дальше юзать.


Часовой пояс GMT +4, время: 14:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.