digitorum.ru

Как меня найти

Профиль

icq: 4415944

Конвертируем видео в flv и расставляем контрольные точки (cuePoint).

ffmpeg, flv, flvtool2

Зачем мне нужны cuePoint'ы? Для замечательного компонента FLVPlayback. Да... Было дело... Пробовал его использовать.

Шаг первый: Конвертация видео.

Для конвертации видео в flv я использовал такую замечательную вещь как ffmpeg.

ffmpeg -i s_input.mp4 -ar 22050 -b:a 32k -b:v 700k -f flv -s 320x240 -r 25 -y i_ffmpeg.flv

 

  • -i s_input.mp4 - входной файл
  • -ar 22050 - частота звука
  • -b:a 32k - битрэйт аудио
  • -b:v 700k - битрэйт видео
  • -f flv - формат видео
  • -s 320x240 - разрешение картинки
  • -r 25 - фрэйм рэйт
  • -y - перезаписать выходной файл, если он существует
  •  i_ffmpeg.flv - выходной файл

Подробнее обо всем этом можно почитать тут.

Шаг второй: Создание контролькных точек.

Для этого тоже есть инструмент. И называется он flvtool2 (говорят, что flvtool++ или yamdi лучше, но flvtool2 был под рукой (память он жрет как сотня голодных поросят))

flvtool2 -AUt i_flvtool2.xml i_flvtool2.flv

 

  • -A - добавить тэги из файла (-t tags-file)
  • -U - updates FLV with an onMetaTag event (не могу придумать (сформулировать) дельный перевод, но вы же умные, вы все поймете )
  • -t tags-file - xml с мета данными

i_flvtool2.xml:

<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>

 

Батник (да-да, я делал все это под виндой):

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 -AUt i_flvtool2.xml i_flvtool2.flv

 

Шаг третий: Проверка.

Весь код приводить не буду, оставлю только "самую соль":

_stream = new NetStream(connection); 
_stream.client = {
	onMetaData : function(metaDataObj:Object):void {
		if (metaDataObj.cuePoints) {
			trace("cuePoints:")
			for (var j:String in metaDataObj.cuePoints) {
				trace('	' + j + ' -> ' + metaDataObj.cuePoints[j].name);
			}
		}
		return;
	}
}

 

Результат в аутпуте:

cuePoints:
	0 -> Cue Point 1
	1 -> Cue Point 2

 

Контрольные точки мы создали и через onMetaData можем получить их список.

Profit.