Simultaneidad de transmisión genérica

Este documento describe cómo limitar la simultaneidad de transmisión a los espectadores finales con un mecanismo de latido y sin DRM.

Introducción

La simultaneidad de transmisión genérica le permite definir la cantidad de transmisiones de video que un usuario específico puede ver al mismo tiempo. Limitar la simultaneidad de la transmisión lo ayuda a evitar que el contenido sea robado o visto ilegalmente mediante el robo o el uso compartido inapropiado de credenciales.

Esta función es parte de las Restricciones de reproducción y es una alternativa a flujo de concurrencia con DRM , que es una solución alternativa.

Cuándo usar GSC

Brightcove ofrece dos soluciones para gestionar la simultaneidad:

La siguiente tabla ofrece una comparación de los dos para ayudarlo a decidir cuál es más apropiado para su situación.

Soluciones de concurrencia de flujo
Simultaneidad de transmisión genérica Simultaneidad de flujo con DRM
ventajas:
  • No requiere DRM
  • Las sesiones de transmisión activa se pueden enumerar a través de la API
Ventajas
  • No hay forma de desactivarlo desde el lado del cliente.
  • El mecanismo de renovación es transparente en las implementaciones personalizadas
  • Más seguro
Desventajas
  • Heartbeat se ejecuta desde el lado del cliente
  • Las implementaciones personalizadas requieren la integración del mecanismo de latido
Desventajas
  • Requiere muchas licencias DRM
  • no hay forma de enumerar todas las sesiones activas de un usuario específico

Cómo funciona

Latido del corazón

El latido es un mecanismo que solicita en base a una frecuencia las sesiones activas para un usuario específico, para hacer cumplir que es una sesión válida durante toda la reproducción. El latido se puede habilitar para el reproductor web de Brightcove y los reproductores SDK nativos.

La frecuencia de los latidos del corazón define la frecuencia con la que el reproductor realiza comprobaciones intermedias para ver si aún se cumplen las condiciones para la reproducción. De forma predeterminada, la frecuencia se establece en 1 minuto, pero esto se puede cambiar.

Bloqueo de flujos

Cuando se alcanza el número máximo de transmisiones simultáneas y el espectador, o alguien con las credenciales de su cuenta, intenta abrir una transmisión adicional, se bloqueará cualquier transmisión nueva de ese usuario identificado como una ubicación de transmisión diferente.

Identificador de correlador

Se utiliza un identificador de correlación para definir las ubicaciones de transmisión del espectador. Las características de este identificador son:

  • Debe ser lo suficientemente específico para correlacionar todas las solicitudes del mismo visor. Si el correlacionador es demasiado genérico, agrupará a varios espectadores con el mismo ID de espectador y los agrupará a todos en el mismo espacio.
  • Debe ser consistente en todas las vistas de video para el mismo visor.

Cuando el "correlador" es diferente, intentará llenar un "espacio" para la identificación del espectador, lo que significa que si ese valor cambia durante la misma visualización, se tratará como si fuera un espectador diferente y evitará la reproducción.

El correlador se establece en el JWT usando el sid afirmar

Implementación

Uso de reproductores web o SDK de Brightcove

  1. Si desea cambiar la frecuencia de los latidos del corazón por defecto (1 minuto) soporte de contacto.
  2. Cree un JWT para las restricciones de reproducción.

    Se requieren las siguientes afirmaciones:

    • climit- El reclamo de límite de concurrencia indica cuántos observadores o transmisiones pueden reproducir al mismo tiempo
    • uid- El identificador del espectador se usa para correlacionar varias sesiones para hacer cumplir la simultaneidad de transmisión
    • sid- Identificador de correlador define las ubicaciones de transmisión para un espectador.

      Ejemplos:
      • Chrome MAC (Cadmio) HTML 5 - 1112223334
      • Apple iPad 7.ª generación 10.2 (Wi-Fi) - 2223334444
      • Apple Apple TV TBD Apple TV - 3334445555
      • Android DefaultWidevineL3Phone Teléfono Android - 1112224567
      • Firefox MAC (Cadmio) HTML 5 - 1112226754
      • Dispositivo de transmisión Google Chromecast - 1112346677
  3. Registre la clave pública para el JWT con Brightcove. Consulte Uso de las API de autenticación para obtener más información.
  4. Habilite la simultaneidad de transmisión genérica en los reproductores del cliente: consulte Implementación en los reproductores a continuación
Muestra JSON Web Token (JWT) reclamos
{
// account id: JWT is only valid for this account
"accid":"4590388311111",
// limit of concurrent users
"climit": 3,
// user id
"uid": "108.26.184.3_1634052241",
// correlator identifier
"sid": "Firefox MAC (Cadmium) HTML 5 - 1112346677"
}
}

Notas

  • Cuando se excede el número máximo de sesiones para un espectador, se detendrá una sesión. La sesión puede tardar tanto como la frecuencia de los latidos del corazón en detenerse.
  • Si el jugador cliente no puede conectarse al servidor, volverá a intentarlo tres veces. Si aún no puede conectarse, la reproducción se detendrá.

Implementación en reproductores

