Prévisualiser les flux d'entrée en temps quasi réel

Cette page explique comment prévisualiser vos flux d'entrée avec une latence très faible afin de détecter les problèmes ou les événements potentiels en temps quasi réel. Cela vous permet de prendre des mesures correctives, comme mettre en pause les diffusions, insérer des annonces ou afficher des écrans, pour offrir une expérience de visionnage de haute qualité à vos spectateurs.

Le contenu de l'aperçu est disponible au format suivant :

  • Format : MPEG-TS
  • Vidéo :
    • Résolution : 640 x 480
    • Codec : H.264
    • Fréquence d'images : 25 images par seconde (FPS)
  • Audio
    • Codec : AAC
    • Taux d'échantillonnage : 48 kHz
    • Protocole : HTTPS

Avant de commencer

Cette page suppose que vous avez suivi les étapes de la section Avant de commencer du guide de démarrage rapide pour les diffusions en direct HLS.

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

Pour créer un point de terminaison d'entrée, utilisez la méthode projects.locations.inputs.create.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : emplacement dans lequel créer le point de terminaison d'entrée ; 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID : identifiant défini par l'utilisateur pour le nouveau point de terminaison d'entrée à 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
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

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, effectuez les remplacements suivants :

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : emplacement de votre point de terminaison d'entrée. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID : identifiant défini par l'utilisateur pour le 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 ultérieurement dans la section Envoyer le flux d'entrée.

Créer une chaîne

Pour créer un canal, utilisez la méthode projects.locations.channels.create. Les exemples suivants créent un canal qui génère une diffusion en direct HLS. La diffusion en direct se compose d'un seul rendu haute définition (1 280 x 720).

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : emplacement dans lequel créer le canal. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • 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 le point de terminaison d'entrée
  • BUCKET_NAME : nom du bucket Cloud Storage que vous avez créé pour contenir le fichier manifeste et les fichiers de segment du flux en direct

Corps JSON de la requête :

{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "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
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

Démarrer la chaîne

Pour démarrer un canal, utilisez la méthode projects.locations.channels.start.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : région où se trouve votre canal. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID : identifiant défini par l'utilisateur pour le canal

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
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

Installer un encodeur

Pour utiliser l'API, vous avez besoin d'un encodeur permettant de générer des flux d'entrée traités par l'API.

Installez ffmpeg, car cette page explique comment utiliser ffmpeg pour générer des flux d'entrée. Vous pouvez l'installer dans Cloud Shell à l'aide de la commande suivante.

sudo apt install ffmpeg

Envoyer le flux d'entrée

Ouvrez une nouvelle fenêtre de terminal. Exécutez la commande suivante en utilisant INPUT_STREAM_URI de la section Obtenir les détails du point de terminaison d'entrée. Cette commande génère un flux de test.

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

Obtenir l'URL du point de terminaison et le jeton du porteur

Pour obtenir l'URL du point de terminaison pour le contenu d'aperçu et le jeton du porteur requis pour l'authentification, utilisez la méthode projects.locations.inputs.preview.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : emplacement de votre point de terminaison d'entrée. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID : identifiant défini par l'utilisateur pour le 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 :

{
  "uri":  ENDPOINT_URL, # For example, "preview.k3fhpvei3vvf.us-central1.livestream.goog/inputs/my-preview-input",
  "bearerToken": "BEARER_TOKEN"
}

Vous utiliserez les valeurs des champs uri et bearerToken dans la section suivante.

Afficher le contenu d'aperçu

Vous disposez des options principales suivantes pour afficher le contenu de l'aperçu :

  • mpegts.js, un lecteur de flux HTML5
  • FFplay, un lecteur multimédia en ligne de commande

mpegts.js

mpegts.js est une bibliothèque disponible sur GitHub pour lire des flux MPEG-TS dans un navigateur Web.

Copiez les valeurs des champs bearerToken et uri que vous avez reçues à une étape précédente dans le code HTML suivant. Créez un fichier HTML à partir du code HTML suivant et ouvrez-le dans un navigateur.

<html>
  <head>
  <script src="https://xqq.im/mpegts.js/dist/mpegts.js"></script>
  <video id="video" autoplay controls muted></video>
  <script>
    function main() {
      if (!mpegts.getFeatureList().mseLivePlayback) {
        console.log("MSE live playback is not supported by the browswer!")
        return;
      }
      var videoElement = document.getElementById("video");
      player = mpegts.createPlayer(
        {
          type: "mse",
          isLive: true,
          <!-- Placeholder: Replace ENDPOINT_URL with the actual endpoint URL -->
          url: "ENDPOINT_URL",
        },
        {
          headers: {
            <!-- Placeholder: Replace BEARER_TOKEN with the actual bearer token -->
            Authorization: "BEARER_TOKEN",
          },
        }
      );
      player.attachMediaElement(videoElement);
      player.load();
      player.play();
    }
    main();
  </script>
  </body>
</html>

Un modèle de test devrait s'afficher avec une latence inférieure à celle de la diffusion en direct associée. Ce lecteur de flux ne peut lire que la première piste audio d'un flux.

Vidéo de mire

FFplay

FFplay est un lecteur multimédia polyvalent en ligne de commande qui utilise les bibliothèques FFmpeg. Vous pouvez télécharger FFplay sur la page Télécharger FFmpeg.

Ouvrez une nouvelle fenêtre de terminal. Copiez les valeurs des champs bearerToken et uri que vous avez reçues lors d'une étape précédente dans la commande suivante, puis exécutez-la.

ffplay -headers "Authorization: Bearer BEARER_TOKEN" \
  -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 0 \
  ENDPOINT_URL

Un modèle de test devrait s'afficher avec une latence inférieure à celle de la diffusion en direct associée. ffplay permet de passer d'une piste audio à une autre en appuyant sur la touche A.

Vidéo de mire

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud , procédez comme suit :

Arrêter la chaîne

Utilisez la méthode projects.locations.channels.stop pour arrêter le canal. Vous devez arrêter la chaîne avant de pouvoir la supprimer.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : région où se trouve votre canal. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID : identifiant défini par l'utilisateur pour le canal

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": "stop",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

Arrêter le flux d'entrée

Si vous avez utilisé ffmpeg pour envoyer le flux d'entrée, la connexion est automatiquement interrompue une fois le canal arrêté.

Supprimer la chaîne

Utilisez la méthode projects.locations.channels.delete pour supprimer la chaîne. Vous devez supprimer le canal avant de pouvoir supprimer le point de terminaison d'entrée utilisé par le canal.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : région où se trouve votre canal. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID : identifiant défini par l'utilisateur pour le canal

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": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

Supprimer le point de terminaison d'entrée

Utilisez la méthode projects.locations.inputs.delete pour supprimer le point de terminaison d'entrée.

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

  • PROJECT_NUMBER : numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.
  • LOCATION : emplacement de votre point de terminaison d'entrée. 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-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID : identifiant défini par l'utilisateur pour le 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/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": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Cette commande crée une opération de longue durée (LRO, Long-running operation) que vous pouvez utiliser pour suivre la progression de votre requête. Pour en savoir plus, consultez Gérer les opérations de longue durée .

Supprimer le bucket Cloud Storage

  1. Dans la console Google Cloud , accédez à la page du navigateur Cloud Storage.

    Accéder à la page du navigateur Cloud Storage

  2. Cochez la case à côté du bucket que vous avez créé.

  3. Cliquez sur Supprimer.

  4. Dans la boîte de dialogue qui s'affiche, cliquez sur Supprimer pour supprimer le bucket et son contenu.