Créer des superpositions statiques

Cette page explique comment générer des images superposées statiques sur un flux en direct. Une image en superposition statique reste affichée pendant toute la durée de la diffusion en direct. Vous pouvez configurer la résolution et la position d'une image de superposition statique.

Configurer votre authentification et votre projet Google Cloud

Si vous n'avez pas créé projet Google Cloud et identifiants, consultez la page Avant de commencer

Importer une image dans votre bucket Cloud Storage

  1. Dans la console Google Cloud, accédez à la page "Navigateur Cloud Storage".
    Accéder à la page du navigateur Cloud Storage
  2. Cliquez sur le nom de votre bucket pour l'ouvrir.
  3. Cliquez sur Importer des fichiers.
  4. Sélectionnez un fichier image (JPEG ou PNG) à importer depuis votre ordinateur local. Toi utilisez cet exemple d'image en superposition.

Votre image est à présent enregistrée dans le bucket Cloud Storage.

Créer un élément

Les éléments sont des vidéos ou des images que vous pouvez utiliser avec l'API Live Stream. Créez un élément image à utiliser comme superposition statique.

Pour créer un composant, utilisez la projects.locations.assets.create.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER: votre projet Google Cloud numéro ; celui-ci est indiqué dans le champ Numéro du projet Page Paramètres IAM
  • LOCATION : emplacement dans lequel créer l'asset. Utilisez l'une des régions disponibles.
    Afficher les lieux
    • 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 : identifiant défini par l'utilisateur pour le nouvel élément à créer. Cette valeur doit comporter entre 1 et 63 caractères. Elle doit commencer et se terminer par [a-z0-9]. peut contenir des tirets (-) entre les caractères. Par exemple, my-asset.
  • ASSET_URI: URI de l'image dans votre Bucket Cloud Storage à utiliser, par exemple gs://my-bucket/my-image.png

Corps JSON de la requête :

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

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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
}

Copiez l'élément renvoyé. OPERATION_ID à utiliser dans la section suivante.

Vérifier le résultat

Utilisez la méthode projects.locations.operations.get pour vérifier si l'asset a été créé. Si la réponse contient "done: false", répétez la commande jusqu'à ce que la réponse contienne "done: true".

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER: votre projet Google Cloud numéro ; celui-ci est indiqué dans le champ Numéro du projet Page Paramètres IAM
  • LOCATION : emplacement de votre composant. Utilisez l'une des régions disponibles.
    Afficher les lieux
    • 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: identifiant de l'opération.

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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"
  }
}

Créer le point de terminaison d'entrée

Pour créer le point de terminaison d'entrée, utilisez la fonction projects.locations.inputs.create.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER: votre projet Google Cloud numéro ; celui-ci est indiqué dans le champ Numéro du projet Page Paramètres IAM
  • LOCATION: emplacement dans lequel créer l'entrée endpoint; utilisez l'une des régions disponibles.
    Afficher les lieux
    • 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: identifiant défini par l'utilisateur pour la nouvelle entrée. point de terminaison à créer (auquel vous envoyez votre flux d'entrée). Cette valeur doit comporter entre 1 et 63 caractères, commencer et se terminer par [a-z0-9], et peut contenir des tirets (-) entre les caractères. Par exemple, my-input.

Corps JSON de la requête :

{
  "type": "RTMP_PUSH"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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
}

Vous pouvez vérifier le résultat de la création de l'entrée. à l'aide du nouvel ID d'opération.

Obtenir les détails du point de terminaison d'entrée

Pour obtenir les détails du point de terminaison d'entrée, utilisez la méthode projects.locations.inputs.get.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER : numéro de votre projet Google Cloud, qui se trouve dans le champ Numéro de projet sur la page Paramètres IAM.
  • LOCATION : emplacement de votre point de terminaison d'entrée. Utilisez l'une des régions disponibles.
    Afficher les lieux
    • 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: identifiant défini par l'utilisateur pour point de terminaison d'entrée

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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"
}

Recherchez le champ uri et copiez le INPUT_STREAM_URI renvoyé pour l'utiliser plus tard dans la section Envoyer le flux d'entrée.

Créer la chaîne

Pour créer le critère, utilisez la méthode projects.locations.channels.create.

Notez la présence du tableau staticOverlays dans la configuration de la chaîne:

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

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER : numéro de votre projet Google Cloud, qui se trouve dans le champ Numéro de projet sur la page Paramètres IAM.
  • LOCATION: emplacement dans lequel créer la canal ; utilisez l'une des régions disponibles.
    Afficher les lieux
    • 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 : identifiant défini par l'utilisateur pour le canal à créer. Cette valeur doit comporter entre 1 et 63 caractères, commencer et se terminer par [a-z0-9], et peut contenir des tirets (-) entre les caractères.
  • INPUT_ID: identifiant défini par l'utilisateur pour point de terminaison d'entrée
  • BUCKET_NAME: nom de l'instance Cloud Storage bucket que vous avez créé pour contenir le fichier manifeste et les fichiers segments de la diffusion en direct
  • ASSET_ID: identifiant défini par l'utilisateur pour élément

Corps JSON de la requête :

{
  "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
    }
  ]
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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
}

Vous pouvez vérifier le résultat de l'opération de création de chaîne à l'aide du nouvel ID d'opération.

Créer la chaîne

Pour créer un canal, utilisez l' projects.locations.channels.start.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_NUMBER: votre projet Google Cloud numéro ; celui-ci est indiqué dans le champ Numéro du projet Page Paramètres IAM
  • LOCATION: emplacement où se trouve votre chaîne localisé ; utilisez l'une des régions disponibles.
    Afficher les emplacements
    • 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: identifiant de la chaîne défini par l'utilisateur

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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
}

Vous pouvez vérifier le résultat du lancement de la chaîne. à l'aide du nouvel ID d'opération.

Envoyer le flux d'entrée

Ouvrez une nouvelle fenêtre de terminal. Exécutez la commande suivante, en utilisant INPUT_STREAM_URI à partir de Section Obtenir les détails du point de terminaison d'entrée:

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv INPUT_STREAM_URI

Lire la diffusion en direct générée

Pour lire le fichier multimédia généré dans Shaka Player, procédez comme suit :

  1. Rendez le bucket Cloud Storage que vous avez créé publiquement lisible.
  2. Pour activer le partage des ressources entre origines multiples (CORS) sur un bucket Cloud Storage, procédez comme suit :
    1. Créez un fichier JSON contenant les informations suivantes :
      [
        {
          "origin": ["https://shaka-player-demo.appspot.com/"],
          "responseHeader": ["Content-Type", "Range"],
          "method": ["GET", "HEAD"],
          "maxAgeSeconds": 3600
        }
      ]
    2. Exécutez la commande suivante en remplaçant JSON_FILE_NAME par le nom du fichier JSON que vous avez créé à l'étape précédente :
      gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
  3. Dans le bucket Cloud Storage, recherchez les main.m3u8. Cliquez sur Copier l'URL dans la colonne Accès public du fichier.
  4. Accédez à Shaka Player, un lecteur de diffusion en direct en ligne.
  5. Cliquez sur Contenu personnalisé dans la barre de navigation supérieure.
  6. Cliquez sur le bouton +.
  7. Collez l'URL publique du fichier dans la zone URL du fichier manifeste.

  8. Saisissez un nom dans la zone Nom.

  9. Cliquez sur Enregistrer.

  10. Cliquez sur Play (Jouer).

La superposition devrait apparaître au-dessus du flux en direct.

Vidéo de format test