Grabación de vídeos

Visión general

La API de archivo de video de Vonage te permite grabar el audio y el video de una sesión en dos formatos:

  • Archivos compuestos (por defecto) produce archivos MP4 listos para su reproducción inmediata.
  • Archivos de flujo individuales agrupar cada flujo publicado en un ZIP de archivos multimedia por flujo más metadatos para su posprocesamiento.

Puede decidir qué formato utilizar cuando llame a la API REST de archivado o al SDK de servidor. Consulte la Comparación de flujos individuales y archivos compuestos para elegir el modo que mejor se adapte a tu flujo de trabajo.

Archivar requiere código tanto del lado del cliente como del lado del servidor. Para archivar sesiones, es necesario tener configurado un servidor HTTP. Puedes elegir el SDK de servidor para la configuración de su servidor. El SDK del servidor, al recibir los datos del SDK del cliente, realizará la función de archivado. El código del cliente invocará al código del servidor a través de llamadas HTTP.

  • En la mayoría de las Aplicaciones, el control de la grabación del archivo no se concedería a cada usuario final.

  • Puede tener sesiones archivadas automáticamente, que se graban cada vez que un cliente empieza a publicar un flujo.

  • Deberá configurar un destino Amazon S3 o Microsoft Azure para el almacenamiento de sus grabaciones de archivo.

Este tutorial repasará:

  • Iniciar una grabación de archivo
  • Detener una grabación de archivo
  • Cómo recuperar la información del registro de archivo

Antes de empezar

Antes de empezar a añadir la grabación a tu aplicación, asegúrate de que ya tienes una aplicación de vídeo básica en funcionamiento.

Si no deseas escribir tu propio servidor, puedes usar un servidor prediseñado implementado en Code Hub de Vonage. Dirígete a la página Servidor de aprendizaje por vídeo de Vonage (PHP) y haga clic en "Desplegar código". Esto descargará nuestro servidor de aprendizaje y lo lanzará automáticamente por ti.

Si desea explorar el código, puede hacer clic en "Obtener código" o dirigirse a GitHub y descarga el código en tu máquina local.

Sólo se pueden archivar sesiones que utilicen el Router multimedia de vídeo de Vonage (sesiones con el modo de medios enrutado)

Iniciar una grabación de archivo

A menos que su sesión esté configurada para archivarse automáticamente, deberá indicar a nuestro sistema que inicie la grabación de su sesión. En la práctica, esto significa que su interfaz presentará las opciones de grabación a un moderador (u otro rol apropiado), y su interfaz enviará una solicitud a un servidor back-end que hablará con la API para iniciar la grabación.

  1. Haga que su front-end envíe una petición a su servidor para iniciar el archivado.
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "sessionId": "value goes here"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

var serverURL = "server-url.com/archive/start" // replace this with your HTTP server URL

