Questa pagina mostra come creare una sessione di un videoregistratore digitale (DVR) da un live streaming utilizzando l'API Live Stream. Puoi visualizzare una sessione DVR durante un live streaming e anche al termine.
Differenze tra le sessioni DVR e i clip del canale
Le sessioni DVR sono simili ai clip del canale (noti anche come clip VOD) con le seguenti differenze principali:
- Sessioni DVR:
- L'API salva il manifest DVR nella stessa posizione dei segmenti dello stream live, quindi non è necessaria alcuna copia aggiuntiva in Cloud Storage. Il manifest DVR è simile al manifest del live streaming, ma più lungo. Quando il periodo di conservazione scade, il file manifest viene eliminato insieme ai file dei segmenti.
- Puoi creare una sessione DVR per contenuti passati, attuali e futuri. Ad esempio, una sessione DVR può seguire un live streaming oppure puoi pianificare una sessione DVR in modo che inizi e termini in un momento successivo.
- Un caso d'uso tipico per le sessioni DVR è supportare le funzionalità DVR per gli eventi in streaming dal vivo. Ad esempio, uno spettatore può partecipare al live streaming un'ora dopo l'inizio e visualizzare i contenuti con un ritardo di un'ora (o saltarne alcune parti).
- Clip del canale:
- L'API Live Stream copia il manifest del clip e i file di segmento associati in una directory specificata dall'utente in modo che non vengano eliminati al termine del periodo di conservazione. Hai il controllo completo del clip.
- È possibile creare clip solo dei contenuti passati. I clip dal vivo e la programmazione di clip futuri non sono supportati.
- Un tipico caso d'uso dei clip è l'archiviazione di un live streaming, rendendolo disponibile come file VOD a tempo indeterminato.
Per saperne di più sui clip del canale, consulta Creare clip di VOD da un live streaming.
Configura il progetto Google Cloud e l'autenticazione
Se non hai creato un progetto Google Cloud e le credenziali, consulta Prima di iniziare.Crea un endpoint di input
Per creare un endpoint di input, utilizza il metodo
projects.locations.inputs.create
.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud, che si trova nel campo Numero progetto della pagina Impostazioni IAMLOCATION
: la posizione in cui creare l'endpoint di input. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: un identificatore definito dall'utente per il nuovo endpoint di input da creare (a cui invii lo stream di input). Questo valore deve contenere da 1 a 63 caratteri, deve iniziare e terminare con[a-z0-9]
e può contenere trattini (-) tra i caratteri. Ad esempio:my-input
.
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Questo comando crea un'operazione a lunga esecuzione (LRO) che puoi utilizzare per monitorare l'avanzamento della richiesta. Per ulteriori informazioni, consulta Gestire le operazioni che richiedono molto tempo .
Ottenere i dettagli dell'endpoint di input
Per ottenere i dettagli dell'endpoint di input, utilizza il metodo
projects.locations.inputs.get
.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud, che si trova nel campo Numero progetto della pagina Impostazioni IAMLOCATION
: la località in cui si trova l'endpoint di input. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: l'identificatore definito dall'utente per l'endpoint di input
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "type": "RTMP_PUSH", "uri": "INPUT_STREAM_URI", # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b", "tier": "HD" }
Individua il campo uri
e copia il valore INPUT_STREAM_URI restituito da utilizzare in seguito nella sezione Inviare lo stream di test di input.
Crea un canale
Per creare un canale, utilizza il metodo
projects.locations.channels.create
. Gli esempi riportati di seguito creano un canale che genera un live streaming HLS. Il live streaming consiste in una singola rappresentazione ad alta definizione (1280 x 720).
Per abilitare la creazione di sessioni DVR, aggiungi l'oggetto
retentionConfig
alla configurazione del canale.
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
Quando la conservazione è attivata per un canale di live streaming, i segmenti
e il manifest del live streaming vengono conservati per creare sessioni DVR. L'oggetto
retentionWindowDuration
specifica il
periodo di tempo per cui l'output del live streaming viene salvato dopo essere stato caricato su
Cloud Storage. La finestra di conservazione inizia al momento della creazione del segmento in Cloud Storage.
La finestra di conservazione è limitata a 30 giorni. Al termine del periodo di conservazione, i file dei segmenti, il manifest del live streaming e il manifest DVR vengono eliminati automaticamente da Cloud Storage. Non puoi creare sessioni DVR utilizzando i segmenti eliminati. Il processo di eliminazione è asincrono e il completamento può richiedere fino a 24 ore.
Specifica una chiave per il manifest per abilitare la creazione di sessioni DVR. Fai riferimento a questa chiave durante la creazione effettiva della sessione. Sono supportati solo i manifest HLS.
"manifests": [
{
...
"key": "manifest_hls"
}
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud, che si trova nel campo Numero progetto della pagina Impostazioni IAMLOCATION
: la località in cui creare il canale. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: un identificatore definito dall'utente per il canale da creare. Questo valore deve contenere da 1 a 63 caratteri, deve iniziare e terminare con[a-z0-9]
e può contenere trattini (-) tra i caratteriINPUT_ID
: l'identificatore definito dall'utente per l'endpoint di inputBUCKET_NAME
: il nome del bucket Cloud Storage che hai creato per contenere i file manifest e segment del live streaming
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Questo comando crea un'operazione a lunga esecuzione (LRO) che puoi utilizzare per monitorare l'avanzamento della richiesta. Per ulteriori informazioni, consulta Gestire le operazioni che richiedono molto tempo .
Avvia il canale
Per avviare un canale, utilizza il metodo projects.locations.channels.start
.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud, che si trova nel campo Numero progetto della pagina Impostazioni IAMLOCATION
: la località in cui si trova il tuo canale. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: un identificatore del canale definito dall'utente
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "start", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Questo comando crea un'operazione a lunga esecuzione (LRO) che puoi utilizzare per monitorare l'avanzamento della richiesta. Per ulteriori informazioni, consulta Gestire le operazioni che richiedono molto tempo .
Invia il flusso di test di input
Apri una nuova finestra del terminale. Esegui il seguente comando utilizzandoINPUT_STREAM_URI della sezioneOttieni i dettagli dell'endpoint di input:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Creare una sessione DVR
Per creare una sessione DVR, utilizza il metodo
projects.locations.channels.dvrSessions.create
.
Utilizza il campo manifestKey
nell'array
dvrManifests
per specificare il file manifest da cui salvare i contenuti. Nell'esempio di configurazione del canale in questa pagina, questa chiave è impostata su manifest_hls
.
Puoi combinare più sezioni di tempo del live streaming in un'unica sessione DVR aggiungendo oggetti timeInterval
all'array dvrWindows
.
"dvrManifests": [
{
"manifestKey": "manifest_hls"
}
],
"dvrWindows": [
{
"timeInterval": {
"startTime": "2022-07-08T23:03:20.000Z",
"endTime": "2022-07-08T23:04:20.000Z"
}
},
{
"timeInterval": {
"startTime": "2022-07-08T23:05:20.000Z",
"endTime": "2022-07-08T23:06:20.000Z"
}
}
]
Tieni presente quanto segue:
- Ogni sessione DVR deve contenere almeno un
timeInterval
indvrWindows
. - Il campo
dvrManifests.manifestKey
deve fare riferimento a un manifest HLS definito nel canale principale della sessione DVR. Se la richiesta di creazione della sessione DVR va a buon fine, l'URI del manifest DVR generato viene restituito nel campodvrManifests.outputUri
. Questo URI si trova nel percorso specificato dal campooutputUri
del canale. - L'array
dvrManifests
supporta un solo manifest per richiesta. Se vuoi generare più manifest per le stesse finestre DVR, devi suddividere i manifest in più sessioni DVR. - L'insieme di oggetti
timeInterval
non deve sovrapporsi e deve essere in ordine cronologico.startTime
deve essere precedente aendTime
in ognitimeInterval
. startTime
eendTime
fanno riferimento alla sequenza temporale del live streaming. Se il timecode incorporato è attivato per il manifest, questa sequenza temporale si basa sul timecode incorporato fornito nello stream di input e potrebbe essere diversa dall'ora standard.- La durata totale massima della finestra DVR è di 24 ore.
- L'attributo
endTime
dell'ultimotimeInterval
indvrWindows
può essere lasciato vuoto. In questo caso, il valoreendTime
viene calcolato automaticamente per massimizzare la durata della sessione DVR (ovvero una durata totale di 24 ore). - Le finestre DVR possono coprire qualsiasi intervallo di tempo, inclusi quelli futuri.
Tuttavia, il numero di sessioni DVR con
dvrWindows
che si estendono a un momento futuro è limitato a una. - Non è previsto alcun limite al numero di sessioni DVR in cui tutte le finestre DVR si riferiscono esclusivamente al passato.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud, che si trova nel campo Numero progetto della pagina Impostazioni IAMLOCATION
: la località in cui si trova il tuo canale. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: un identificatore del canale definito dall'utenteDVR_SESSION_ID
: un identificatore definito dall'utente per la sessione DVRINTERVAL_START_TIME
: l'ora Unix del mark-in nel manifest dello stream live originale; utilizza un timestamp in formato "Zulu" UTC RFC3339 (ad es.2014-10-02T15:01:23Z
)INTERVAL_END_TIME
: l'ora Unix del markup nel manifest del live streaming originale; utilizza un timestamp in formato "Zulu" UTC RFC3339 (ad es.2014-10-02T15:01:23Z
)
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/dvrSessions/DVR_SESSION_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Questo comando crea un'operazione a lunga esecuzione (LRO) che puoi utilizzare per monitorare l'avanzamento della richiesta. Per ulteriori informazioni, consulta Gestire le operazioni che richiedono molto tempo .
Recupera la sessione DVR
Per ottenere una sessione DVR, utilizza il metodo
projects.locations.channels.dvrSessions.get
.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_NUMBER
: il numero del tuo progetto Google Cloud. Puoi trovarlo nel campo Numero progetto della pagina Impostazioni IAM.LOCATION
: la località in cui si trova il tuo canale. Utilizza una delle regioni supportateMostra sedius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: un identificatore del canale definito dall'utenteDVR_SESSION_ID
: un identificatore definito dall'utente per la sessione DVR
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/dvrSessions/DVR_SESSION_ID", "createTime": CREATE_TIME, "startTime": START_TIME, "updateTime": UPDATE_TIME, "state": "SUCCEEDED", "dvrManifests": [ { "manifestKey": "manifest_hls", "outputUri": "gs://BUCKET_NAME/dvr/DVR_SESSION_ID/main.m3u8" } ], "dvrWindows": [ { "timeInterval": { "startTime": "INTERVAL_START_TIME", "endTime": "INTERVAL_END_TIME" } } ] }
La risposta deve contenere un campo state
che indichi
lo stato della sessione:
{
...
"state": "PENDING" // DVR session is waiting to be processed (for example, it is waiting for the channel to start)
...
}
Consulta la documentazione di riferimento di state
per l'elenco degli stati e le relative descrizioni.
Verifica i contenuti del bucket
Apri il bucket Cloud Storage come specificato nel campo
dvrManifests.outputUri
della sessione DVR. Verifica che contenga i seguenti file e directory:
- Un manifest di primo livello per la sessione DVR con lo stesso nome del
manifests.fileName
specificato nella configurazione del canale (ad esempio,main.m3u8
). Puoi riprodurre questo manifest utilizzando un media player online. - Una sottodirectory per ogni
muxStreams.key
specificato nel canale (ad es.mux_video_ts
). Ogni sottodirectory contiene una playlist per la sessione DVR (ad es.index-1.m3u8
).
Riproduci la sessione DVR
Per riprodurre il file multimediale generato in Shaka Player: compila i seguenti passaggi:
- Rendi pubblicamente leggibile il bucket Cloud Storage che hai creato.
- Per abilitare la condivisione delle risorse tra origini (CORS) su un bucket Cloud Storage, segui questi passaggi:
- Crea un file JSON contenente quanto segue:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
Esegui il seguente comando dopo aver sostituito
JSON_FILE_NAME
con il nome del file JSON creato nel passaggio precedente:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crea un file JSON contenente quanto segue:
- Nel bucket Cloud Storage, individua il file generato. Fai clic su Copia URL nella colonna Accesso pubblico del file.
- Vai a Shaka Player, un lettore per live streaming online.
- Fai clic su Custom Content (Contenuti personalizzati) nella barra di navigazione in alto.
- Fai clic sul pulsante +.
Incolla l'URL pubblico del file nella casella Manifest URL (URL del manifest).
Digita un nome nella casella Name (Nome).
Fai clic su Salva.
Fai clic su Play (Riproduci).
Dovresti vedere una sequenza di prova riprodotta come live streaming.
Eventi di interruzione pubblicitaria
Se hai creato un evento di interruzione pubblicitaria per il live streaming, la sessione DVR contiene i segmenti di annunci così come appaiono nel live streaming.