Как создать код c специфицирует c данных (csd) для h264 в MediaCode c? - PullRequest
0 голосов
/ 24 февраля 2020

Привет, у меня есть android проект, который я должен получать аудио и видео с сервера через сокет, аудио часть работает отлично. но видео часть не работает, я не знаю, в чем причина, потому что декодер не показывал никакой ошибки при декодировании видео пакетов. код видео c, который я использую, - это H.264 / AV C из кодировщика ffmepeg со следующими настройками: -

мелодия = нулевая задержка

профиль = базовая линия

level = 3

Ширина = 320

Высота = 240

frameRate = 30

GOPSize = 30

Я обнаружил, что я Я должен добавить CSD-0 и CSD-1 в конфигурацию MediaCode c, но я не знаю, как добавить данные H.264 SPS / PPS в конфигурации

это код, который я нашел, но это не так со мной,

byte[] header_sps = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, 1, -32, 17, 31, 120, 11, 80, 16, 16, 31, 0, 0, 3, 3, -23, 0, 0, -22, 96, -108 };
byte[] header_pps = { 0, 0, 0, 1, 104, -18, 60, -128 };

MediaFormat videoFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC , 320 , 240 );
videoFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE  , 100000);
videoFormat.setByteBuffer("csd-0", ByteBuffer.wrap(header_sps));
videoFormat.setByteBuffer("csd-1", ByteBuffer.wrap(header_pps));

MediaCodec videoDecoder = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
videoDecoder.configure(videoFormat , surface , null , 0);
videoDecoder.start();

, если кто-то знает, как правильно декодировать H.264, в этом случае это будет полезно

1 Ответ

2 голосов
/ 25 февраля 2020

Вы должны использовать правильные sps / pps из видео, а не случайные жестко закодированные. Вы можете получить его, анализируя поток битов. См. Это: Возможные местоположения для набора (ей) последовательностей / параметров изображения для потока H.264

...