Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   byte position для FLV (http://www.flasher.ru/forum/showthread.php?t=114525)

Ulya 31.07.2008 20:03

byte position для FLV
 
Hi all,
а можно ли каким-то образом при использовании компонента FLVPlayback отслеживать байтовую позицию для бегунка. То есть как при перетаскивании бегунка отследить событие его отпускания и при
этом получить его байтовую позицию в FLV файле?

Пытаюсь наладить стримминг видео с помощью nginx http://sysoev.ru/nginx/docs/http/ngx...lv_module.html.
Модуль ngx_http_flv_module делает специальную обработку передаваемых файлов: при передаче файла, начиная со смещения, указаного в аргументах запроса "start=XXX", добавляет FLV-заголовок перед запрашиваемым файлом.

wvxvw 31.07.2008 20:27

Не, никак это не узнать, ну, разве что примерно посчитать, но точно - не возможно. Т.е. можно примерно представить сколько байтов нужно на отрисовку одного кадра, но, опять же такой параметр в SWF не передается, т.е. нужно будет его передать вместе с метадатой, например. Ну и уже просто исходя из позиции, где ткнули, считать сколько это кадров * байтов на кадр. Только если есть кью-поинты - это никак не получится принять в рассчет, т.как заранее вы никак не сможете узнать о их наличии/отсутствии.

Ulya 31.07.2008 20:55

А как же тогда реализована такая фича тут:http://www.rich-media-project.com/ph...hp-flv-player/ ?
Там есть пхп-скрипт, которому передаётся такой же параметр position=xxxxxx
Я проследила за запросами от флэшки.
Вот тут тоже кое-что пишут: http://www.flashcomguru.com/index.cf...a-PHP-take-two
Но там реализовано через NetStream кажется.

Ну ладно, пусть хоть примерно это будет считаться. Как узнать весь размер файлика и позицию. Подскажите плиз как быть если априори неизвестно есть кьюпойнты или нет.

crazyone 01.08.2008 14:43

Мне кажется стандартный FLVPlayback не подходит под эти задачи.
В этом и проблема стандартных компонентов. Они решают стандартные задачи.

Хотя, если потеребить метадату, может быть и можно будет его прикрутить.

FLVPlayback вещает событие metadata, в котором есть всякие параметры, типа:

Цитата:

audiodatarate A number that is the kilobytes per second of audio.

videodatarate A number that is the video data rate of the FLV file.
Запомнить их. Потом ловить событие перетягивания ползунка и переводить из секунд(?) в байты, используя аудиодатарэйт и видеодатарэйт...
Должно быть что-то типа такого:
bytes=seconds*(audiodatarate+videodatarate);

Ulya 01.08.2008 19:26

crazyone,
а я использую компонент FLV List Gallery от AFComponents. Но он сделан всё равно на основе FLVPlayBack.
Итак, вопрос с передачей байтовой позиции решила.
Код:

player.controls_mc.content.bar_mc.widget_mc.onRelease = function() {
        //widget_mc - бегунок
        delete player.controls_mc.content.bar_mc.widget_mc.onEnterFrame;
        stopDrag();
        if (_root.metadataReceived) {
                //флаг _root.metadataReceived в 1, если получены метаданные флв
                var bmcw = player.controls_mc.mask._width-player.controls_mc.content.bar_mc._x-player.controls_mc.content.volume_mc._width;
                //рассчитываем длину bar_mc (прогресс-бар)
                var phx = player.controls_mc.content.bar_mc.widget_mc._x;//play head _x
                secpos = player.metadata.duration*phx/bmcw;//position in seconds;
                trace("Pos in Sec "+secpos);
                _root.bytepos = Math.floor(secpos*player.bytesTotal/player.metadata.duration)
                player.getVideoPlayer(player.activeVideoPlayerIndex).close();//очищаем плеер
                player.load(player.contentPath+"?start="+_root.bytepos);//запрашиваем у сервера файл с нужного нам места
        }
};


В запросах к серверу видно, что файл действительно запрашивается с нужного места, например, если прокрутить видео до середины, то грузится файл меньшего размера. В это время статус: Connecting to Media. Как только файл грузится до конца, срабатывает статус Media not found. То есть файл грузится с нужной позиции. По идее gninx должен дописывать к нему заголовок так, чтобы плеер понимал, что это flv. Но где-то проблема. У кого какие мысли?
Помогите плиз. я в видео, особенно потоковом полный нуб.
Плиз.:umnik2::umnik2:

Ulya 01.08.2008 20:12

кажется проблема в том, что передавать нужно не сам позишн, а ближайший к нему кейфрейм.
В связи с этим еще вопрос:
Как через FLVPlayBack получить список кейфреймов.
Через событие metadata никак.

wvxvw 01.08.2008 22:03

Смотря чем генерился FLV, но, как правило список кифреймов есть в метадате.

crazyone 02.08.2008 04:07

Цитата:

Код:

player.controls_mc.content.bar_mc.widget_mc.onRelease

Make me unsee this!

Цитата:

У кого какие мысли?
Я бы попробовал сохранить файл, который выдаст ngnix на какой-нибудь запрос и потом попытаться бы его воспроизвести.

Ulya 04.08.2008 16:40

crazyone,
nginx выдает валидный файл только, если передаваемый ему параметр start является keyframe'ом. Когда я считаю приблизительно байтовую позицию плэйхэда- это естественно не ключ. кадр.=>нужно найти ближайший ключевой кадр.=>возникает вопрос, а как же получить список кадров, с помощью каких функций, событие метадата не даёт этот список увы.
wvxvw, вот всё, что дает метадата мне:
Код:

Encoded_With = Sorenson Squeeze
Encoded_By = Sorenson Squeeze
creationdate = Fri Aug 01 11:26:42 2008
framerate = 30
audiocodecid = 2
audiodatarate = 48
videocodecid = 2
canSeekToEnd = true
videodatarate = 364
height = 278
width = 480
duration = 901.73


crazyone 04.08.2008 18:30

Мне кажется, что у вас вес одной секунды считается, как audiodatarate+videodatarate байт(килобайт?). Делите это на framerate, получаете вес одного кадра. Делаете округление байтовой позиции по этому значению и передаете скрипту округленное значение.

Если это не поможет, тогда я не знаю =)

UPD Поищите по поводу flvmdi. Этот софт позволяет добавлять flv-шкам в событие onMetaData массивы с позициями кейфреймов.
Именно так все реализовано на флешкомгуру, куда вы давали ссылку.


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

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