YouTube liveStream erstellen

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