Caricare contenuti dal vivo di YouTube tramite HLS

Questo documento spiega come utilizzare il protocollo HLS (HTTP Live Streaming) per trasmettere in live streaming dati su YouTube da un codificatore. Questo documento è destinato a i fornitori di codificatori che vogliono aggiungere il supporto per l'importazione HLS ai loro prodotti. HLS è un'ottima scelta per i contenuti premium che richiedono e ad alta risoluzione con una latenza relativamente più elevata. In breve confronto tra i diversi protocolli di importazione utilizzati da YouTube Live Lo streaming supporta, consulta la pagina Confronto tra il protocollo di importazione di YouTube Live Streaming e il relativo protocollo di importazione.

Per trasmettere dati in tempo reale utilizzando HLS, il codificatore deve inviare una serie Playlist e segmenti multimediali all'endpoint HLS di YouTube utilizzando HTTP PUT o POST richieste. Dal punto di vista del codificatore, l'endpoint HLS di YouTube sembra essere un server HTTP passivo.

Ogni segmento multimediale rappresenta i contenuti multimediali effettivi per una breve parte. dello stream con una durata compresa tra 1 e 4 secondi. Ogni playlist multimediale descrive come riassemblare i segmenti multimediali nell'ordine di streaming corretto.

Requisiti per il formato dei contenuti multimediali

L'importazione HLS di YouTube prevede i seguenti requisiti per video e audio contenuti:

  • Video e audio devono essere sincronizzati nel formato M2TS.
  • I codec video supportati sono H.264 e HEVC.
  • Sono supportate frequenze fotogrammi fino a 60 f/s.
  • È supportato solo il GOP chiuso.
  • Il codec audio supportato è AAC ed è supportato solo l'audio a traccia singola.

Consulta ulteriori requisiti nella sezione Segmenti multimediali.

HDR

I video HDR (High Dynamic Range) sono supportati con il codec HEVC e presentano la i seguenti requisiti aggiuntivi:

  • Gli standard di colore supportati sono PQ e HLG a 10 bit con luminanza non costante. Nello specifico:
    • Il formato crominanza deve essere YUV 4:2:0 a 10 bit.
    • La funzione di trasferimento deve essere PQ (nota anche come SMPTE ST 2084) o HLG (noto anche come ARIB STD-B67).
    • I colori primari devono essere Rec. 2020.
    • I coefficienti della matrice devono essere Rec. luminanza non costante nel 2020.
  • Campionamento a gamma limitata (o MPEG) e full-range (o JPEG-range) sono supportati. È importante che l'intervallo sia impostato in base l'intervallo di valori campione utilizzato dai contenuti. I valori di esempio limitati sono consigliato.

Ottenere un URL di importazione HLS

Ottenere un URL di importazione HLS dall'API di YouTube

Per ottenere l'URL di importazione completo, i codificatori possono utilizzare il live streaming di YouTube API per inserire un live streaming di Google Cloud con quanto segue proprietà:

"cdn": {
  "ingestionType": "hls",
  "frameRate": "variable",
  "resolution": "variable"
}

Nella risposta dell'API, il campo cdn.ingestionInfo.ingestionAddress specifica l'URL di importazione principale e il campo cdn.ingestionInfo.backupIngestionAddress specifica l'URL di importazione della copia di backup. Per ulteriori dettagli, consulta la documentazione su la risorsa liveStreams.

Ottenere un URL di importazione HLS da YouTube Creator Studio

Nell'interfaccia web di YouTube Creator Studio, dopo che il creator ha fatto clic su "Crea Stream", YouTube visualizza una "Chiave stream" costituito da caratteri alfanumerici caratteri e trattini. Questa chiave segreta identifica sia l'autore, sia trasmettere in streaming su YouTube.

Puoi creare un URL HLS da questa chiave stream nel seguente modo:

https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=0&file=

... dove $STREAM_KEY è la chiave stream visualizzata nell'interfaccia web. Ad esempio: https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file=

Per maggiore affidabilità, puoi trasmettere una seconda copia ridondante dell'importazione a questo URL di backup:

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=1&file=

Tieni presente che il backup presenta due differenze rispetto all'URL principale: entrambi i nomi host e il parametro copy= sono cambiati. L'importazione del backup deve inviare un valore parametro copy= diverso rispetto all'importazione principale per evitare il flusso di dati.

Completare l'URL di importazione HLS

Gli URL ottenuti utilizzando uno dei due metodi sono modelli incompleti; ognuna termina con un parametro di query file= vuoto. Per creare l'URL finale, l'encoder deve aggiungi il nome di una playlist multimediale o un segmento multimediale alla fine dell'URL, completando così il parametro file=.

