Я новичок в 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 | Заголовок ФУ | НАЛ
Попробуйте поиграть с
avcodec_decode_video2()
Но он возвращает только -1
.....
Должен ли я также удалить индикатор FU и заголовок??
Любое предложение будет очень признательно