Bonjour,
J'ai une Camera IP qui envoit un flux video codé en H264 sur RTP.
Je suis capable de réceptionner les paquets et de les stocker dans dans un buffer de Byte ainsi que de les décomposer pour retrouver toutes les caractéristiques du paquets (header RTP ->timestanmp, nO de séquence, SSRC, CSRC ... ; le payload RTP avec son type, mon cas est, par ailleurs, le type FU-A).
Cependant je suis incapable de de décoder ces paquets.
Avec une caméra envoyant du MPEG sur RTP, j'ai pu facilement rendre une vidéo en utilisant ffmpeg: je passais directement les paquets reçus à la fonction avcodec_decode_video() sans traitement préalable.
Avec H-264 aucun résultat ...
Du coup j'ai reconstitué moi-même les NALUS pour les transmettre au décoder comme indiqué page 33 de la RFC 3984 :
Sans aucun résultat ...If a decapsulated packet is an FU-A, all the fragments of the fragmented NAL unit are concatenated and passed to the decoder
Je pense que cela vient du réglage de mon décodeur. Du coup j'ai voulu utilisé le préréglage de décodage H264 de ffmpeg (VLC) pour définir le codecContext.
Mais impossible de l'utiliser dans mon code ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 AVCodec h264_decoder = { "h264", AVMEDIA_TYPE_VIDEO, CODEC_ID_H264, sizeof(H264Context), ff_h264_decode_init, NULL, ff_h264_decode_end, decode_frame, /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY, .flush= flush_dpb, .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC /MPEG-4 part 10"), };
Bref, je suis un peu perdu d'autant plus que j'ai aussi essayé d'utiliser DirectShow en faisant un filtre source recevant mes paquets et transmettant mes NALUs reconstituées à des filtres de décodages mais sans résultats non plus.
Donc si vous avez une idée, n'hésitez pas
PS: dans vlc la vidéo marche très bien donc normalement avec ffmpeg on devrait y arriver
Partager