с помощью FFmpeg, как декодировать пакеты H264

Я новичок в 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

  1. получить пакет RTP

  2. посмотрите, если второй байт заголовка RTP> 0, что означает, что это первый пакет (и, возможно, будет следовать)

  3. проверьте, имеет ли следующий пакет RTP> 0 и во втором байте, тогда это означает, что предыдущий кадр был полным NAL, или, если он <0, пакет должен быть добавлен к предыдущему пакету.

  4. удалить все Заголовок RTP пакетов, поэтому он имеет только индикатор типа FU | FU заголовок | NAL

  5. попробуйте воспроизвести его с помощью avcodec_decode_video2 ()

, но он возвращает только -1 .....я должен удалить индикатор FU и заголовок ??

любые предложения будут очень благодарны

заранее спасибо.

5
задан Shahin 5 February 2013 в 08:10
поделиться