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
- En la Google Cloud consola, ve a la página Navegador de Cloud Storage.
Ir a la página Navegador de Cloud Storage - Haga clic en el nombre del suyo para abrirlo.
- Haz clic en Subir archivos.
- 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 ubicacionesus-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, comogs://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 ubicacionesus-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 ubicacionesus-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 ubicacionesus-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 ubicacionesus-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 entradaBUCKET_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 segmentoASSET_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 ubicacionesus-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:
- Haz que el segmento de Cloud Storage que has creado se pueda leer públicamente.
- Para habilitar el uso compartido de recursos entre dominios (CORS) en un segmento de Cloud Storage, sigue estos pasos:
- Crea un archivo JSON que contenga lo siguiente:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
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
- Crea un archivo JSON que contenga lo siguiente:
- En el segmento de Cloud Storage, busca el archivo
main.m3u8
generado. En la columna Acceso público del archivo, haz clic en Copiar URL. - Ve a Shaka Player, un reproductor de emisiones en directo online.
- En la barra de navegación superior, haga clic en Contenido personalizado.
- Haz clic en el botón +.
Pega la URL pública del archivo en el cuadro URL del manifiesto.
Escribe un nombre en el cuadro Nombre.
Haz clic en Guardar.
Haz clic en Reproducir.
Debería aparecer la superposición en la emisión en directo.