Streaming LIVE
Massimiliano D’Ambrosiogoogle.com/[email protected] (Community BBB Italia)plus.gdgudine.it
da Google+ Hangouts con la possibilità di avere il link diretto
al nostro canale
ma abbiamo anche la possibilità per un uso professionale di broadcasting
Streaming degli eventi
in diretta su
Premesso che dai primi di gennaio 2014 è stato esteso, in modo graduale, la possibilità di fare streaming a tutti gli utenti che hanno un canale su YouTube
Cosa serve per fare streaming su YouTube per uso professionale fino a 6 sorgenti video?
● account Google ● un canale YouTube● verificare sotto Impostazioni canale > funzioni che si attiva la voce
eventi dal vivo - https://www.youtube.com/features○ solo se il tuo canale ha una buona reputazione - https://support.google.
com/youtube/answer/2474026?hl=it● passate poi sotto Gestione Video > eventi dal vivo
○ https://www.youtube.com/my_live_events○ da qui è possibile creare e gestire i propri eventi dal vivo○ è possibile fare questo anche tramite le API...
■ https://developers.google.com/youtube/v3/live/● usare un software di acquisizione audio/video e che trasmetta il flusso video ad
un server Real Time Messaging Protocol (RTMP) ○ http://it.wikipedia.org/wiki/Real_Time_Messaging_Protocol
● rispettare alcuni requisiti tecnici
● Risoluzione Videohttps://support.google.com/youtube/answer/2853702?topic=2853713&hl=it
240p 360p 480p 720p1080p* solo la nuova
piattaforma
Risoluzione 426 x 240 640 x 360 854x480 1280x720 1920x1080
Bitrate video
Massimo700 Kbps
1000 Kbps 2000 Kbps 4000 Kbps 6000 Kbps
Raccomandato 400 Kbps 750 Kbps 1000 Kbps 2500 Kbps 4500 Kbps
Minimo 300 Kbps 400 Kbps 500 Kbps 1500 Kbps 3000 Kbps
● per il bitrate va tenuto presente che:○ ci sono due stream, il principale e quello di backup (facoltativo). Se si utilizza anche
il secondo i valori si raddoppiano○ vanno moltiplicati per ogni sorgente video (telecamera). Abbiamo uno stream
principale + eventuale backup per sorgente.○ la larghezza di banda necessaria deve tenere presente di questo
● con la nuova piattaforma tutti i formati inferiori vengono creati automaticamebte da YouTube
Requisiti tecnici
● Impostazioni del codificatorehttps://support.google.com/youtube/answer/2853702?topic=2853713&hl=it
Requisiti tecnici
Protocollo: RTMP Flash Streaming
Codec video: H.264, Main 4.1
Frequenza dei fotogrammi: 30 fps
Frequenza dei fotogrammi chiave:
(Keyframe frequency)
=< 2 secondi
Codec audio: AAC-LC (Audio richiesto)
Frequenza di campionamento audio 44.1 kHz
Bitrate audio: Stereo a 128 Kbps
● Impostazioni avanzate consigliatehttps://support.google.com/youtube/answer/2853702?topic=2853713&hl=it
Requisiti tecnici
Pixel aspect ratio: Square
Frame types: Progressive Scan, 2 B-Frames, 1 Reference Frame
Entropy coding: CABAC
● Software per lo stream via RTMP.
○ Wirecast for Youtube■ disponibile per Mac e MS-Windows■ disponibile in tre versioni:
● Free ● Studio (a pagamento)● Pro (a pagamento)
■ http://www.telestream.net/wirecastforyoutube/cb-landing.htm○ Flash Media Live Encoder
■ disponibile per Mac e MS-Windows■ gratuito■ http://www.adobe.com/it/products/flash-media-encoder.html
○ entrambi sono predefiniti dalla configurazione dal mio panello sotto I My Live Event
● la terza opzione del pannello riguarda la possibilità di configurare altri encoder con supporto RTMP○ come FFMpeg/LibAV disponibili anche per GNU/Linux○ app per Android
Requisiti tecnici
Software per lo stream via RTMP opensource
● FFMpeg ○ http://ffmpeg.org/
● LibAV Folk di FFMeg○ https://libav.org/
● forniscono tools e librerie per manipolare diversi formati multimediali. Permetto anche di gestire diversi protocolli
● sono multi piatatforma● ci sono anche dei front-end per chi non vuole usarli da riga di comando● Esempio del comando:
:~$ avconv \ -f video4linux2 -i /dev/video0 -vcodec libx264 \ -crf 25 -preset veryfast -s 640x360 \-acodec libmp3lame -ar 44100 -b 650k \-pix_fmt yuv420p -s 426x240 -b 400k -r 30 -g 50 \ -f flv "rtmp://a.rtmp.youtube.com/live2/NOME_STREAM"
Requisiti tecnici
● Captions.
○ Possiamo inserire dei sottotitoli tramite HTTP POST■ https://support.google.com/youtube/answer/3068031?
topic=2853697&ctx=topic&hl=it
sottotitoli
Passiamo a vedere il pannello degli eventi in diretta
https://www.youtube.com/my_live_events
Live Events
Possibile fare questo anche tramite le API Live di YouTube... https://developers.google.com/youtube/v3/live/
Ci sono tre passaggi fondamentali da fare:
1. autenticasi ed ottenere le credenziali tramite le oAuth2.0a. https://developers.google.com/accounts/docs/OAuth2
2. creare la nostra trasmissione broadcast tramite API youtube.liveBroadcasts
3. creare i stream video, quindi le nostre sorgenti video. Questo si fa usando le API youtube.liveStreams
4. Unire (bind) gli stream con la nostra trasmissione broadcast creata al punto 1. Anche qui si usano le API youtube.liveBroadcasts
5. Inviare il nostro video al server rtmp
API
youtube.liveBroadcasts.insert //creamo una nuova trasmissione broadcast
part="snippet, status",
{ "snippet": { "scheduledEndTime": "2014-07-06T11:00:00+0200", "scheduledStartTime": "2014-07-06T10:30:00+0200", "title": "Talk Youtube API Live", "description": "Talk sulle Youtube API a Cecina" }, "status": { "privacyStatus": "private" }}
https://developers.google.com/apis-explorer/#p/youtube/v3/
API
{"kind": "youtube#liveBroadcast","etag": "\"3enKTWw-I-yugKAPnlrhH5U04vQ/nv7cwmGKicZYNqDPwlPAWGHTQ6Y\"","id": "W12_UDrZj_s","snippet": { "publishedAt": "2014-06-30T05:11:46.000Z", "channelId": "ID_del_vostro_canale_YouTube", "title": "Talk Youtube API Live", "description": "Talk sulle Youtube API a Cecina", "thumbnails": { "default": { "url": “url_immagine_copertina-profilo” "width": 120, "height": 90 }, "medium": { "url": “url_immagine_copertina-profilo” "width": 320, "height": 180 }, "high": { "url": “url_immagine_copertina-profilo” "width": 480, "height": 360 } }, "scheduledStartTime": "2014-07-06T08:30:00.000Z", "scheduledEndTime": "2014-07-06T09:00:00.000Z"},"status": { "lifeCycleStatus": "created", "privacyStatus": "private", "recordingStatus": "notRecording"}}
youtube.liveStreams.insert //creamo una nuovo stream audio/video
part="snippet,cdn",
{ "cdn": { "format": "360p", "ingestionType": "rtmp" }, "snippet": { "title": "stream01" }}
https://developers.google.com/apis-explorer/#p/youtube/v3/
API
{"kind": "youtube#liveStream","etag": "\"3enKTWw-I-yugKAPnlrhH5U04vQ/L1x7N336PRWvDXPgh4DjFYkQ0B0\"","id": "UUNs5ES6Y9iKcz4_cvfmOg1404106567969533","snippet": { "publishedAt": "2014-06-30T05:36:08.000Z",
"channelId": "ID_del_vostro_canale_YouTube", "title": "stream01", "description": ""},"cdn": { "format": "360p", "ingestionType": "rtmp", "ingestionInfo": { "streamName": "iv3unm.7a36-rp8e-z3r1-35rj", "ingestionAddress": "rtmp://a.rtmp.youtube.com/live2", "backupIngestionAddress": "rtmp://b.rtmp.youtube.com/live2?backup=1" }}}
youtube.liveBroadcasts.bind //uniamo lo stream al broadcast
part="id,contentDetails",
Parametri da inviare
// ID del broadcast creato prima
"id_broadcast": "W12_UDrZj_s"
// ID del stream
"id_stream": "UUNs5ES6Y9iKcz4_cvfmOg1404106567969533",
API
Ora non ci resta che mandare lo stream audio/video su:
"cdn": { "format": "360p", "ingestionType": "rtmp", "ingestionInfo": { "streamName": "iv3unm.7a36-rp8e-z3r1-35rj", "ingestionAddress": "rtmp://a.rtmp.youtube.com/live2", "backupIngestionAddress": "rtmp://b.rtmp.youtube.com/live2?backup=1" }}
// parte della risposta JSON ricevuta quando abbiamo creato lo stream
Streaming
Domande?
massimiliano@beaglebone:~$ cat contact.json { "Name":"Massimiliano D'Ambrosio", "G+":"google.com/+MassimilianoDAmbrosio", "Twitter":"@iv3unm", "HackLab Udine": { "Site":"www.hacklabudine.it", "G+":"plus.hacklabudine.it", "Twitter":"@hacklabudine", "memo":"unOfficial Community BeagleBone Italia" }, "Google Developer Group Udine": { "Site":"www.gdgudine.it", "G+":"plus.gdgudine.it", "Twitter":"@gdgudine" }}
massimiliano@beaglebone:~$ sudo shutdown now[sudo] password for massimiliano:
Broadcast message from root@beaglebone (pts/0) (Sat May 10 20:33:39 2014):The system is going down to maintenance mode NOW!