Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.01.2013, 18:31
digitorum вне форума Посмотреть профиль Отправить личное сообщение для digitorum Найти все сообщения от digitorum
  № 1  
Ответить с цитированием
digitorum

Регистрация: Nov 2012
Сообщений: 4
По умолчанию Проблема с перемоткой видео и переходами к ключевым кадрам / cuePoint'ам

Доброго времени суток!

Уже который час бьюсь с проблемой, не могу решить, решил наконец посоветоваться с гуру.

Есть самописный видео плеер, нужно сделать так, чтобы можно было перематывать видео на "незабуферизованную" часть.

Как я понял, перемотать видео к конкретной секунде можно только если видео стримится по rtmp://, либо если мы используем FLVPlayback (что не есть правда, или я совсем криворукий (оба варианта звучат не радужно) )

Собственно мой пост содержит 2 вопроса (выделил их подчеркиванием)

Так вот. Что я пытаюсь сделать:
* из исходного видео получить flv
* заполнить его cuePoints
* организовать навигацию по ним с помощью FLVPlayback или NETStream

"Фашизм" с точки зрения размера файла, но "вещание" уж очень не хочется организовывать.

Набросал простой батник:
Код AS3:
ffmpeg -i s_input.mp4 -ar 22050 -b:a 32k -b:v 700k -f flv -s 320x240 -r 25 -y i_ffmpeg.flv
copy i_ffmpeg.flv i_flvtool2.flv
flvtool2 -AUtP i_flvtool2.xml i_flvtool2.flv
В i_flvtool2.xml указал 2 точки
Код AS3:
<tags>
    <metatag event="onCuePoint" overwrite="true">
        <name>Cue Point 1</name>
        <timestamp>22000</timestamp>
        <parameters>
            <textinfo>This is some text 1</textinfo>
            <thumb></thumb>
        </parameters>
        <type>navigation</type>
    </metatag>
    <metatag event="onCuePoint" overwrite="true">
        <name>Cue Point 2</name>
        <timestamp>44000</timestamp>
        <parameters>
            <textinfo>This is some text 2</textinfo>
            <thumb></thumb>
        </parameters>
        <type>navigation</type>
    </metatag>
</tags>
oNMetData отдает то, что я хочу видеть:
Код AS3:
Metadata:
	audiosize -> 3001709
	duration -> 673.12
	audiosamplesize -> 16
	lasttimestamp -> 673.08
	datasize -> 61806104
	videosize -> 58777869
	videocodecid -> 2
	metadatadate -> Thu Jan 24 16:59:42 GMT+0400 2013
	metadatacreator -> inlet media FLVTool2 v1.0.6 - "http://www.inlet-media.de/flvtool2" target="_blank">http://www.inlet-media.de/flvtool2
	audiosamplerate -> 22000
	framerate -> 25
	lastkeyframetimestamp -> 672.68
	canSeekToEnd -> false
	hasAudio -> true
	filesize -> 61976517
	stereo -> true
	cuePoints -> ,
	hasMetadata -> true
	hasVideo -> true
	width -> 320
	audiodatarate -> 32.308325904795865
	keyframes -> [object Object]
	height -> 240
	audiocodecid -> 2
	videodatarate -> 696.413632851964
	hasCuePoints -> true
	audiodelay -> 0
	hasKeyframes -> true
CuePoints:
	"Cue Point 1" 22
	"Cue Point 2" 44
Keyframes :
	0
	1
	2
	...
	1401
	1402
То есть есть и ключевые кадры и cuePoints.

Но, например

Код AS3:
ns.seek(300);
Вместо того, чтобы бросить к ближайшему ключевому кадру, выдаст:
Код AS3:
[NetStatusEvent type="netStatus" bubbles=false cancelable=false eventPhase=2 info=[object Object]]
	level -> error
	code -> NetStream.Seek.InvalidTime
	details -> 8.64
Почему так происходит? Может я что-то не правильно делаю, или у меня возник рассинхрон с пониманием документации?

Если же использовать FLVPlayback, то он ведет себя как-то странно.

Код AS3:
var cuePount = _flvPlayback.findCuePoint("Cue Point 2");
_flvPlayback.seekToNavCuePoint(cuePount.name);
Иногда бросает на 44ю секунду (второй cuePoint), иногда нет.

Из за чего может быть такое поведение?

Буду благодарен за советы!

Старый 25.01.2013, 14:36
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 2  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Перемотать видео к куску, который еще не закачан на клиента, можно только если есть сервер, который по запросу "отдай-ка мне видео с секунды N", выдаст файл с этой секунды. Без сервера сколько бы ты ключевых точек в видео не наставил, ничего тебе не поможет. Ключевые точки только облегчают поиск конкретного тайминга и перемотку к нему.

Стримить с перемоткой умеет Flash Media server, wowza, red5. Теперь еще nginx это умеет, я слышал.
Есть еще понятие "pseudostreaming", когда с помощью пхп или модуля веб-сервера организуется система, когда при перемотке, сервер не использует rtmp, а просто на POST/GET запрос клиента "пришли мне с секунды N" отдает новый flv/mp4 файл, который создается из оригинального видео, но с конкретной секунды + стандартного заголовка flv/mp4. Так умеет, например, lighthttpd + flowplayer.

Ну, а дальше гуглите себе решение. Куча постов в блогах и на хабре на ключевые слова red5, nginx video streaming, wowza, pseudo streaming flowplayer и т.д.

При чем здесь компонент FLVPlayback к перемотке видео, я так и не понял.
__________________
мой пустой блог

Старый 25.01.2013, 14:45
digitorum вне форума Посмотреть профиль Отправить личное сообщение для digitorum Найти все сообщения от digitorum
  № 3  
Ответить с цитированием
digitorum

Регистрация: Nov 2012
Сообщений: 4
ок, спасибо.

Добавлено через 2 минуты
Ввела в заблуждение фраза из документации:
Код AS1/AS2:
Во-первых, при последовательной загрузке можно перейти только к ключевому кадру, поэтому переход происходит к первому ближайшему ключевому кадру к заданному времени. При использовании потокового воспроизведения переход осуществляется точно в указанное время, даже если исходный FLV-файл не имеет ключевых кадров.
То есть я думал, что NetStream может начать читать со смещением, указанным в метадата (про keyframes). Значит зря я так думал =)

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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