en utilisant FFmpeg, comment décoder le H264 paquets

Je suis nouveau sur FFmpeg de la difficulté à décoder le H264 paquets qui peuvent être obtenus dans un tableau de u_int8_t.

Après de nombreuses enquêtes, je pense qu'il devrait être en mesure de simplement mettre le tableau dans un AVPacket comme ci-dessous

AVPacket *avpkt = (AVPacket *)malloc(sizeof(AVPacket) * 1);
av_init_packet(avpkt);  
avpkt->data = ct;   //ct is the array
avpkt->length =....

et décoder par avcodec_decode_video2(). Une partie du code est comme

...
codec = avcodec_find_decoder(CODEC_ID_H264);
gVideoCodecCtx = avcodec_alloc_context();
gFrame = avcodec_alloc_frame();
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, packet);
...

Je suppose que j'ai mis toutes les propriétés requises correctement, mais cette fonction retourne -1 🙁

Je viens de trouver le -1 est à venir à partir de

ret = avctx->codec->decode(avctx, image, got_picture_ptr, avpkt);

dans le avcodec_decode_video2();

En fait, ce que je me demande si je peut décoder le H264 paquets (sans en-tête RTP) par avcodec_decode_video2().

Merci pour l'aide à l'avance.


///////////ajouté

OK, je suis encore à essayer de trouver une solution. Ce que je fais maintenant, c'est le ci-dessous

** le flux H264 dans ce flux RTP est codée par FU-UN

  1. recevoir un paquet RTP
  2. de regarder si le deuxième octet de l'en-tête RTP est > 0, ce qui signifie qu'il est le premier paquet (et peut-être sera suivie)
  3. voir si le prochain paquet RTP a > 0, lors de sa deuxième octet aussi, alors cela signifie que l'image précédente a été une totale NALE du ou si c'est < 0, le paquet doit être jointe au paquet précédent.
  4. supprimer tous les RTP-tête des paquets de sorte qu'elle a seulement, comme FU indicateur | FU-tête | NAL
  5. essayer de jouer avec avcodec_decode_video2()

mais c'est seulement de retour -1..... suis-je censé supprimer FU indicateur et en-tête de trop??

toute suggestion sera très apprécié

merci d'avance.

OriginalL'auteur Jun | 2012-02-16