2011-07-05 5 views
1

Totalement nouveau à ce! Comme le titre l'indique, j'essaie de diffuser un flux depuis OpenCV via Live555 à l'aide de H.264 capturé à partir d'une webcam.Service d'un flux en direct OpenCV H.264 à travers Live555 sur Windows

J'ai essayé quelque chose comme:

#define LOCALADDRESS "rtsp://localhost:8081" // Address media is served 
#define FOURCCCODEC CV_FOURCC('H','2','6','4') // H.264 codec 
#define FPS 25        // Frame rate things run at 
m_writer = cvCreateVideoWriter(LOCALADDRESS, FOURCCCODEC, FPS, cvSize(VIDEOWIDTH, VIDEOHEIGHT)); 

comme la lecture d'un flux RTSP, est fait similaire:

CvCapture *capture = cvCreateFileCapture(LOCALADDRESS); 

qui ne fonctionne pas si je me tourne vers LIVE555. Comment est-ce que je nourris un CvCapture codé en H.264 pour être servi par Live555? Il ne semble pas y avoir de façon directe de servir un bytestream de l'un à l'autre ou peut-être qu'il me manque quelque chose.

Répondre

3

Il n'y a vraiment pas de façon directe que je connaisse; certainement rien qui se passera en moins de quelques centaines de lignes de code. Je suppose que vous voulez utiliser un serveur RTSP à la demande (c'est là que le serveur reste assis, attend qu'un client se connecte, puis commence à diffuser lorsque le client établit une connexion et fait une demande)? Si oui, this item in the Live555 FAQ applies.

However, Live555 is a weird (possibly misguided?) library, donc c'est malheureusement un peu plus compliqué que ça. Live555 utilise un seul thread d'opération avec une boucle d'événements, donc ce que vous aurez à faire est de placer votre bytestream brut dans un buffer ou une file d'attente, et ensuite dans votre classe de subsession pour le streaming H.264, vous vérifierez et verrez si il y a des données disponibles dans la file d'attente et si c'est le cas, transmettez-le. Sinon, planifiez une autre vérification en quelques millisecondes. Vous devrez également supprimer tous les identifiants NALU avant de les transmettre à live555.