Requisitos

  • Generic Stream Concurrency requiere el reproductor web de Brightcove 6.63.2 o posterior.
  • Generic Stream Concurrency requiere Brightcove iOS SDK player 6.10.1 o posterior.
  • Generic Stream Concurrency requiere el reproductor Brightcove Android SDK 6.17.2 o posterior.

reproductor web brightcove

La simultaneidad de transmisión genérica en Brightcove Player se puede habilitar mediante el video_cloud.stream_concurrency configuración del reproductor.

En este momento, no hay una interfaz de usuario dedicada para esta función en Studio, por lo que se debe usar el editor JSON. La configuración se verá algo como esto:

"stream_concurrency" : true
...
  "video_cloud": {
    "stream_concurrency": true,
    "policy_key": "BCpk..."
  },
  "player": {
    "template": {
      "name": "single-video-template",
      "version": "6.63.1"
    }
  },
...

Si este par clave/valor no está presente en JSON o el valor es falso, la función GSC no estará habilitada para el reproductor.

Configuración del JWT en tiempo de ejecución

De manera similar a la función de limitación de concurrencia de transmisión de la EPA, la concurrencia de transmisión genérica depende de un token web JSON.

Una vez que el reproductor está configurado para la simultaneidad de transmisión genérica, como se indicó anteriormente, el paso restante es proporcionar un JWT al reproductor en tiempo de ejecución. Este es el mismo proceso que cuando se usa EPA:

player.catalog.setBcovAuthToken('');
Ejemplo

Después de agregar un token JWT, el paso final es solicitar datos de la API de reproducción y cargarlos en el reproductor. Este ejemplo demuestra cómo obtener un solo video:

// Set the authorization token.
  player.catalog.setBcovAuthToken('');
  
  // Initiate a catalog request. API selection will occur each time this
  // is called.
  player.catalog.get({id: '1', type: 'video'}).
    then(function(data) {
  
      // When the request is complete, you must load the returned metadata
      // and sources into the player.
      player.catalog.load(data);
    }).
    catch(function(error) {
      throw new Error(error);
    });

iOS

Para habilitar la función Generic Stream Concurrency para iOS SDK, debe habilitar la opción streamConcurrencyEnabled en tus playbackController. Opcionalmente, puede enviar el valor de sid. Si el sid está vacío, este valor no se enviará como encabezado.

C objetivo

self.playbackController.streamConcurrencyEnabled = YES;
// Optional. Set custom sid
self.playbackController.options ■ (?{ kBCOVAuthHeartbeatPropertyKeySessionld: G'sessionld" };

Rápido

self.playbackController.streamConcurrencyEnabled ■ true
// Optional. Set custom sid
self.playbackController.options = [ kBCOVAuthHeartbeatPropertyKeySessionld: "sessionld" ]

Para obtener más detalles, consulte el Referencia de Brightcove Native Player para iOS.

Androide

En el método onCreate de tu actividad de jugador, agrega esta línea:

brightcoveVideoView.setStreamConcurrencyEnabled(true);

En el onCreate agrega un detector de eventos para el DID_SET_VIDEO evento, con este código para establecer encabezados de latidos. Tenga en cuenta que aquí se usa el mismo JWT que se usó para recuperar el video, y debe incluir un uid reclamo (y opcionalmente, un sid afirmar):

Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put(ConcurrencyClient.HEARTBEAT_VIDEO_HEADER_KEY, video.getId());
requestHeaders.put(ConcurrencyClient.HEARTBEAT_ACCOUNTID_HEADER_KEY, accountId);
requestHeaders.put(BrightcoveTokenAuthorizer.BRIGHTCOVE_AUTHORIZATION_HEADER_KEY, jwtToken);
brightcoveVideoView.setStreamConcurrencyRequestHeaders(requestHeaders);

Para obtener más detalles, consulte el Simultaneidad de transmisión genérica (GSC) con el SDK nativo para Android documento.

Implementación vía API

Esta función se puede implementar a través de la API del servicio de simultaneidad sin usar Brightcove Web Player o reproductores SDK. Consulte la referencia de la API para obtener detalles adicionales.

La URL base para la API del servicio de concurrencia es:

https://edge-gsc.api.brightcove.com

El método de autorización es a través del JWT enviado en un Authorization encabezamiento:

Authorization: Bearer code translate="No">{token}

La lógica básica que su reproductor/aplicación necesita realizar se muestra en el siguiente diagrama:

Lógica para concurrencia
Lógica para concurrencia

Los puntos finales de la API

Sesión
Este punto final se usa para crear nuevas sesiones de transmisión con un latido para la administración de concurrencia:
/api/v1/accounts/{account_id}/sessions

Método: POST

Cuerpo de la solicitud:

{
  "video": "the_video_id"
}
Sesiones activas
Este punto final le permite enumerar sesiones de transmisión para realizar un seguimiento de ellas, principalmente útil si está implementando lógica para decidir qué sesión detener si se alcanza el límite de concurrencia:
/api/v1/accounts/{account_id}/sessions

Método: POST

Detener sesiones
Este punto final le permite detener una sesión de transmisión; lo usaría si está implementando la lógica para decidir qué sesión detener cuando una nueva solicitud de reproducción excede el límite de concurrencia. Este punto final es principalmente para uso de back-end para eliminar sesiones cuando se completan:
/api/v1/accounts/{account_id}/sessions

Método: DELETE