Просмотр полной версии : Отобразить первый кадр flv
Division
09.12.2008, 20:06
Поиском пользовался, вроде обсуждалось, но ответа так и не нашёл.
Нужно отобразить первый кадр видео.
Делаю так:
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
_root.video.attachVideo(ns);
trace(_root.video);
ns.play("../data/video/"+_root["filename"], 0, 0);
ns.seek(1);
ns.pause();
Работает не совсем корректно, время от времени ничего не отображается.
Где можно почитать как это правильно делается?
PS с видео до этого не работал
А может вернее извлечь из видео кадр и его как фотку грузить.
Division
09.12.2008, 20:32
scarbo, покажешь пример с реализацией?
Можно долго рассуждать что вернее (: Мне бы или рабочий код, или ссылку на мануал...
Пример(если правильно понял)видео (http://www.shalovnikov.ru/demo_rus.html)
А код,что такого-то - грузишь фотку,при щелчке на плэй,запускаешь видео...?
Или тебе нужен код для видео плеера,отпишись по точнее плиз
Division
10.12.2008, 11:16
Ну я же в первом посте написал (: Мне нужно имея FLV файл отобразить его первый кадр. Я не хочу делать отдельные картинки, так как видео загружается пользователем в админке, и ему будет лень делать отдельные картинки для предпросмотра.
UPD: Если кто знает, поделитесь плиз. Проект сегодня сдавать, не хотелось бы какой-то изврат придумывать.
chingachgoog
10.12.2008, 15:14
У видео НЕТ КАДРОВ в понятии флеша. Есть время. Но флеш может переходить по времени с точностью до секунды, а при частоте видео 25-30, это может быть неприемлемо. Лучший выход - отредактировать видео, чтобы первые секунды стояла статичная картинка - тогда всегда на нее попадешь.
Division
10.12.2008, 15:22
тогда всегда на нее попадешь
Это я как раз и хочу узнать. Как мне туда попасть? (: Пускай, не на первый кадр, а на первую секунду, без разницы. Лишь бы показать какую-то картинку из видео. Код из первого поста работает не совсем корректно. Как это сделать?
chingachgoog
10.12.2008, 15:50
Это я как раз и хочу узнать. Как мне туда попасть? (: Пускай, не на первый кадр, а на первую секунду, без разницы. Лишь бы показать какую-то картинку из видео. Код из первого поста работает не совсем корректно. Как это сделать?
Так уже у вас написано как:
seek(numberOfSeconds:Number)
По-другому никак. Для большей надежности можно задать время буфера больше секунды (по умолчанию 0.1 сек):
setBufferTime(numberOfSeconds:Number)
Division
10.12.2008, 16:24
chingachgoog, спасибо.
Но как-то всё это дело тормозит. У меня будет несколько превьюшек одновременно на странице(думаю до 12). И когда все они грузятся, браузер сильно тормозит. Отсюда возникает вопрос, делают ли так вообще? Может, если много провьюшек, правильней было бы сделать, как говорил scarbo, то есть просить юзера в админке грузить картинку для предпросмотра и отоображать её?
chingachgoog
11.12.2008, 13:57
Не знаю как делают, но я бы попробывал так, если тормозит: грузил бы в один поток видео ПО-ОЧЕРЕДИ. Как только первая секунда загружена и отображена - снимаем скриншот и вешаем битмапу. Далее грузим в тот же поток следующее видео...
У видео НЕТ КАДРОВ в понятии флеша. Есть время. Но флеш может переходить по времени с точностью до секунды, а при частоте видео 25-30, это может быть неприемлемо.У флв есть ключевые кадры. Все остальные кадры строятся за счет изменения ключевого кадра. Поэтому, чтобы отобразить произвольный кадр, надо перейти на кейфрейм перед ним и проиграть все кадры до нужного.
А переход действительно осуществляется по времени, но опять же согласно времени ключевого кадра. Их соотношения можно посмотреть в метадате.
chingachgoog
11.12.2008, 17:24
А переход действительно осуществляется по времени, но опять же согласно времени ключевого кадра. Их соотношения можно посмотреть в метадате.
А при чем тут ключевые кадры видео? (понятно, что в видео есть ключевые кадры - но там это совсем другое, нежели во флеше) Мне кажется, что дае попади мы между ключевыми кадрами - мы будем видеть картинку целиком.
Да и какая разница, что мы будем знать время нужного ключевого кадра? Все упирается в минимальное время, на которое разрешает перейти флеш - а это целая секунда! Это очень много - когда за полсекунды сменяется до 15 кадров (не путать с кейфреймами).
Мне кажется, что дае попади мы между ключевыми кадрами - мы будем видеть картинку целиком.
Это чтобы не казалось
Each frame in a screen video sequence is formatted as a series of blocks. These blocks form a grid over the image. In a keyframe, every block is sent. In an interframe, one or more blocks contain no data, which indicates that the bitmap region represented by that block was not changed since the last keyframe.Это значит, что если есть массив ключевых кадров [1,10,25,40], то сразу попасть на 24 кадр нельзя. Можно перейти на 10, из которого сформируется 11, потом 12, 13, 14 ... 24.
chingachgoog
11.12.2008, 18:34
Это понятно - такое иногда можно видеть на некоторых проигрывателях видео, после переноса бегунка: видна только изменяющаяся часть картинки, с последнего кейфрейма.
Но как это соотноситься с видео в ФП и кодеках для flv, я не знаю: чаще ведь, последний кейфрейм подцепляется автоматом и мы об этом безобразии даже не думаем.
Для исследования вопроса помог бы эксперимент. Будет время - займусь, проверю.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.