![]() |
|
||||||||||
|
|||||
|
Hi all,
а можно ли каким-то образом при использовании компонента FLVPlayback отслеживать байтовую позицию для бегунка. То есть как при перетаскивании бегунка отследить событие его отпускания и при этом получить его байтовую позицию в FLV файле? Пытаюсь наладить стримминг видео с помощью nginx http://sysoev.ru/nginx/docs/http/ngx...lv_module.html. Модуль ngx_http_flv_module делает специальную обработку передаваемых файлов: при передаче файла, начиная со смещения, указаного в аргументах запроса "start=XXX", добавляет FLV-заголовок перед запрашиваемым файлом.
__________________
Plant a tree B4 UR burried undr 1. |
|
|||||
|
Modus ponens
|
Не, никак это не узнать, ну, разве что примерно посчитать, но точно - не возможно. Т.е. можно примерно представить сколько байтов нужно на отрисовку одного кадра, но, опять же такой параметр в SWF не передается, т.е. нужно будет его передать вместе с метадатой, например. Ну и уже просто исходя из позиции, где ткнули, считать сколько это кадров * байтов на кадр. Только если есть кью-поинты - это никак не получится принять в рассчет, т.как заранее вы никак не сможете узнать о их наличии/отсутствии.
__________________
Hell is the possibility of sanity |
|
|||||
|
А как же тогда реализована такая фича тут:http://www.rich-media-project.com/ph...hp-flv-player/ ?
Там есть пхп-скрипт, которому передаётся такой же параметр position=xxxxxx Я проследила за запросами от флэшки. Вот тут тоже кое-что пишут: http://www.flashcomguru.com/index.cf...a-PHP-take-two Но там реализовано через NetStream кажется. Ну ладно, пусть хоть примерно это будет считаться. Как узнать весь размер файлика и позицию. Подскажите плиз как быть если априори неизвестно есть кьюпойнты или нет.
__________________
Plant a tree B4 UR burried undr 1. |
|
|||||
|
Мне кажется стандартный FLVPlayback не подходит под эти задачи.
В этом и проблема стандартных компонентов. Они решают стандартные задачи. Хотя, если потеребить метадату, может быть и можно будет его прикрутить. FLVPlayback вещает событие metadata, в котором есть всякие параметры, типа: Цитата:
Должно быть что-то типа такого: bytes=seconds*(audiodatarate+videodatarate); |
|
|||||
|
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. Но где-то проблема. У кого какие мысли? Помогите плиз. я в видео, особенно потоковом полный нуб. Плиз. ![]() ![]()
__________________
Plant a tree B4 UR burried undr 1. Последний раз редактировалось Ulya; 01.08.2008 в 19:29. |
|
|||||
|
кажется проблема в том, что передавать нужно не сам позишн, а ближайший к нему кейфрейм.
В связи с этим еще вопрос: Как через FLVPlayBack получить список кейфреймов. Через событие metadata никак.
__________________
Plant a tree B4 UR burried undr 1. |
|
|||||
|
Make me unsee this!
Цитата:
|
|
|||||
|
crazyone,
nginx выдает валидный файл только, если передаваемый ему параметр start является keyframe'ом. Когда я считаю приблизительно байтовую позицию плэйхэда- это естественно не ключ. кадр.=>нужно найти ближайший ключевой кадр.=>возникает вопрос, а как же получить список кадров, с помощью каких функций, событие метадата не даёт этот список увы. wvxvw, вот всё, что дает метадата мне:
__________________
Plant a tree B4 UR burried undr 1. |
|
|||||
|
Мне кажется, что у вас вес одной секунды считается, как audiodatarate+videodatarate байт(килобайт?). Делите это на framerate, получаете вес одного кадра. Делаете округление байтовой позиции по этому значению и передаете скрипту округленное значение.
Если это не поможет, тогда я не знаю =) UPD Поищите по поводу flvmdi. Этот софт позволяет добавлять flv-шкам в событие onMetaData массивы с позициями кейфреймов. Именно так все реализовано на флешкомгуру, куда вы давали ссылку. Последний раз редактировалось crazyone; 04.08.2008 в 18:39. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|