Bonjour à tous,
je travaille actuellement sur un filtre source DirectShow permettant de se connecter à une caméra qui envoie ses données dans des paquets RTP ,et de transmettre ces données au reste du graphe qui comprendra un décodeur et un "video renderer". Pour l'instant, la caméra envoie du MPEG4, par la suite j'étendrais le programme à du H264.
J'initialise la connection, traite les messages RTSP (DESCRIBE,PLAY,PLAY ...), et reçois bien les paquets RTP dans mon filtre.
Mon problème est alors de savoir quelles données sont à envoyer au reste du graphe : j'envoie directement les données reçues ou j'attends d'avoir une frame complète ?
Lorsque j'envoie les paquets directement au graphe, la vidéo rendue est une espèce de ligne "arc-en-ciel", bref, de la bouse ! (en utilisant comme filtre décoder le ffdshow raw video filter ).
Si je veux envoyer des frames, j'utilise la libavcodec avec les fonctions avcodec_decode_video et sws_scale afin de repérer les frames, les décoder et les envoyer. La vidéo rendue n'est pas de très bonne qualité...
(Quand je dis envoyer au graphe, c'est que j'utilise la méthode fillBuffer et je remplis le PBYTE correspondant au GETPointer sur le IMediaSample avec le buffer reçu)
Bref, ce que je veux en fait connaître, c'est la façon dont je dois remplir mon buffer (celui de FillBuffer) afin d'avoir un décodage optimal (et en temps réél).
Partager