Le seguenti regole si applicano al valore del parametro file=:

  • Il codificatore può creare una playlist multimediale o un segmento multimediale a partire da caratteri alfanumerici, trattini bassi, barre, trattini e punti; non sono supportati altri caratteri.
  • Il codificatore non deve eseguire la codifica URL del nome file.
  • L'encoder può includere componenti di percorsi relativi o assoluti nei nomi dei file, anche se non è mai necessario. Se l'encoder include un componente del percorso all'interno di un nome file Segmento multimediale, deve fare riferimento allo stesso percorso la voce della playlist corrispondente.

Requisiti del protocollo HLS

Le playlist multimediali e i segmenti multimediali inviati dall'encoder devono essere conformi HTTP Live Streaming 2nd Edition Specifiche.

La specifica HLS definisce due tipi di playlist: Playlist multimediale e Principale Playlist. Poiché YouTube transcodifica i contenuti in streaming a diverse risoluzioni velocità in bit, il codificatore non ha bisogno di inviare contenuti con velocità in bit diverse YouTube. Di conseguenza, YouTube supporta solo le playlist multimediali per l'importazione HLS, e Playlist principali vengono ignorate. (una playlist principale fornisce un insieme di stream, ognuno dei quali descrive una versione diversa degli stessi contenuti.)

L'encoder deve:

  • inviare esattamente uno stream codificato con la risoluzione massima che desideri vengono pubblicati per gli utenti (a risoluzione singola e codec).
  • audio e video Mux.
  • utilizzano HTTPS e una connessione permanente per tutte le richieste.

Le seguenti sezioni contengono requisiti più specifici per le playlist multimediali e Segmenti multimediali.

Playlist multimediali

Una playlist multimediale contiene un elenco di segmenti multimediali che possono essere concatenati a rappresentano uno stream multimediale continuo e decodificabile. La playlist multimediale racconta al server quali segmenti multimediali aspettarsi e come ordinarli correttamente riassemblato.

Requisiti

  • Il nome del file della playlist multimediale deve terminare con .m3u8 o .m3u.

  • La prima playlist multimediale inviata per uno stream deve iniziare dal numero di sequenza 0 e il numero di sequenza devono aumentare in modo monotonico.

  • Il tag EXT-X-MEDIA-SEQUENCE deve identificare il numero di sequenza di il primo segmento multimediale elencato nella playlist.

  • Una playlist multimediale non deve contenere più di cinque segmenti in sospeso. R il segmento è in sospeso se il server non lo ha ricevuto o confermato la ricezione.

    Oltre ai segmenti in sospeso, includi anche alcuni titoli riconosciuti segmenti in ogni playlist multimediale. Questa prassi rende meno probabile che da saltare se una playlist multimediale viene persa sul lato server. Per Ad esempio, puoi includere fino a due segmenti riconosciuti e fino a cinque segmenti in sospeso in ogni playlist multimediale.

    Tieni presente che il server conferma la ricezione di un segmento multimediale restituendo un Risposta 200 (OK) o 202 (Accepted) in merito al caricamento di quel segmento. R La risposta 202 indica che il server ha ricevuto il segmento prima di un playlist che identifica quel segmento.

  • Invia una playlist multimediale aggiornata per ogni segmento multimediale in modo che il server può recuperare rapidamente in caso di perdita di una playlist multimediale.

  • Quando il server conferma la ricezione dei segmenti multimediali, è possibile incrementare il Il valore del tag EXT-X-MEDIA-SEQUENCE per evitare che la playlist multimediale diventi troppo lungo. Ad esempio, se il server ha già confermato la ricezione del i primi nove segmenti multimediali, la successiva playlist multimediale potrebbe riportare l'ottavo segmento, il nono e il decimo segmento multimediale.

  • I tag EXT-X-KEY e EXT-X-SESSION-KEY non sono supportati.

Esempi

Il seguente elenco mostra un esempio dei file che il codificatore dovrebbe utilizzare invia:

Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...

L'esempio seguente mostra una playlist multimediale inviata nel mezzo di un video in diretta. flusso di dati. Poiché l'esempio proviene dal centro di uno stream, Il tag EXT-X-MEDIA-SEQUENCE ha un valore diverso da zero.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts

Segmenti multimediali

