Crear superposiciones estáticas

En esta página se explica cómo generar imágenes de superposición estáticas sobre una emisión en directo. Una imagen superpuesta estática permanece durante toda la emisión en directo. Puedes configurar la resolución y la posición de una imagen superpuesta estática.

Configurar el Google Cloud proyecto y la autenticación

Si no has creado un Google Cloud proyecto y credenciales, consulta la sección Antes de empezar.

Subir una imagen a un segmento 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. Haga clic en el nombre del suyo para abrirlo.
  3. Haz clic en Subir archivos.
  4. Selecciona un archivo de imagen (JPEG o PNG) para subirlo desde tu máquina local. Puedes usar esta imagen de superposición de ejemplo.

La imagen se ha guardado en el segmento de Cloud Storage.

Crear un recurso

Los recursos son vídeos o imágenes que se pueden usar con la API Live Stream. Crea un recurso de imagen para usarlo como superposición estática.

Para crear un recurso, usa el método projects.locations.assets.create.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: la ubicación en la que se creará el recurso. 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
  • ASSET_ID: identificador definido por el usuario del nuevo recurso que se va a crear. Este valor debe tener entre 1 y 63 caracteres, empezar y terminar con [a-z0-9], y puede incluir guiones (-) entre caracteres. Por ejemplo, my-asset.
  • ASSET_URI: el URI de la imagen de tu segmento de Cloud Storage que quieras usar, como gs://my-bucket/my-image.png

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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 el OPERATION_ID devuelto para usarlo en la siguiente sección.

Comprobar el resultado

Usa el método projects.locations.operations.get para comprobar si se ha creado el recurso. Si la respuesta contiene "done: false", repite el comando hasta que la respuesta contenga "done: true".

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: la ubicación de tu recurso. 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
  • OPERATION_ID: el identificador de la operación

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Crear el endpoint de entrada

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: ubicación en la que se creará el punto final 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: identificador definido por el usuario del nuevo endpoint de entrada que se va a crear (al que se envía el flujo de entrada). Este valor debe tener entre 1 y 63 caracteres, empezar y terminar con [a-z0-9], y puede incluir guiones (-) entre caracteres. Por ejemplo, my-input.

Cuerpo JSON de la solicitud:

{
  "type": "RTMP_PUSH"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Puedes comprobar el resultado de la operación de creación de entrada con el nuevo ID de operación.

Obtener detalles de un endpoint de entrada

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: la ubicación de tu endpoint 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: identificador definido por el usuario del endpoint de entrada

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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 valor devuelto INPUT_STREAM_URI para usarlo más adelante en la sección Enviar el flujo de entrada.

Crear el canal

Para crear el canal, utiliza el método projects.locations.channels.create.

Fíjate en la matriz staticOverlays de la configuración del canal:

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: la ubicación en la que se creará el 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: identificador definido por el usuario del canal que se va a crear. Este valor debe tener entre 1 y 63 caracteres, empezar y terminar con [a-z0-9], y puede contener guiones (-) entre caracteres.
  • INPUT_ID: identificador definido por el usuario del endpoint de entrada
  • BUCKET_NAME: el nombre del segmento de Cloud Storage que has creado para alojar el manifiesto de la emisión en directo y los archivos de segmento
  • ASSET_ID: identificador definido por el usuario del recurso

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Puedes comprobar el resultado de la operación de creación de canal con el nuevo ID de operación.

Iniciar el canal

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_NUMBER: número de tu proyecto. Google Cloud Se encuentra en el campo Número de proyecto de la página Configuración de gestión de identidades y accesos.
  • LOCATION: la ubicación de tu canal. Elige 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: identificador definido por el usuario del canal

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Puedes consultar el resultado de la operación de inicio del canal con el nuevo ID de operación.

Enviar el flujo de entrada

Abre una nueva ventana de terminal. Ejecuta el siguiente comando con INPUT_STREAM_URI de la sección Obtener detalles del endpoint de entrada:

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

Reproducir la emisión en directo generada

Para reproducir el archivo multimedia generado en Shaka Player, sigue estos pasos:

  1. Haz que el segmento de Cloud Storage que has creado se pueda leer públicamente.
  2. Para habilitar el uso compartido de recursos entre dominios (CORS) en un segmento de Cloud Storage, sigue estos pasos:
    1. Crea un archivo JSON que contenga lo siguiente:
      [
        {
          "origin": ["https://shaka-player-demo.appspot.com/"],
          "responseHeader": ["Content-Type", "Range"],
          "method": ["GET", "HEAD"],
          "maxAgeSeconds": 3600
        }
      ]
    2. Ejecuta el siguiente comando después de sustituir JSON_FILE_NAME por el nombre del archivo JSON que has creado en el paso anterior:
      gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
  3. En el segmento de Cloud Storage, busca el archivo main.m3u8generado. En la columna Acceso público del archivo, haz clic en Copiar URL.
  4. Ve a Shaka Player, un reproductor de emisiones en directo online.
  5. En la barra de navegación superior, haga clic en Contenido personalizado.
  6. Haz clic en el botón +.
  7. Pega la URL pública del archivo en el cuadro URL del manifiesto.

  8. Escribe un nombre en el cuadro Nombre.

  9. Haz clic en Guardar.

  10. Haz clic en Reproducir.

Debería aparecer la superposición en la emisión en directo.

Vídeo de carta de ajuste