Obtén una vista previa de los flujos de entrada casi en tiempo real

En esta página, se describe cómo obtener una vista previa de tus transmisiones de entrada con una latencia muy baja para detectar posibles problemas o eventos casi en tiempo real. Esto te permite tomar medidas correctivas, como pausar transmisiones, insertar anuncios o mostrar pizarras, para mantener una experiencia de visualización de alta calidad para tus usuarios.

El contenido de vista previa está disponible en el siguiente formato:

  • Formato: MPEG-TS
  • Video:
    • Resolución: 640 x 480
    • Códec: H.264
    • Velocidad de fotogramas: 25 fotogramas por segundo (FPS)
  • Audio
    • Códec: AAC
    • Tasa de muestreo: 48 kHz
    • Protocolo: HTTPS

Antes de comenzar

En esta página, se supone que completaste los pasos de la sección Antes de comenzar de la Guía de inicio rápido para transmitir en vivo por HLS.

Crea un extremo de entrada

Para crear un extremo de entrada, usa el método projects.locations.inputs.create.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se creará el extremo de entrada. Usa una de las regiones compatibles.
    Mostrar ubicaciones
    • 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: Es un identificador definido por el usuario para el nuevo extremo de entrada que se creará (al que envías tu flujo de entrada). Este valor debe tener entre 1 y 63 caracteres, comenzar y terminar con [a-z0-9], y puede contener guiones (-) entre los caracteres. Por ejemplo, my-input.

Cuerpo JSON de la solicitud:

{
  "type": "RTMP_PUSH"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Obtén detalles del extremo de entrada

Para obtener los detalles del extremo de entrada, usa el método projects.locations.inputs.get.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu extremo de entrada. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es el identificador definido por el usuario para el extremo de entrada.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Busca el campo uri y copia el INPUT_STREAM_URI que se devolvió para usarlo más adelante en la sección Envía el flujo de entrada.

Crea un canal

Para crear un canal, usa el método projects.locations.channels.create. En los siguientes ejemplos, se crea un canal que genera una transmisión en vivo de HLS. La transmisión en vivo consta de una sola versión en alta definición (1280 x 720).

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se creará el canal. Usa una de las regiones compatibles.
    Mostrar ubicaciones
    • 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: Es un identificador definido por el usuario para el canal que se creará. Este valor debe tener entre 1 y 63 caracteres, comenzar y terminar con [a-z0-9], y puede contener guiones (-) entre caracteres.
  • INPUT_ID: Es el identificador definido por el usuario para el extremo de entrada.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste para contener los archivos de manifiesto y segmentos de la transmisión en vivo.

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Inicia el canal

Para iniciar un canal, usa el método projects.locations.channels.start.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu canal. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es un identificador definido por el usuario para el canal.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Instala un codificador

Para usar la API, necesitas un codificador para generar transmisiones de entrada que procese la API.

Instala ffmpeg, ya que en esta página se explica cómo usar ffmpeg para generar flujos de entrada. Puedes instalarlo en Cloud Shell con el siguiente comando.

sudo apt install ffmpeg

Envía la transmisión de entrada

Abre una nueva ventana de la terminal. Ejecuta el siguiente comando con INPUT_STREAM_URI de la sección Obtén detalles del extremo de entrada. Con este comando, se genera una transmisión de prueba.

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

Obtén la URL del extremo y el token de portador

Para obtener la URL del extremo del contenido de vista previa y el token de portador necesario para la autenticación, usa el método projects.locations.inputs.preview.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu extremo de entrada. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es el identificador definido por el usuario para el extremo de entrada.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Usarás los valores de los campos uri y bearerToken en la siguiente sección.

Mostrar el contenido de la vista previa

Tienes las siguientes opciones principales para mostrar el contenido de la vista previa:

  • mpegts.js, un reproductor de transmisiones HTML5
  • FFplay, un reproductor multimedia de línea de comandos

mpegts.js

mpegts.js es una biblioteca disponible en GitHub para reproducir transmisiones MPEG-TS en un navegador web.

Copia los valores de los campos bearerToken y uri que recibiste en un paso anterior en el siguiente código HTML. Crea un archivo HTML a partir del siguiente código HTML y ábrelo en un navegador.

<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>

Deberías ver un patrón de prueba que se reproduce con una latencia más baja que la de la transmisión en vivo asociada. Este reproductor de transmisión solo puede reproducir la primera pista de audio de una transmisión.

Video de patrón de prueba

FFplay

FFplay es un reproductor multimedia versátil de línea de comandos que usa las bibliotecas de FFmpeg. Puedes encontrar descargas de FFplay en la página Descargar FFmpeg.

Abre una nueva ventana de la terminal. Copia los valores de los campos bearerToken y uri que recibiste en un paso anterior en el siguiente comando y, luego, ejecútalo.

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

Deberías ver un patrón de prueba que se reproduce con una latencia más baja que la de la transmisión en vivo asociada. ffplay admite el cambio entre pistas de audio presionando la tecla "A".

Video de patrón de prueba

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

Detener el canal

Usa el método projects.locations.channels.stop para detener el canal. Debes detener el canal antes de borrarlo.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu canal. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es un identificador definido por el usuario para el canal.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Detener el flujo de entrada

Si usaste ffmpeg para enviar el flujo de entrada, la conexión se interrumpirá automáticamente después de que detengas el canal.

Borra el canal

Usa el método projects.locations.channels.delete para borrar el canal. Debes borrar el canal antes de borrar el extremo de entrada que usa el canal.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu canal. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es un identificador definido por el usuario para el canal.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Borra el extremo de entrada

Usa el método projects.locations.inputs.delete para borrar el extremo de entrada.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Es el número de tu proyecto Google Cloud , que se encuentra en el campo Número de proyecto de la página Configuración de IAM.
  • LOCATION: Es la ubicación en la que se encuentra tu extremo de entrada. Usa una de las regiones admitidas.
    Mostrar ubicaciones
    • 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: Es el identificador definido por el usuario para el extremo de entrada.

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Este comando crea una operación de larga duración (LRO) que puedes usar para hacer un seguimiento del progreso de tu solicitud. Consulta Administra operaciones de larga duración para obtener más información.

Borra el bucket de Cloud Storage

  1. En la Google Cloud consola, ve a la página Navegador de Cloud Storage.

    Ir a la página Navegador de Cloud Storage

  2. Selecciona la casilla de verificación que se encuentra junto al bucket que creaste.

  3. Haz clic en Borrar.

  4. En la ventana de diálogo que aparece, haz clic en Borrar para borrar el bucket y su contenido.