fetch(serverUrl, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
  1. Haga que su servidor back-end acepte la solicitud y se ponga en contacto con la API REST para iniciar el archivado.
try {
    const archive = await vonage.video.startArchive(sessionId);
    // The id property is useful to save off into a database
    console.log("new archive:", archive.id);
} catch(error) {
    console.error("Error starting archive: ", error);
}

Si utiliza directamente la API REST, obtendrá una respuesta similar a la siguiente:

{
   "sessionId": "flR1ZSBPY3QgMjkgMTI6MTM6MjMgUERUIDIwMTN",
   "hasAudio": true,
   "hasVideo": true,
   "layout": {
      "type": "bestFit",
      "stylesheet": "stream.instructor {position: absolute; width: 100%;  height:50%;}",
      "screenshareType": "pip"
   },
   "multiArchiveTag": "my-multi-archive",
   "name": "Foo",
   "outputMode": "composed",
   "resolution": "640x480",
   "streamMode": "manual",
   "maxBitrate": 200000
}

Si está utilizando un SDK, devolverá la información anterior en un formato apropiado para el SDK. Compruebe el referencia para su SDK de servidor sobre el valor de retorno exacto que obtendrá.

Detener una grabación de archivo

Una grabación continuará hasta que se cumpla una de las siguientes condiciones:

  • 4 horas de grabación
  • 1 hora de inactividad (ningún cliente publica flujos)
  • 12 horas totales de publicación activa y "en pausa". Un flujo se pausará cuando no haya clientes publicando.

No recomendamos que deje que se detenga una grabación de archivo basándose en los umbrales anteriores. Debe detener un archivo siempre que sepa que ha finalizado. Esto funciona de forma similar al inicio de un archivo en el que el front-end debe enviar una solicitud al back-end para indicar a la API que detenga la grabación.

  1. Haga que su front-end envíe una petición a su servidor para detener la grabación del archivo.
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "archiveId": "value goes here"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

var serverURL = "server-url.com/archive/stop" // replace this with your HTTP server URL

fetch(serverURL, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
  1. Su servidor back-end enviará una solicitud a la API REST para detener la grabación.
try {
    const archiveResponse = await vonage.video.stopArchive(archiveId);
    console.log("Successfully stopped archive:", archiveResponse.id);
} catch(error) {
    console.error("Error stopping archive: ", error);
}

Recibirá una respuesta similar a la siguiente:

{
   "createdAt": 1384221730000,
   "duration": 5049,
   "hasAudio": true,
   "hasVideo": true,
   "id": "b40ef09b-3811-4726-b508-e41a0f96c68f",
   "multiArchiveTag": "my-multi-archive",
   "name": "Foo",
   "applicationId": "93e36bb9-b72c-45b6-a9ea-5c37dbc49906",
   "reason": "",
   "resolution": "640x480",
   "sessionId": "flR1ZSBPY3QgMjkgMTI6MTM6MjMgUERUIDIwMTN",
   "size": 247748791,
   "status": "available",
   "streamMode": "manual",
   "streams": [
      {
         "streamId": "string",
         "hasAudio": true,
         "hasVideo": true
      }
   ],
   "url": "https://tokbox.com.archive2.s3.amazonaws.com/123456/09141e29-8770-439b-b180-337d7e637545/archive.mp4"
}

Es posible que esta respuesta no contenga la URL de grabación final, especialmente si está archivando en su propio almacenamiento S3 o Azure, o si la grabación del archivo no está finalizada. Enviaremos una devolución de llamada a su servidor cuando el archivo esté listo para su descarga.

Obtener información sobre el registro de archivos

También puedes obtener información sobre cualquier grabación de archivo en cualquier momento. Esto es útil para obtener estadísticas sobre el archivo y para comprobar el estado del propio archivo. Por ejemplo, cuando detienes un archivo, pueden pasar unos instantes hasta que el propio archivo esté listo. Puedes comprobar la información de un archivo para ver cuándo está listo para su descarga.

try {
    const archive = await vonage.video.getArchive(archiveId);
    console.log("Successfully retrieved archive:", archive.id);
} catch(error) {
    console.error("Error retrieving archive: ", error);
}

Obtendrás una respuesta similar a la que obtienes cuando detienes la grabación del archivo.

{
   "createdAt": 1384221730000,
   "duration": 5049,
   "hasAudio": true,
   "hasVideo": true,
   "id": "b40ef09b-3811-4726-b508-e41a0f96c68f",
   "multiArchiveTag": "my-multi-archive",
   "name": "Foo",
   "applicationId": "93e36bb9-b72c-45b6-a9ea-5c37dbc49906",
   "reason": "",
   "resolution": "640x480",
   "sessionId": "flR1ZSBPY3QgMjkgMTI6MTM6MjMgUERUIDIwMTN",
   "size": 247748791,
   "status": "available",
   "streamMode": "manual",
   "streams": [
      {
         "streamId": "string",
         "hasAudio": true,
         "hasVideo": true
      }
   ],
   "url": "https://tokbox.com.archive2.s3.amazonaws.com/123456/09141e29-8770-439b-b180-337d7e637545/archive.mp4"
}

Ver también