Um den YouTube liveStream zum Laufen zu bringen habe ich eine ganze Weile benötigt. Der Grund hierfür ist, dass YouTube den Stream im Format rtmp erwartet, die Instar Webcam den Stream aber im rtsp Format ausliefert. Die Lösung ist, wir schicken den rtsp Stream zuerst zum RaspberryPi, wandeln ihn dort zum rtmp Stream um und leiten ihn dann erst zu YouTube weiter.
Ich benutze dafür das Programm ffmpg.
Es gibt verschiedene Möglichkeiten ffmpeg auf dem Pi3 zu installieren, ich habe seinerzeit einige ausprobiert, erfolgreich war letztlich die Variante über github.
Zunächst muss git und der Compiler installiert werden:
## git installieren sudo apt-get install git ## C-compiler instalieren sudo apt-get install g++-4.8
Seit es das Betriebssystem 2017-04-10-raspbian-jessi-lite gibt ist noch folgender Zwischenschritt notwendig.
Quelle: https://github.com/ccrisan/motioneye/wiki/Install-On-Raspbian
wget https://github.com/ccrisan/motioneye/wiki/precompiled/ffmpeg_3.1.1-1_armhf.deb
sudo dpkg -i ffmpeg_3.1.1-1_armhf.deb
sudo apt-get install python-pip python-dev curl libssl-dev libcurl4-openssl-dev libjpeg-dev libx264-142 libavcodec56 libavformat56 libmysqlclient18 libswscale3 libpq5
Eigentliche ffmpeg Installation
Quelle: https://www.youtube.com/watch?v=S3zNBGfPFxI
mkdir /home/pi/src cd /home/pi/src git clone git://git.videolan.org/x264 cd x264 ./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl make sudo make install cd cd /home/pi/src sudo git clone git://source.ffmpeg.org/ffmpeg.git cd ffmpeg sudo ./configure --enable-gpl --enable-nonfree --enable-libx264 --enable-libmp3lame sudo make -j$(nproc) && sudo make install
Aktivieren des YouTube liveStreams
Leider läuft der Stream nach dem Starten nur für einige Stunden stabil. Ich habe das Problem umgangen, indem ich dem Stream jede Minuten beende und in der selben Sekunde sofort wieder neu starte. Seitdem habe ich diesbezüglich keine Ausfälle mehr. Auch der Zuschauer auf YouTube bemerkt davon nichts.
Das ganze realisiere ich über eine Zeile in den crontabs. Der Befehl zum Umwandeln und Weiterschicken an YouTube wird jede Minuten ausgeführt. Dem Befehl selbst wird mitgegeben, dass er nur eine Minute ausgeführt werden soll.
Die Zeile in den crontabs sieht folgendermaßen aus: (Alles ist eine einzige Zeile!)
* * * * * /usr/local/bin/ffmpeg -f lavfi -i anullsrc -rtsp_transport tcp -i rtsp://LINK-ZUM-RTSP-STREAM -bufsize 5M -t 00:01:00 -tune zerolatency -vcodec libx264 -pix_fmt + -c:v copy -c:a aac -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/YOUTUBE-SCHLÜSSEL > /dev/null 2>&1
Erklärung der Paramater:
-i input file url -vcodec Set the video codec. This is an alias for -codec:v. -pix_fmts Show available pixel formats. -ab 192k Einstellen der AudioBitrate auf 192kBit -aq 10 Stellt die AudioQualität auf 10 -t 12:00:00 Wie lange soll der Stream laufen? Hier 12h -vf gibt einen Videofilter an -vf "scale=640:360" --> kostet deutlich Rechenleistung!
Zwei Dinge müsst ihr noch austauschen:
- LINK-ZUM-RTSP-STREAM: Hier setzt ihr den Link zum rtsp stream ein. (Abhängig von eurem Kameramodell)
- YOUTUBE-SCHLÜSSEL: Hier setzt ihr euren geheimen(!) YouTube Schlüssel ein. Diesen bekommt ihr, sobald ihr auf YouTube einen livestream aktiviert.
Weitere Links
Von YouTube empfohlene Einstellungen: https://support.google.com/youtube/answer/2853702