Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Прокрутка для локального flv - файла (http://www.flasher.ru/forum/showthread.php?t=161304)

VovkaMorkovka1 22.07.2011 18:21

Прокрутка для локального flv - файла
 
Здравствуйте господа. У меня есть файл лежащий на диске. Я читаю из него байты и добавляю в нетстрим. Так вот, как мне сделать seek?
Если seek делается стриму с сервера все в порядке и работает, но в случае локального файла проигрывание останавливается. Что бы это такое значило и как бороться?

VovkaMorkovka1 26.07.2011 17:19

Код AS3:

package  
{
        import fl.controls.Button;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.events.ProgressEvent;
        import flash.media.Video;
        import flash.net.NetConnection;
        import flash.net.NetStream;
        import flash.filesystem.File;
        import flash.filesystem.FileStream;
        import flash.filesystem.FileMode;
        import flash.utils.ByteArray;
 
        public class TestSeek extends Sprite
        {
                private var _video:Video
                var netStream:NetStream
                var connection:NetConnection
                public function TestSeek()
                {
                        this.addEventListener(Event.ENTER_FRAME, firstEnterframeHandler);
                }
 
                public function firstEnterframeHandler(e:Event):void {
 
                        this.removeEventListener(Event.ENTER_FRAME, firstEnterframeHandler);
                        (this["seekLeft"] as Button).addEventListener(MouseEvent.MOUSE_UP, seekLeftHandler);
                        (this["seekRight"] as Button).addEventListener(MouseEvent.MOUSE_UP, seekRightHandler);
                        _video = new Video();
                        connection = new NetConnection();
                        connection.client = this;
                        connection.connect(null);
                        netStream = new NetStream(connection);
                        netStream.client = this;
                        netStream.play(null);
                        var file:File = new File("c:/bikes.flv");
                        var f:FileStream = new FileStream();
 
                        f.addEventListener(ProgressEvent.PROGRESS, progressEventHandler);
                        f.openAsync(file, FileMode.READ);
                        _video.attachNetStream(netStream);
                        this.addChild(_video);
 
                }
 
                public function onMetaData (info:Object):void {
 
                }
 
                public function onXMPData (info:Object):void {
 
                }
 
                private function progressEventHandler(e:ProgressEvent):void
                {
                        var byteArray:ByteArray = new ByteArray();
                        (e.target as FileStream).readBytes(byteArray);
                        netStream.appendBytes(byteArray);
                }
 
                private function seekRightHandler(e:MouseEvent):void
                {
                        netStream.seek(netStream.time-3)
                }
 
                private function seekLeftHandler(e:MouseEvent):void
                {
                        netStream.seek(netStream.time+3)
                }
 
 
        }
 
}

Код. При Seek он не работает - почему?

ERrorMAKros 14.03.2012 20:16

Кто то разобрался с проблемой?

Genzo 15.03.2012 11:35

Код AS3:

netStream.seek(netStream.time-3);
netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);


ERrorMAKros 23.05.2012 00:35

Genzo, боюсь это не поможет!
Я сам давно бьюсь над этой проблемой, ...и в итоге получаю NetStatusEvent вида:
Код:

code: NetStream.Seek.Notify
level: status
seekPoint: #позиция_в_которую_совершали_seek#

и видео воспроизведение - замирает!

...на мой взгляд (теоретически) практика seeking`а буфера такова:
нужно на низком уровне высчитывать в загруженном буфере (byteArray) начало байт по seekPoint позиции и скармливать эти байты опять в appendBytes. Получается что то вроде:
Код AS3:

function getSeekData(_buffer:ByteArray, seekPoint:Number):ByteArray; // функция расчета данных из буфера;
 
var seekingBytes: ByteArray = getSeekData(_netStream + 10); // получаем байты от следующих 10 sec. от текущей позиции воспроизведения;
_netStream.appendBytes(seekingBytes);

Поправьте меня пожалуйста если я не прав.


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

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