Creare overlay statici

Questa pagina mostra come generare immagini 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 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 dal computer locale. Tu puoi utilizzare questa immagine overlay di esempio.

L'immagine è ora salvata nel bucket Cloud Storage.

Creare una risorsa

Le risorse 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 tuo progetto Google Cloud numero; che si trova nel campo Numero progetto nella Pagina Impostazioni IAM
  • LOCATION: la posizione in cui creare il asset; utilizza una delle regioni supportate
    Sedi dei negozi
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • 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 delle seguenti 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 tuo progetto Google Cloud numero; che si trova nel campo Numero progetto nella Pagina Impostazioni IAM
  • LOCATION: la località in cui si trova la risorsa. Utilizza una delle regioni supportate
    Mostra località
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • 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 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
    Sedi dei negozi
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • 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 delle seguenti 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 della 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 tuo progetto Google Cloud numero; che si trova nel campo Numero progetto nella Pagina Impostazioni IAM
  • LOCATION: la posizione in cui si trova l'endpoint di input. Utilizza una delle regioni supportate
    Sedi dei negozi
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: l'identificatore definito dall'utente per la endpoint di input

Per inviare la richiesta, espandi una delle seguenti 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"
}

Trova il campo uri e copia il valore restituito INPUT_STREAM_URI da utilizzare in seguito nella sezione Invia il flusso 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, che si trova nel campo Numero progetto della pagina Impostazioni IAM
  • LOCATION: la posizione in cui creare il channel; utilizza una delle regioni supportate
    Sedi dei negozi
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: un identificatore definito dall'utente per il canale per create; 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 delle seguenti 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, effettua 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 located; utilizza una delle regioni supportate
    Sedi dei negozi
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: un identificatore del canale definito dall'utente

Per inviare la richiesta, espandi una delle seguenti 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 questo comando utilizzando INPUT_STREAM_URI dal Sezione Ottenere 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 leggibile pubblicamente 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, uno player 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