En esta página, se muestra cómo generar imágenes de superposición estáticas sobre una transmisión en vivo. Una imagen de superposición estática persiste durante toda la transmisión en vivo. Puedes configurar la resolución y la posición de una imagen superpuesta estática.
Configura el proyecto de Google Cloud y la autenticación
Si no creaste un Proyecto de Google Cloud y credenciales, consulta Antes de comenzar.Sube una imagen a tu bucket de Cloud Storage
- En la consola de Google Cloud, ve a la página Navegador de Cloud Storage.
Ir a la página del navegador de Cloud Storage - Haz clic en el nombre de su bucket para abrirlo.
- Haz clic en Subir archivos.
- Selecciona un archivo de imagen (JPEG o PNG) para subirlo desde tu máquina local. Tú puedes usar esta imagen superpuesta de ejemplo.
La imagen ya está guardada en el bucket de Cloud Storage.
Crea un recurso
Los recursos son imágenes o imágenes que se pueden usar con la API de Live Stream. Crea un recurso de imagen para usarlo como superposición estática.
Para crear un recurso, utiliza el
projects.locations.assets.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 de 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 recurso. Usa una de las regiones compatibles.Cómo mostrar ubicacionesus-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
: Es un identificador definido por el usuario para el recurso nuevo que se creará. 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-asset
.ASSET_URI
: Es el URI de la imagen en tu bucket de Cloud Storage para usar, comogs://my-bucket/my-image.png
Cuerpo JSON de la solicitud:
{ "image": { "uri": "ASSET_URI" } }
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/assets/ASSET_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Copia el OPERATION_ID
que se muestra para usarlo en la siguiente sección.
Verifica el resultado
Usa el método projects.locations.operations.get
para verificar si
se creó el recurso. Si la respuesta contiene "done: false"
,
Repite el comando hasta que la respuesta contenga "done: true"
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: Es tu proyecto de Google Cloud. número; se encuentra en el campo Número de proyecto de la Página Configuración de IAMLOCATION
: Es la ubicación en la que se encuentra tu recurso. Usa una de las regiones compatibles.Cómo mostrar ubicacionesus-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
: Es el identificador de la operación.
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, "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" } }
Crea el extremo de entrada
Para crear el extremo de entrada, usa el
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 de 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.Cómo mostrar ubicacionesus-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
: 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 }
Puedes verificar el resultado de la operación de creación de entrada con el nuevo ID de operació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 tu proyecto de Google Cloud. número; se encuentra en el campo Número de proyecto de la Página Configuración de IAMLOCATION
: Es la ubicación en la que se encuentra el extremo de entrada. localizado; usa una de las regiones admitidasCómo mostrar ubicacionesus-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
: Es el identificador definido por el usuario para la 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 muestra para usarlo más adelante en la sección Envía el flujo de entrada.
Crea el canal
Para crear el canal, usa el
projects.locations.channels.create
.
Observa el array staticOverlays
en 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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: Es tu proyecto de Google Cloud. número; se encuentra en el campo Número de proyecto de la Página Configuración de IAMLOCATION
: Es la ubicación en la que se creará el canal. Usa una de las regiones compatibles.Mostrar ubicacionesus-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
: 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 los caracteres.INPUT_ID
: Es el identificador definido por el usuario para el extremo de entrada.BUCKET_NAME
: Es el nombre de Cloud Storage. bucket que creaste para guardar el manifiesto de la transmisión en vivo y los archivos de segmentosASSET_ID
: Es el identificador definido por el usuario para la 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, 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 }
Puedes consultar el resultado de la creación del canal. operación con el ID de operación nuevo.
Inicia el canal
Para crear un canal, utiliza el
projects.locations.channels.start
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: Es tu proyecto de Google Cloud. número; se encuentra en el campo Número de proyecto de la Página Configuración de IAMLOCATION
: Es la ubicación donde se encuentra tu canal. localizado; usa una de las regiones admitidasMostrar ubicacionesus-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
: 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 }
Puedes consultar el resultado del inicio del canal. operación con el ID de operación nuevo.
Cómo enviar el flujo de entrada
Abre una nueva ventana de terminal. Ejecuta el siguiente comando con
INPUT_STREAM_URI
de la
Sección Obtén detalles del extremo de entrada:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Reproduce la transmisión en vivo generada
Para reproducir el archivo multimedia generado en Shaka Player, sigue estos pasos:
- Configura el bucket de Cloud Storage para que sea legible de forma pública.
- Para habilitar el uso compartido de recursos multiorigen (CORS) en un depósito de Cloud Storage, haz lo siguiente:
- Crea un archivo JSON que contenga la siguiente información:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
Ejecuta el siguiente comando después de reemplazar
JSON_FILE_NAME
por el nombre del archivo JSON que creaste en el paso anterior:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crea un archivo JSON que contenga la siguiente información:
- En el bucket de Cloud Storage, busca el archivo
main.m3u8
generado. Haz clic en Copiar URL en la columna Acceso público del archivo. - Navega a Shaka Player, un reproductor en línea de transmisión en vivo.
- Haz clic en Contenido personalizado en la barra de navegación superior.
- Haz clic en el botón +.
Pega la URL pública del archivo en la casilla URL del manifiesto.
Escribe un nombre en el cuadro Nombre.
Haz clic en Guardar.
Haz clic en Play!.
La superposición debería aparecer sobre la transmisión en vivo.