Il existe des millions de forums et de discussions sur la suppression d'une latence de 5 secondes lors de l'utilisation d'un Pi avec une PI-Cam comme caméra de surveillance. De nombreux didacticiels montrent comment utiliser vlc pour coder et diffuser les images à l'aide du protocole RTP, ce qui entraîne un décalage d'environ 5 secondes.
Selon moi, la raison en est que raspivid est en train de coder le flux en H264, tandis que VLC doit le décoder à nouveau et le recoder à tout RTP. La ligne de commande ressemble à ceci:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
La première partie indique à raspivid de diffuser la vidéo sur la sortie standard:
raspivid -w 640 -h 480 -o - -t 0
La partie après le tuyau, dit à VLC de la récupérer et de la décoder à l'aide de h264:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Ce multiplexage et démultiplexage représente une véritable somme de ressources!
J'ai trouvé les sources de raspicam sur github, et je pense que quelque chose peut être fait dans la méthode encoder_buffer_callback (actuellement à la ligne 848) pour ignorer l'encodage. Cependant, je ne suis pas bon en c et je ne connais pas du tout l'encodage vidéo, donc je n'ai aucune idée par où commencer.
Sur Github, je peux voir 330 fourches, mais elles ne semblent pas être spécifiquement pour raspicam (plutôt pour l'ensemble du projet userland). Je me suis perdu en essayant de trouver un fork qui supprimait l'encodage ou implémentait quelque chose de plus simple comme mjpeg.
Quelqu'un avec des connaissances en codec c et vidéo pourrait-il m'aider, ainsi que les autres utilisateurs de gazillions, à se débarrasser de la latence? La solution est probablement déjà disponible dans l'une de ces fourchettes, mais j'ai passé des heures à la chercher sans aucune chance.
ps Je ne cherche pas de solution de navigateur , mais je veux finalement la diffuser sur une Synology, de préférence en utilisant le streaming mjpeg (mais pas via une page Web, plutôt un flux mjpeg standard intégré à la plupart des caméras IP commerciales). La première étape consiste à se débarrasser du h264.