LIBAV MJPEG кодирование и таблица Хаффмана - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь создать поток RTP с полезной нагрузкой видео MJPEG, используя libav (ffmpeg) Пример кода действительно прост и работает с MPEG1 Я вижу, что кодирование в MJPEG работает, но тогда, когда мне нужно отправить MJPEG кадры RTP отправителей возвращает мне ошибку:

[rtp @ 000000878ca77aa0] RFC 2435 требует стандартных таблиц Хаффмана для JPEG

Я вижу комментарий в заголовке libav:

/**
     * some codecs need / can use extradata like Huffman tables.
     * MJPEG: Huffman tables
     * rv10: additional flags
     * MPEG-4: global headers (they can be in the bitstream or here)
     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
     * than extradata_size to avoid problems if it is read with the bitstream reader.
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
     * - encoding: Set/allocated/freed by libavcodec.
     * - decoding: Set/allocated/freed by user.
     */
    uint8_t *extradata;
    int extradata_size;

Но как исправить заполнение таблиц Хаффмана или инициализировать таблицы по умолчанию. Есть ли флаги, которые я должен установить для кодировщика? Благодарю.

1 Ответ

0 голосов
/ 24 марта 2019

Вы можете установить опцию Хаффмана на 0, то есть:

ffmpeg -i /dev/video0 -input_format mjpeg -f v4l2 -pix_fmt yuvj420p -vcodec mjpeg -huffman 0 -f rtp "rtp://127.0.0.1:10000" -sdp_file sdp_file 
...