Отправка сообщения RTMP, закодированного Jcodec H264, в Wowza

Я делаю приложение на основе Java для совместного использования экрана. Я закончил кодирование кадров в H264 с использованием библиотеки JCodec java. У меня есть данные изображения в байтовом буфере. Как я буду отправлять эти закодированные кадры в Wowza через rtmp-клиент? Может ли Wowza распознавать кадры в кодировке H264, закодированные библиотекой Jcodec?


person Waqas Saddique    schedule 15.08.2014    source источник


Ответы (1)


Практически любой из медиа-серверов «flash» будет понимать данные h264 в потоке. Вам нужно будет закодировать свои кадры с помощью базового или основного профиля, а затем «упаковать» закодированные байты в формат потоковой передачи FLV. Первым шагом является создание элемента видеоданных AMF, что означает добавление префикса и суффикса к кодированному байтовому массиву h264 на основе его содержимого «NALU»; в псевдокоде это выглядит примерно так:

if idr 
flv[0] = 0x17 // 0x10 key frame; 0x07 h264 codec id
flv[1] = 0x01 // 0 sequence header; 1 nalu; 2 end of seq
flv[2] = 0 // pres offset
flv[3] = 0 // pres offset
flv[4] = 0 // pres offset
flv[5] = 0 // size
flv[6] = 0 // size cont
flv[7] = 0 // size cont
flv[8] = 0 // size cont

else if coded slice
flv[0] = 0x27
flv[1] = 0x01
flv[2] = 0 // pres offset
flv[3] = 0 // pres offset
flv[4] = 0 // pres offset
flv[5] = 0 // size
flv[6] = 0 // size cont
flv[7] = 0 // size cont
flv[8] = 0 // size cont

else if PPS or SPS
.... skipping this here as its really complicated, this is the h264/AVC configuration data

copy(encoded, 0, flv, 9, encoded.length)

flv[flv.length - 1] = 0

Следующим шагом является упаковка видеоданных AMF в сообщение RTMP. Я предлагаю вам взглянуть на flazr или одну из библиотек rtmp для Android для получения подробной информации об этом шаге.

У меня есть небольшой пример проекта, который берет необработанный кодированный h264 и записывает его в flv здесь, если хотите чтобы увидеть, как это делается.

person Paul Gregoire    schedule 19.12.2014