Я новичок в FFmpeg, изо всех сил пытающийся декодировать пакеты H264, которые можно получить как массив uint8_t.
После многих исследований я думаю, что он сможет просто поместить массив в AVPacket, какниже
AVPacket *avpkt = (AVPacket *)malloc(sizeof(AVPacket) * 1);
av_init_packet(avpkt);
avpkt->data = ct; // ct is the array
avpkt->length =....
и декодировать с помощью avcodec_decode_video2 ().Часть кода похожа на
...
codec = avcodec_find_decoder(CODEC_ID_H264);
gVideoCodecCtx = avcodec_alloc_context();
gFrame = avcodec_alloc_frame();
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, packet);
...
Я предполагаю, что все необходимые свойства установлены правильно, но эта функция возвращает только -1: (
Я только что обнаружил, что -1 приходит от
ret = avctx-> codec-> decode (avctx, picture, got_picture_ptr, avpkt);
в avcodec_decode_video2 ();
Собственно, мне интересноесли я могу декодировать пакеты H264 (без заголовка RTP) с помощью avcodec_decode_video2 ().
Заранее благодарен за помощь.
/////////// добавлено
ОК, я все еще пытаюсь найти решение. Сейчас я делаю следующее:
** поток H264 в этом потоке RTP кодируется FU-A
получить пакет RTP
посмотреть, если второй байт заголовка RTP> 0, что означает, что это первый пакет (и, возможно, будет следовать)
, если следующий пакет RTP имеет> 0 также во втором байте, то это означает, что предыдущий кадр был полным NAL или если это <0, пакет должен быть добавлен к предыдущему пакету. </p>
удалить все заголовки RTP пакетов, чтобы он имел только индикатор FU |Заголовок ФУ |NAL
попробуйте воспроизвести его с помощью avcodec_decode_video2 ()
, но он только возвращает -1 ..... я должен удалить индикатор FUи заголовок тоже ??
любые предложения будут очень признательны
заранее спасибо.