Tag d'archives : caméra IP

Nicolas H. m’a finalement aidée dans la résolution de mon problème de la veille. La raison pour laquelle je n’arrivais pas à imposer mon propre caps était tout simplement le fait que j’oubliais de passer l’argument videorate dans mon pipeline. La commande permettant de créer un serveur streamant le flux de la caméra IP est donc :

gst-launch -v rtspsrc location=rtsp://(adresse IP de la caméra):554/mpeg4/media.amp ! queue ! decodebin ! queue ! videoscale ! videorate ! capsfilter caps=”video/x-raw-yuv,framerate=(fraction)1/3″ ! theoraenc bitrate=1900 quality=2 ! rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=(adresse du client) session.send_rtcp_src ! udpsink port=5001 host=(adresse du client)

De base, streamer un tel flux prend environ 1Mb de bande passante. Mais en diminuant le framerate à une image toutes les trois secondes comme je le fais dans cette commande, on peut ramener la consommation de bande passant à environ 40Kb. Une image toutes les deux secondes demande encore 80Kb, ce qui reste assez élevé, c’est pourquoi j’ai fait ce choix de diffuser une image toutes les trois secondes. Je cherche à présent les autres paramètres modifiables qui ont une influence sur la bande passante. Pour une vidéo de taille importante, par exemple, modifier le bitrate et la qualité de l’encodage vidéo ne permet de gagner qu’à peu près 5Kb, ce qui est assez faible. Dans le cas d’une vidéo de petite dimension (par exemple 480 par 360), c’est paramètres ont, en revanche, un plus grand impact.

Parallèlement à cela, j’ai essayé d’aider un peu Lorenzo à trouver une solution à son problème d’encodage de caractères. En effet, sur la console, les caractères spéciaux de certains noms de périphérique étaient remplacés par d’autres, ce qui posait problème pour la détection de ces derniers. Finalement, Le problème a été réglé par le fait que l’application de Lorenzo se chargeait elle-même d’encoder correctement les caractères.

Étant donné que je travaille désormais avec une caméra IP, j’ai commencé dans un premier temps à retrouver les lignes de commande me permettant de faire avec elle ce que je faisais auparavant avec la webcam. J’ai donc cherché à afficher l’image, puis à streamer le flux vidéo en UDP, comme expliqué dans l’article concernant les caméras IP du blog de Nicolas H. Puis j’ai recherché la ligne de commande permettant de créer un serveur RTP/RTCP streamant le flux vidéo d’une caméra IP, que voici :

gst-launch -v rtspsrc location=rtsp://(adresse IP de la caméra):554/mpeg4/media.amp ! queue ! decodebin ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=192.168.X.X session.send_rtcp_src ! udpsink port=5001 host=(adresse IP du destinataire)
De l’autre côté, il suffit de lancer un client RTP/RTCP, comme pour la webcam.

J’ai ensuite entrepris de modifier les paramètres width, height et framerate de la vidéo. Malheureusement, à chaque fois que je faisais cela, le terminal me renvoyait une erreur indiquant que le format des données n’était pas négociable. Après discussion avec les membres de la communauté Gstreamer sur IRC et en analysant, sur leurs conseils, les logs de l’erreur, j’ai réalisé que certaines valeurs étaient acceptables pour ces paramètres, et d’autres non. Reste maintenant à déterminer lesquelles.