Я делаю приложение на основе Java для совместного использования экрана. Я закончил кодирование кадров в H264 с использованием библиотеки JCodec java. У меня есть данные изображения в байтовом буфере. Как я буду отправлять эти закодированные кадры в Wowza через rtmp-клиент? Может ли Wowza распознавать кадры в кодировке H264, закодированные библиотекой Jcodec?
Отправка сообщения RTMP, закодированного Jcodec H264, в Wowza
Ответы (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 здесь, если хотите чтобы увидеть, как это делается.