Il seguente elenco identifica i requisiti per i segmenti multimediali:

  • Nomi file
    • I nomi dei file del segmento multimediale nell'URL devono avere il nome file .ts e deve corrispondere ai nomi file della playlist.
    • I nomi dei file del segmento multimediale devono essere univoci tra i riavvii del codificatore e lo stream viene riavviato.
  • Formato
    • I segmenti multimediali devono essere in formato M2TS e devono essere autoinizialicati.
    • Ogni segmento M2TS deve contenere un singolo programma MPEG-2.
    • Il segmento M2TS deve contenere un PAT e un PMT e i primi due I pacchetti Transport Stream in un segmento devono essere PAT e PMT.
  • Contenuti
    • Video e audio devono essere disattivati.
    • I codec video supportati sono H.264 e HEVC.
    • La tecnologia HDR con HEVC è supportata (leggi i requisiti HDR).
    • Sono supportate frequenze fotogrammi fino a 60 f/s.
    • È supportato solo il GOP chiuso.
    • Il codec audio supportato è AAC e solo l'audio a traccia singola è supportati.
    • Si consigliano segmenti multimediali con una durata compresa tra uno e quattro secondi, come descritto nella sezione seguente. I segmenti multimediali non devono abbiano una durata superiore a 5 secondi.
    • I segmenti multimediali devono essere criptati solo nel livello TLS/SSL con HTTPS. Non sono supportati altri meccanismi di crittografia.

Durata del segmento multimediale

Prevediamo che l'importazione HLS venga utilizzata per i contenuti premium che richiedono qualità e alta risoluzione. L'importazione HLS di solito ha una latenza più alta rispetto a RTMP- e le importazioni basate su WebRTC, perché l'importazione HLS è basata sui segmenti.

Consigliamo una durata del segmento multimediale da uno a quattro secondi, segmenti multimediali più piccoli possono comportare una latenza inferiore, anche se a un costo di un velocità di rebuffering e minore efficienza di codifica. Come indicato nella sezione precedente, I segmenti multimediali non devono durare più di 5 secondi.

Bitrate

La Guida di YouTube al centro fornisce le linee guida per le impostazioni della velocità in bit.

Tieni presente che HEVC generalmente produce dal 25% al 50% in più di compressione dei dati allo stesso di qualità video rispetto all'H.264. Di conseguenza, i valori della velocità in bit nella parte inferiore del può essere usato con HEVC per risparmiare larghezza di banda, in particolare è utile per i contenuti 4K.

Altri requisiti

  • I codificatori devono impostare l'intestazione User-Agent nella richiesta HTTP utilizzando il metodo la seguente sintassi, che include nome del produttore, nome del modello versione:

    User-Agent: <manufacturer> / <model> / <version>
    

Sottotitoli codificati

L'importazione HLS supporta due opzioni per l'invio di sottotitoli codificati:

  • Invia sottotitoli utilizzando richieste POST HTTP separate. Questa procedura è valida per tutti Importazione HLS.
  • I sottotitoli codificati 608/708 incorporati funzionano con le importazioni HLS che utilizzano l'H264 ma non con importazioni che usano il codec video HEVC. Per maggiori informazioni dettagli, consulta i requisiti per i Sottotitoli in tempo reale nel Centro assistenza YouTube.

Codici di risposta HTTP

Le seguenti sezioni spiegano i codici di risposta restituiti da YouTube. risposta a segmenti multimediali e playlist multimediali pubblicate utilizzando HLS.

200 (OK)

In risposta a una richiesta PUT o POST, una risposta HTTP 200 (OK) indica che il server di YouTube ha ricevuto e gestito l'operazione prevista correttamente.

In risposta a una richiesta DELETE, una risposta HTTP 200 (OK) indica che il server di YouTube ha ricevuto e ignorato la richiesta. Il server di YouTube non richiede al client di ELIMINARE le risorse nel flusso e ignora Richieste DELETE. Ai fini delle prestazioni, YouTube consiglia i clienti non inviare DELETE.

202 (Accettato)

Una risposta HTTP 202 (Accettata) indica che il server di YouTube ha ricevuto l'errore Segmento multimediale prima di ricevere una playlist multimediale contenente quel segmento multimediale. Questo indica al cliente che deve inviare la playlist multimediale contenente il prima possibile per evitare un ritardo nell'elaborazione in base al segmento. Tieni presente che questo non sarà un problema se il codificatore invia una richiesta Playlist multimediale per ogni segmento multimediale.

400 (Richiesta errata)

Una risposta HTTP 400 (Richiesta non valida) indica uno dei seguenti problemi: si è verificato:

  • Formato URL non valido
  • La playlist non può essere analizzata o contiene tag non supportati
401 (Autorizzazione non autorizzata)

Una risposta HTTP 401 (Autorizzazione non autorizzata) indica che il parametro cid nel L'URL di base per l'endpoint HLS di YouTube è danneggiato o è scaduto. Il cliente deve aggiornare il parametro cid per procedere.

405 (Metodo non consentito)

Una risposta HTTP 405 (Metodo non consentito) indica che la richiesta è stata non è una richiesta POST, PUT o DELETE.

500 (errore interno del server)

Una risposta HTTP 500 (Errore del server interno) indica che il server è stato non è in grado di elaborare la richiesta. Per questo errore, ti consigliamo di riprovare richiesta con esponenziale il backoff.