Änderungen

Raspberry Pi Advanced

1.688 Byte hinzugefügt, 15:13, 3. Jan. 2015
/* Streaming mit geringer Latenz von der Raspberry Cam */
== Streaming mit geringer Latenz von der Raspberry Cam ==
Vorweg: Es gibt mittlerweile viele Indizien dafür, dass mit einem guten Setup sehr brauchbare Latenzen möglich sind. So wurden kabelgebundene Unterwasserroboter gebaut, die sehr hohe Kameraauflösungen in unter 50ms streamten. Kommt WIFI ins Spiel, so gibt es hier zusätzliche Engpässe und Latenzen bedingt durch den limitierten Datendurchsatz der USB-Schnittstelle (trotz USB 2.0 erscheinen hier eher 10MBit/s realistisch). Der Netzwerkport ist schneller, schiebt man die Daten über weite Strecken durch das Internet wurden aber auch hier Latenzen deutlich unter 100ms erreicht, wie z.B. in der Masterthesis hier: http://www.ti5.tu-harburg.de/staff/meier/master/meier_audio_over_ip_embedded.pdf
Man kann aber auch sehr viel falsch machen und hat dann schnell Latenzen im Sekundenbereich, wie es vielen Leuten passiert. Dann ist es hilfrech zu verstehen, an welcher Stelle es genau klemmt.
 
Learnings:
* Netzwerklatenz spielt eine wichtige Rolle, gerade WLAN-Adapter dauernd anpingen und zunächst sind hier gerne Problematisch. Um das zu untersuchen sollte der Raspberry von einem anderen Computer fortlaufend angepingt werden (Option -t unter Windows). Hier sollten dauerhaft Ping optimieren-Latenzen von unter 10ms erreicht werden können, teilweise war dieser schon gruselig selbst ohne Lastwenn das hier schlecht ist, müssen Maßnahmen am WLAN getroffen werden, um eine geringere Latenz zu bekommen. Abhilfe: Andere ** Bei WLAN-Adapter und Sticks ist oft ein Stromsparmodus aktiv, der Befehl sehr störend sein kann wenn man geringe Latenzen erreichen will. Auch verhalten sich Sticks je nach Chipsatz verschieden. Den Stromsparmodus kann man bei manchen Sticks wie folgt abschalten: <pre>sudo iwconfig wlan0 power off</pre> um den . Mit <pre>iwconfig wlan0</pre> kann man sehen, ob der Stromsparmodus abzuschaltenaktiv ist oder nicht und auch die Verbindungsqualität feststellen.** Da der Raspberry die volle WLAN-Rate eh nicht nutzen kann, ein hin- und herschalten verschiedener WLAN-Geschwindigkeiten sich aber auch negativ auf die Latenz auswirken kann, kann man versuchen das WLAN auf langsamere (aber robustere) Kodierungen festzunageln (b statt g oder n). TODO: Wie?
* Streaming geht am schnellsten, wenn natürlich möglichst wenig umcodiert wird, raspicam liefert aber H264, das ist oft nicht so kompatibel, Streaming im Browser mag eher MJPG. Mit mjpg-streamer und einem Phyton Skript geht es flott http://petrkout.com/electronics/low-latency-0-4-s-video-streaming-from-raspberry-pi-mjpeg-streamer-opencv/ - das bringt auch ein Webinterface mit, aber hier musste ich die Qualität herunter stellen, damit auch die Latenz besser wurde (trotz lokalem Netz, wo es klemmt ist mir noch nicht klar): <pre>./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so -x 640 -y 480 -fps 10 -q 8"</pre>. Mehr als 10fps waren kontraproduktiv, -q 8 gibt schon deutlich schlechtere Qualität, aber es läuft dann auch im Browser. Ausserhalb vom Browser ging weit mehr Rate und Qualität.
* Direkt wegschaufeln von H264 über netcat <pre>raspivid -hf -w 1280 -h 1024 -t 999999999 -fps 20 -b 5000000 -o - | nc -l -p 5001</pre>, dann empfangen mit <pre>nc\nc.exe 192.168.1.76 5001 | mplayer\mplayer.exe -fps 30 -demuxer h264es -</pre>
* WLAN auf geringere codierung festnageln (b statt g oder n)
* Empfänger auf hohe fps stellen (ruhig höher als gesendet wird)
* Im Browser auch Größe angeben: <pre><img alt="" src="http://phobos:8080/?action=stream" width="1280" height="960" /></pre>
1.995
Bearbeitungen