Creare overlay statici

Questa pagina mostra come generare immagini in overlay statiche sopra un live streaming. Un'immagine in overlay statica rimane visibile per l'intero live streaming. Puoi configurare la risoluzione e la posizione di un'immagine in overlay statica.

Configura il progetto Google Cloud e l'autenticazione

Se non hai creato un progetto Google Cloud e le credenziali, consulta Prima di iniziare.

Carica un'immagine nel bucket Cloud Storage

  1. Nella console Google Cloud, vai alla pagina Browser Cloud Storage.
    Vai alla pagina Browser Cloud Storage
  2. Fai clic sul nome del bucket per aprirlo.
  3. Fai clic su Carica file.
  4. Seleziona un file immagine (JPEG o PNG) da caricare dalla tua macchina locale. Puoi utilizzare questa immagine di overlay di esempio.

L'immagine è ora salvata nel bucket Cloud Storage.

Creare una risorsa

Gli asset sono video o immagini che possono essere utilizzati con l'API Live Stream. Crea un asset immagine da utilizzare come overlay statico.

Per creare una risorsa, utilizza il metodo projects.locations.assets.create.

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 paginaImpostazioni IAM.
  • LOCATION: la località in cui creare l'asset. 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
  • ASSET_ID: un identificatore definito dall'utente per la nuova risorsa 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. Ad esempio: my-asset.
  • ASSET_URI: l'URI dell'immagine nel bucket Cloud Storage da utilizzare, ad esempio gs://my-bucket/my-image.png

Corpo JSON della richiesta:

{
  "image": {
    "uri": "ASSET_URI"
  }
}

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/assets/ASSET_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Copia il valore OPERATION_ID restituito da utilizzare nella sezione successiva.

Controlla il risultato

Utilizza il metodo projects.locations.operations.get per verificare se la risorsa è stata creata. Se la risposta contiene "done: false", ripeti il comando finché la risposta non contiene "done: true".

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 paginaImpostazioni IAM.
  • LOCATION: la località in cui si trova la risorsa. 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
  • OPERATION_ID: l'identificatore dell'operazione

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,
    "endTime": END_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Asset",
    "name": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "createTime": CREATE_TIME,
    "updateTime": UPDATE_TIME,
    "image": {
      "uri": "ASSET_URI"
    },
    "crc32c": "ae1EJg==",
    "state": "ACTIVE"
  }
}

Crea l'endpoint di input

Per creare l'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 . Puoi trovarlo nel campo Numero progetto della paginaImpostazioni 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.

Corpo JSON della richiesta:

{
  "type": "RTMP_PUSH"
}

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
}

Puoi controllare il risultato dell'operazione di creazione dell'input utilizzando il nuovo ID operazione.

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 . Puoi trovarlo nel campo Numero progetto della paginaImpostazioni 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 visualizzato per utilizzarlo in un secondo momento nella sezione Inviare lo stream di input.

Creare il canale

Per creare il canale, utilizza il metodo projects.locations.channels.create.

Prendi nota dell'array staticOverlays nella configurazione del canale:

"staticOverlays": [
  {
    "asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "position": {
      "x": 0.5,
      "y": 0.5
    },
    "resolution": {
      "w": 0.1
    },
    "opacity": 0.8
  }
],

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 paginaImpostazioni 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
  • ASSET_ID: l'identificatore definito dall'utente per la risorsa

Corpo JSON della richiesta:

{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "staticOverlays": [
    {
      "asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
      "position": {
        "x": 0.5,
        "y": 0.5
      },
      "resolution": {
        "w": 0.1
      },
      "opacity": 0.8
    },
  ],
  "elementaryStreams": [
    {
      "key": "es_video",
      "videoStream": {
        "h264": {
          "profile": "high",
          "widthPixels": 1280,
          "heightPixels": 720,
          "bitrateBps": 3000000,
          "frameRate": 30
        }
      }
    },
    {
      "key": "es_audio",
      "audioStream": {
        "codec": "aac",
        "channelCount": 2,
        "bitrateBps": 160000
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": ["es_video", "es_audio"],
      "segmentSettings": { "segmentDuration": "2s" }
    }
  ],
  "manifests": [
    {
      "key": "manifest_hls",
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5
    }
  ]
}

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
}

Puoi controllare il risultato dell'operazione di creazione del canale utilizzando il nuovo ID operazione.

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 . Puoi trovarlo nel campo Numero progetto della paginaImpostazioni 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
}

Puoi controllare il risultato dell'operazione di inizio del canale utilizzando il nuovo ID operazione.

Invia il flusso di input

Apri una nuova finestra del terminale. Esegui il seguente comando utilizzandoINPUT_STREAM_URI della sezione Ottieni 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

Riproduci il live streaming generato

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 main.m3u8 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 Save (Salva).

  10. Fai clic su Play (Riproduci).

L'overlay dovrebbe apparire sopra il live streaming.

Video con pattern di prova