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:
- Simultaneidad de transmisión genérica (tratada en este tema)
- Simultaneidad de flujo con DRM
La siguiente tabla ofrece una comparación de los dos para ayudarlo a decidir cuál es más apropiado para su situación.
Simultaneidad de transmisión genérica | Simultaneidad de flujo con DRM |
---|---|
ventajas:
|
Ventajas
|
Desventajas
|
Desventajas
|
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
- Si desea cambiar la frecuencia de los latidos del corazón por defecto (1 minuto) soporte de contacto.
-
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 -
Ejemplos:sid
- Identificador de correlador define las ubicaciones de transmisión para un espectador.- 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
-
- Registre la clave pública para el JWT con Brightcove. Consulte Uso de las API de autenticación para obtener más información.
- 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:
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