Mi è capitato di dover affrontare lo streaming su internet di eventi in tempo reale… qualche tempo fa risultava un compito abbastanza difficoltoso, oggi lo è un po’ meno.
Propongo ora diverse soluzioni a seconda di quello che si ha a disposizione (PC, macchine virtuali, IP camera, webcam, Raspberry PI, camcorder ecc…).
L’obbiettivo di uscita verso cui sono state testate è lo streaming verso YouTube (https://www.youtube.com/live_dashboard): in fondo alla pagina indicata viene segnalato l’indirizzo RTMP (protocollo che usa la porta di destinazione 1935/TCP) che sarà qualcosa come rtmp://a.rtmp.youtube.com/live2/[chiaveDelloStream].
Soluzione software con IP camera o webcam
Questo prima soluzione presuppone che lo stream video sia già disponibile e in qualche modo accessibile tramite il PC: ad esempio come flusso RTSP di uscita di una IP camera o come flusso proveniente da una webcam collegata al computer.
Restreamer
Una soluzione rapida è usare Restreamer (https://datarhei.github.io/restreamer/) su un sistema Linux (fisico come Raspberry PI o virtuale) in cui è installato Docker. Si fa partire il containere tramite browser di naviga sull’interfaccia di Restreamer che permette di inserire:
- indirizzo sorgente del flusso RTSP
- indirizzo di destinazione RTMP
Questo metodo può essere utilizzato anche solo per creare la visualizzazione ebedded tramite browser, senza fare il re-streaming su piattaforme internet.
All’interno il container utilizza ffmpeg e ha la limitazione di non gestire la transcodifica: si limita a fare il restream lasciando inalterato il bitrate e il codec.
Comandi ffmpeg/avconv
Volendo effettuare il restream in manuale è possibile utilizzare ffmpeg o avconv (quest’ultimo su Raspberry PI visto l’assenza di ffmpeg pacchettizzato). Di seguito i comandi testati su IP Camera Grandstream e streaming su YouTube
ffmpeg -re -rtsp_transport tcp -i rtsp://user:password@ipCamera -y -err_detect ignore_err -c:v libx264 -preset ultrafast -maxrate 500k -bufsize 1548k -pix_fmt yuv420p -c:a libmp3lame -b:a 64k -ar 44100 -f flv rtmp://a.rtmp.youtube.com/live2/[chiaveDelloStream]
sudo avconv -re -rtsp_transport tcp -i rtsp://ipCamera -y -c:v libx264 -preset ultrafast -maxrate 500k -bufsize 1548k -pix_fmt yuv420p -c:a libmp3lame -b:a 64k -ar 44100 -f flv rtmp://a.rtmp.youtube.com/live2/[chiaveDelloStream]
Come è possibile notare sono molto simili (a parte il fatto che avconv non supporta l’autenticazione RTSP e il flag ignore_err).
In particolare con il parametro maxrate possiamo impostare il massimo bitrate desiderato in uscita e con bufsize la lunghezza del buffer con cui viene calcolato il bitrate medio.
Soluzione hardware
Nel caso volessimo acquisire da una sorgente video (tramite uscita HDMI, VGA, component ecc…) esistono dei sistemi hardware all-in-one che permettono la generazione dello stream in modo diretto impostando la transcodifica.
Potete trovare questi dispositivi facendo una ricerca utilizzando la seguente keyword: HDMI video encoder.