декодировать необработанный буфер с помощью ffmpeg av_codec_video_2

Я пытаюсь написать декодер для приложения webrtc на C. Я получаю поток RTP, анализирую каждый пакет, меняю их порядок и помещаю полезную нагрузку в AVPacket, как описано здесь (FFmpeg декодирует необработанный буфер с помощью avcodec_decode_video2). Часть изменения порядка не описана в этой ссылке, но я почти уверен, что с этой частью все в порядке.

Вопрос в том, что я не знаю, как передать декодеру информацию о разрешении, pix_fmt и т. Д. Нужно ли мне создавать AVstream* и заполнять его всей информацией, взятой из заголовка rtp?

У кого-нибудь есть кусок работающего кода, который декодирует депакетированный пакет VP8 без использования rtp_dec и т. Д.?

По этой ссылке в декодер больше не отправляется информация, может ли он декодировать без знания разрешения и без заголовка?


person will.I4M    schedule 16.10.2015    source источник
comment
Возможно, мне нужно передать контекст кодека с разрешением, pix_fmt и т. Д. Данными из заголовков rtp или SDP перед вызовом avcodec_decode_video2, но я не знаю, как это сделать правильно.   -  person will.I4M    schedule 16.10.2015


Ответы (1)


Кормить "разрешение, pix_fmt и т. Д." Не нужно. информация для декодера, так как те получаются декодером из входных AVPackets.

Кодировщикам нужна такая информация, как разрешение, pix_fmt и т. Д., Для генерации сжатого байтового / битового потока. И кодеры встраивают эту информацию (разрешение, pix_fmt и т. Д.) В сгенерированный битовый поток. Как только декодер принимает битовый поток в правильном порядке, он получает разрешение, информацию pix_fmt, прежде чем приступить к его распаковке.

Вероятно, в вашем случае причиной является порядок пакетов, который вы передаете декодеру.

person ARK    schedule 19.12.2015
comment
Извините за этот очень поздний ответ, я использовал очень старую версию библиотеки. Нет пб с последними. - person will.I4M; 15.09.2016