Зачем мне нужны 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
Подробнее обо всем этом можно почитать тут.
Для этого тоже есть инструмент. И называется он flvtool2 (говорят, что flvtool++ или yamdi лучше, но flvtool2 был под рукой (память он жрет как сотня голодных поросят))
flvtool2 -AUt i_flvtool2.xml i_flvtool2.flv
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.