2015-10-16 6 views
0

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

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

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

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

+0

Возможно, мне нужно передать Контекст Codec с разрешением, pix_fmt и т. Д. С данными из заголовков rtp или SDP перед вызовом avcodec_decode_video2, но я не знаю, как это сделать должным образом. –

ответ

0

Вам не нужно подавать «разрешение, pix_fmt и т. Д.». информацию в декодер, так как они получают дешифратор из входных AVPackets.

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

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

+0

Извините за этот очень поздний ответ, я использовал очень старую версию lib. Нет pb с последними. –