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 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
: 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 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
: 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 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
: 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 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
: 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 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
: 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.
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".
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 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
: 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 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
: 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 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
: 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
En la Google Cloud consola, ve a la página Navegador de Cloud Storage.
Selecciona la casilla de verificación que se encuentra junto al bucket que creaste.
Haz clic en Borrar.
En la ventana de diálogo que aparece, haz clic en Borrar para borrar el bucket y su contenido.