Creare una sessione DVR

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 IAM
  • LOCATION: la posizione in cui creare l'endpoint di input. Utilizza una delle regioni supportate
    Mostra sedi
    • us-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 IAM
  • LOCATION: la località in cui si trova l'endpoint di input. Utilizza una delle regioni supportate
    Mostra sedi
    • us-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 IAM
  • LOCATION: la località in cui creare il canale. Utilizza una delle regioni supportate
    Mostra sedi
    • us-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 caratteri
  • INPUT_ID: l'identificatore definito dall'utente per l'endpoint di input
  • BUCKET_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 IAM
  • LOCATION: la località in cui si trova il tuo canale. Utilizza una delle regioni supportate
    Mostra sedi
    • us-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 in dvrWindows.
  • 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 campo dvrManifests.outputUri. Questo URI si trova nel percorso specificato dal campo outputUri 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 a endTime in ogni timeInterval.
  • startTime e endTime 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'ultimo timeInterval in dvrWindows può essere lasciato vuoto. In questo caso, il valore endTime 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 IAM
  • LOCATION: la località in cui si trova il tuo canale. Utilizza una delle regioni supportate
    Mostra sedi
    • us-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
  • DVR_SESSION_ID: un identificatore definito dall'utente per la sessione DVR
  • INTERVAL_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 supportate
    Mostra sedi
    • us-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
  • DVR_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:

  1. Rendi pubblicamente leggibile il bucket Cloud Storage che hai creato.
  2. Per abilitare la condivisione delle risorse tra origini (CORS) su un bucket Cloud Storage, segui questi passaggi:
    1. Crea un file JSON contenente quanto segue:
      [
        {
          "origin": ["https://shaka-player-demo.appspot.com/"],
          "responseHeader": ["Content-Type", "Range"],
          "method": ["GET", "HEAD"],
          "maxAgeSeconds": 3600
        }
      ]
    2. 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
  3. Nel bucket Cloud Storage, individua il file generato. Fai clic su Copia URL nella colonna Accesso pubblico del file.
  4. Vai a Shaka Player, un lettore per live streaming online.
  5. Fai clic su Custom Content (Contenuti personalizzati) nella barra di navigazione in alto.
  6. Fai clic sul pulsante +.
  7. Incolla l'URL pubblico del file nella casella Manifest URL (URL del manifest).

  8. Digita un nome nella casella Name (Nome).

  9. Fai clic su Salva.

  10. Fai clic su Play (Riproduci).

Dovresti vedere una sequenza di prova riprodotta come live streaming.

Video con pattern di prova

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.