PDA

Просмотр полной версии : Flash API для декодирования H.264 и AAC


prrt
21.03.2013, 20:44
В интервью с создателем JW плеера, он говорит, что при проигрывании видео по протоколу HLS на стационарных компьютерах, они cперва сами парсят TS пакеты, а потом используют Flash API для декодирования H.264 (если я правильно понял).

Получается, что при разработке флеш-плеера можно предварительно как угодно обрабатывать входящий HTTP поток либо на AS 3.0, либо на JavaScript и выделять из него чистый H.264 и AAC? А затем использовать Flash API непосредственно для проигрывания? Если так, то что это за API? Где о нем прочитать и как сделать связку из своего обработчика потока с этим API?

alatar
21.03.2013, 20:51
NetStream#appendBytes() (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#appendBytes())

prrt
21.03.2013, 21:02
alatar,
Там указано:
Анализатор байт распознает FLV-файл с заголовком.
В данном случае это не flv файл, это будет отдельно h.264 поток и отдельно AAC поток, без какого бы то ни было контейнера.

alatar
21.03.2013, 21:35
Сначала придется скормить заголовок, потом уже данные. По другому, насколько мне известно, никак. Это и есть API для декодирования.

prrt
21.03.2013, 21:42
flv - это же контейнер. Т.е. там h.264 и AAC еще обернуты кучей управляющих данных по спецификации flv. Когда мы проигрываем HLS и парсим TS пакеты, ничего этого не будет. Apple c Adobe не дружат, а HLS - это протокол от Apple.

Если есть только это API, то возникает вопрос - как в JW умудрились сделать проигрывание HLS?

alatar
21.03.2013, 22:00
Как-то так (http://sourceforge.net/adobe/osmf/svn/2081/tree/osmf/trunk/framework/OSMF/org/osmf/net/httpstreaming/HTTPNetStream.as) + вот так (https://code.google.com/p/apple-http-osmf/).

prrt
21.03.2013, 22:36
О, это уже интересно. Надо будет поразбираться. Только я сам подход не совсем понимаю. Это мы в плеере сперва открываем http соединение с источником потока (точно также как если бы просто какой-нибудь конф. файл подгружали). Получаем TS пакет в буфер. Парсим этот буфер, выделяем аудио и видео данные. И снова их муксуем уже в flv согласно flv спецификации, и затем через appendBytes() проигрываем его как flv.
Так?
Просто я при беглом просмотре кода по указанным ссылкам не обнаружил кода, отвечающего за формирование flv из аудио и видео данных...

alatar
21.03.2013, 23:43
Так.
Посмотрите методы в которых вызывается attemptAppendBytes()