J'ai une webcam logitech C920. Il a la capacité d'encoder directement la vidéo en H264.
Je veux reproduire ce qui a été fait avec un Beaglebone, mais en utilisant un Raspberry Pi: envoyez un flux H264 au réseau . Le Raspberry Pi n'est alors là que pour packetiser le flux en RTP, la compression vidéo est effectuée par la webcam elle-même. Le mode H264 est appliqué à l'aide de video4linux.
Jusqu'à présent, et si j'utilise un ordinateur commun avec la dernière version d'Ubuntu, cela fonctionne en utilisant VLC comme serveur ou GStreamer. Par exemple, si je lance sur Raspberry Pi un serveur VLC en utilisant la commande:
cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'
... et puis si je lis le flux avec VLC sur un autre ordinateur, tout va bien.
Cependant, si j'utilise le raspberry Pi pour envoyer le flux vidéo, le résultat est assez médiocre. Beaucoup de déchets dans l'image dès que quelque chose bouge. Les clés d'image sont bien reçues toutes les 10 secondes, mais en attendant, elles ne sont pas assez bonnes par rapport au flux provenant d'un ordinateur commun.
J'ai également essayé la méthode décrite pour le beaglebone avec l' utilitaire "capture" fourni : ok si je diffuse à partir d'un vrai ordinateur, même problème de poubelle si je diffuse à partir d'un Raspberry Pi.
Ce n'est pas un problème de réseau: j'ai fait quelques vérifications de réseau avec Wireshark et les statistiques de VLC, je n'ai pas de perte de paquets. J'ai essayé avec Raspbian et Arch Linux pour Raspi (gstreamer 0.10 dans raspbian, gstreamer 1.0 dans Arch Linux).
Je ne sais pas si c'est pertinent ou non, mais j'ai aussi testé avec la version de support soft float de Raspbian. Une mise à jour doit d'abord être effectuée pour utiliser un noyau 3.2; mais même problème, la vidéo a des ordures.
Une idée sur ce que je pourrais faire pour améliorer la qualité vidéo?
la source
Réponses:
J'ai eu le même problème, j'ai trouvé ce fil lors de la recherche d'un encodeur matériel, pas de problèmes c920.
Néanmoins, exécutez une mise à jour du firmware pour le Raspberry Pi et les ordures devraient disparaître
$> sudo rpi-update
J'ai moi-même trouvé la solution ici: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi
la source
Vous pouvez essayer d'utiliser FFMPEG. Mais le problème n'est pas d'utiliser la version des référentiels car elle est dépassée. Il existe une version fourchue qui fonctionne très bien.
Vous devrez le compiler en 5 heures environ ou télécharger un binaire précompilé.
Vous pouvez ensuite diriger les données du pilote V4L vers FFMPEG avec ces paramètres. Où le
-i "fifo"
devrait être juste-i
pour capter le flux canalisé et le-f
vous aurez besoin de vérifier comment le sortir H264. le FLV le reconditionne en FLV qui peut être lu avec des lecteurs HTML.ou un exmaple j'ai trouvé que les cibles V4L directement mais oyu doivent avoir la caméra présente dans
/dev/video*
où * est1
ou plus ...le
-f
indique le format de sortie. Cela ne signifie pas qu'il le transcodera comme H264 en FLV est simplement enveloppé au format FLV. puis changez l'adresse pour le lecteur VLC de vos clients. par exemple-f mpegts udp:192.168.1.19:1234
VLC ne semble pas fonctionner trop bien sur le Pi. J'ai eu très peu de succès en poussant le module Pi cmaera sur mon PC en utilisant UDP. Cela a fonctionné mais ce n'était pas stable.
Vous pouvez également regarder installer nginx avec le module rtmp qui fonctionne un régal. Regardez ce guide, mais vous devrez modifier légèrement les paramètres. Vous connectez ensuite votre lecteur VLC au flux nginx-rtmp et cela fonctionnera comme un charme.
la source
Cela semble fonctionner pour moi @ au moins ...
cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy
la source
Essayez avec un tampon plus grand sur le client affichant la vidéo. Pour moi, il y a une différence spectaculaire entre le tampon de 1000 ms et le tampon de 200 ms. Le tampon de 5000 ms est meilleur que le tampon de 1000 ms.
: mise en cache réseau = 2000
la source
J'ai posté une solution possible sur le forum framboise en utilisant un serveur RTSP léger basé sur live555 qui capture H264 à partir d'un pilote V4L2. Il est disponible sur github h264_v4l2_rtspserver
Cela a été fait pour la raspicamera, mais cela devrait fonctionner avec tout appareil V4L2 qui fournit H264.
la source
Si j'ai bien compris votre situation, vous voulez que Raspberry transcode la vidéo en H264? Je pense que c'est pourquoi vous obtenez de mauvaises performances, car VLC utilise l'encodage logiciel et Raspberry n'est pas puissant pour cette tâche.
Je suggère d'essayer avec Gstreamer et les
gst-omx
plugins . Il y a un élément pour le codage vidéo matériel qui ferait un bon serveur à partir de votre Raspberry.la source