Bonjour à tous,

voilà quelque semaine que je poste un peu partout dans ce forum mais les réponses n'affluent guère ...

Mon problème est que je n'arrive pas à décoder une vidéo H264 envoyée par une caméra en RTP.

Pour résumer :
  • j'ai un client RTSP/RTP fonctionnel : réception de tout mes paquets issu de la caméra

  • mon flux est composé de paquet SPS, PPS, FU-A et Coded Slice (voir doc ffmpeg)

  • Je reconstitue mes IDR Frames à l'aide des paquets FU-A selon que méthode qui m'a été donnée dans un autre forum :lien. Je suppose donc quelle fonctionne.

  • Je remplis les champs profile, level, extradata et extradata_size de mon AvcodecContext à partir du SDP à l'aide du parser suivant : lien

    J'obtiens : profile=42, level=29, extradata_size=30



La méthode que j'utilise pour décoder toute la vidéo est décrite ici


Au final, dès que j'arrive pour décoder une IDR frame j'obtiens les erreurs :

pps_id 32 out of range et illegal POC type 5.

Elles sont référencées dans la fonction ff_h264_decode_seq_parameter_set de ce fichier

J'ai beau fouillé sur le forumm ffmpeg-user et sur tout le net, je ne trouve que très peu d'indication sur la raison de cette erreur. D'autant plus que la méthode que j'emploie pour le décodage global de la vidéo et en particuliers le réglage du codecContext utilise beaucoup de source de ffmpeg.

Voila, si vous pensez pouvoir m'aider mais que je manque de précision, n'hésitez pas à le faire savoir.


EDIT :

Je viens de résoudre une première erreur : ffmpeg stocke le SPS et PPS du SDP dans le format avcC et je lui passais dans le format Nal-Unit.

Ainsi, mon extradata devient :

01 42 00 1e ff e1 00 12 67 42 00 1e e2 90 16 02 4d 81 27 05 01 05 e1 e2 44 54 01 00 06 68 ce 3c 80 00 00

Celui-ci est décodé lors de l'affectation du codec (avcodec_open(codecContext, codec) appelle ff_h264_decode_init qui appelle ff_h264_decode_extradata) et aucune erreur n'est retournée.

Par la suite, lorsque je décode mes paquets arrivant, j'obtiens l'erreur suivante à chaque fois que avcodec_decode_video est appelée :

[h264 @ 00334fe0]AVC: nal size nombre

le nombre étant très grand (8 chiffres).

De plus, lorsque que je veux décoder des NAL_IDR_SLICE (nal de type 5), j'ai en plus l'erreur suivante:

[h264 @ 00334fe0]sps_id out of range


Voilà, si vous avez une idée pour résoudre cela, n'hésitez pas.*


EDIT:

l'erreur [h264 @ 00334fe0]sps_id out of range est fixée (je ne sais pas comment).

Désormais seules perdurent les erreurs [h264 @ 00334fe0]AVC: nal size nombre à chaque appel de avcodec_decode_video.

De plus je viens de remarquer que avcodec_video renvoie à 99% la valeur 4 ... Donc nouveau problème