Я новичок в 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, пакет должен быть добавлен к предыдущему пакету.
удалить все Заголовок RTP пакетов, поэтому он имеет только индикатор типа FU | FU заголовок | NAL
попробуйте воспроизвести его с помощью avcodec_decode_video2 ()
, но он возвращает только -1 .....я должен удалить индикатор FU и заголовок ??
любые предложения будут очень благодарны
заранее спасибо.