Introduction
L'option Generic Stream Concurrency vous permet de définir le nombre de flux vidéo qu'un utilisateur spécifique peut regarder simultanément. La limitation de la simultanéité des flux permet d'éviter que du contenu soit volé ou regardé illégalement par le biais d'un vol ou d'un partage inapproprié d'informations d'identification.
Cette fonction fait partie des restrictions de lecture et constitue une alternative à la simultanéité des flux avec le DRM, qui est une autre solution.
Quand utiliser le SGC
Brightcove propose deux solutions pour gérer la simultanéité :
- Concurrence générique des flux (couverte dans cette rubrique)
- Concurrence des flux avec DRM
Le tableau ci-dessous présente une comparaison des deux types d'assurance afin de vous aider à décider lequel est le plus approprié à votre situation.
Concurrence générique des flux | Concurrence des flux avec DRM |
---|---|
Avantages :
|
Avantages
|
Désavantages
|
Désavantages
|
Fonctionnement
Battement de coeur
Le battement de cœur est un mécanisme qui demande à intervalles réguliers les sessions actives d'un utilisateur spécifique, afin de s'assurer qu'il s'agit d'une session valide pendant toute la durée de la lecture. Le rythme cardiaque peut être activé pour le lecteur Web de Brightcove et les lecteurs SDK natifs.
La fréquence des battements de cœur définit la fréquence à laquelle le lecteur effectue des vérifications à mi-parcours pour s'assurer que les conditions de lecture sont toujours réunies. Par défaut, la fréquence est fixée à 1 minute, mais elle peut être modifiée.
Blocage des flux
Lorsque le nombre maximal de flux simultanés est atteint et que le téléspectateur, ou une personne disposant des informations d'identification de son compte, tente d'ouvrir un flux supplémentaire, tout nouveau flux provenant de cet utilisateur et identifié comme un lieu de diffusion différent sera bloqué.
Identifiant du corrélateur
Un identifiant de corrélateur est utilisé pour définir les emplacements de diffusion des téléspectateurs. Les caractéristiques de cet identifiant sont les suivantes
- Il doit être suffisamment précis pour permettre de corréler toutes les demandes émanant d'un même visualiseur. Si le corrélateur est trop générique, il regroupera plusieurs spectateurs ayant le même numéro d'identification et les regroupera tous dans le même emplacement.
- Il doit être cohérent dans toutes les vidéos d'un même spectateur.
Lorsque le "corrélateur" est différent, il tente de remplir un "créneau" pour l'identifiant du spectateur, ce qui signifie que si cette valeur change au cours de la même visualisation, elle sera traitée comme s'il s'agissait d'un spectateur différent et empêchera la lecture.
Le corrélateur est défini dans le JWT à l'aide de la sid
réclamation
Mise en œuvre
Utilisation des lecteurs Web ou SDK de Brightcove
- Si vous souhaitez modifier la fréquence des battements de cœur par rapport à la valeur par défaut (1 minute), contactez le service d'assistance.
-
Créer un JWT pour les restrictions de lecture.
Les demandes suivantes sont requises :
-
climit
- La demande de limite de simultanéité indique le nombre de spectateurs ou de streams pouvant jouer en même temps -
uid
- L'identifiant du spectateur est utilisé pour corréler plusieurs sessions afin de renforcer la simultanéité des flux -
Exemples :sid
- L'identifiant du corrélateur définit les emplacements de diffusion d'un téléspectateur.- Chrome MAC (cadmium) HTML 5 - 1112223334
- Apple iPad 7e génération 10.2 (Wi-Fi) - 2223334444
- Apple Apple TV à déterminer Apple TV - 3334445555
- Téléphone Android par défautWideVinel3Phone - Téléphone Android - 1112224567
- Firefox MAC (Cadmium) HTML 5 - 1112226754
- Clé de diffusion Google Chromecast - 1112346677
-
- Enregistrez la clé publique du JWT auprès de Brightcove. Voir Utilisation des API d'authentification pour plus de détails.
- Activez la simultanéité de diffusion générique sur les joueurs clients : voir Implémentation pour les joueurs ci-dessous
Exemples de réclamations JSON Web Token(JWT)
{
// 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"
}
}
Remarques
- Lorsque le nombre maximum de sessions est dépassé pour un visualiseur, la session est interrompue. L'arrêt de la session peut prendre autant de temps que la fréquence des battements de cœur.
- Si le joueur client ne parvient pas à se connecter au serveur, il fera trois tentatives. S'il ne parvient toujours pas à se connecter, la lecture s'arrête.
Mise en œuvre dans les acteurs
Exigences
- Generic Stream Concurrency nécessite le lecteur Web Brightcove 6.63.2 ou une version ultérieure.
- Generic Stream Concurrency nécessite le lecteur SDK iOS Brightcove 6.10.1 ou une version ultérieure.
- Generic Stream Concurrency nécessite le lecteur SDK Android Brightcove 6.17.2 ou une version ultérieure.
Lecteur web Brightcove
La simultanéité des flux génériques dans le lecteur Brightcove peut être activée à l'aide de la configuration du video_cloud.stream_concurrency
lecteur.
Pour l'instant, il n'existe pas d'interface utilisateur dédiée à cette fonctionnalité dans Studio, il faut donc utiliser l'éditeur JSON. La configuration ressemblera à ceci :
"stream_concurrency" : true
...
"video_cloud": {
"stream_concurrency": true,
"policy_key": "BCpk..."
},
"player": {
"template": {
"name": "single-video-template",
"version": "6.63.1"
}
},
...
Si cette paire clé/valeur n'est pas présente dans le JSON ou si la valeur est fausse, la fonction GSC ne sera pas activée pour le lecteur.
Définition du JWT au moment de l'exécution
À l'instar de la fonction de limitation de la concurrence des flux de l'EPA, la concurrence des flux génériques dépend d'un jeton Web JSON.
Une fois que le lecteur est configuré pour la simultanéité des flux génériques, comme indiqué ci-dessus, l'étape restante consiste à fournir un JWT au lecteur au moment de l'exécution. Il s'agit du même processus que lors de l'utilisation de l'EPA :
player.catalog.setBcovAuthToken('');
Exemple
Après l'ajout d'un jeton JWT, la dernière étape consiste à demander des données à l'API de lecture et à les charger dans le lecteur. Cet exemple montre comment récupérer une seule vidéo :
// 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
Pour activer la fonctionnalité Generic Stream Concurrency pour le SDK iOS, vous devez activer l'option streamConcurrencyEnabled
dans votre playbackController
. Vous pouvez éventuellement envoyer la valeur pour sid
. Si le champ sid
est vide, cette valeur ne sera pas envoyée en tant qu'en-tête.
Objectif c
self.playbackController.streamConcurrencyEnabled = YES;
// Optional. Set custom sid
self.playbackController.options ■ (?{ kBCOVAuthHeartbeatPropertyKeySessionld: G'sessionld" };
Rapide
self.playbackController.streamConcurrencyEnabled ■ true
// Optional. Set custom sid
self.playbackController.options = [ kBCOVAuthHeartbeatPropertyKeySessionld: "sessionld" ]
Pour plus de détails, consultez la référence du lecteur natif Brightcove pour iOS.
Android
Dans la méthode OnCreate de votre activité de joueur, ajoutez cette ligne :
brightcoveVideoView.setStreamConcurrencyEnabled(true);
Dans la onCreate
méthode, ajoutez un écouteur d'événements pour l' DID_SET_VIDEO
événement, avec ce code pour définir les en-têtes Heartbeat. Notez que le même JWT utilisé pour récupérer la vidéo est utilisé ici et doit inclure une uid
réclamation (et éventuellement une sid
réclamation) :
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);
Pour plus de détails, consultez le Generic Stream Concurrency (GSC) avec le SDK natif pour Android document.
Mise en œuvre via l'API
Cette fonctionnalité peut être mise en œuvre via l'API Concurrency Service sans utiliser le lecteur Web ou les lecteurs SDK de Brightcove. Voir la référence de l'API pour plus de détails.
L'URL de base de l'API Concurrency Service est la suivante :
https://edge-gsc.api.brightcove.com
La méthode d'autorisation passe par le JWT envoyé dans un Authorization
en-tête :
Authorization: Bearer code translate="No">{token}
La logique de base que votre joueur/application doit exécuter est illustrée dans le schéma ci-dessous :
Les points d'extrémité de l'API
- Session
-
Ce point de terminaison est utilisé pour créer de nouvelles sessions de streaming centrées sur la gestion de la simultanéité :
/api/v1/accounts/{account_id}/sessions
Méthode :
POST
Corps de la demande :
{ "video": "the_video_id" }
- Sessions actives
-
Ce point de terminaison vous permet de répertorier les sessions de streaming pour en assurer le suivi, ce qui est particulièrement utile si vous implémentez une logique pour décider quelle session arrêter si la limite de simultanéité est atteinte :
/api/v1/accounts/{account_id}/sessions
Méthode :
POST
- Arrêter les sessions
-
Ce point de terminaison vous permet d'arrêter une session de streaming. Vous pouvez l'utiliser si vous implémentez une logique pour décider quelle session arrêter lorsqu'une nouvelle demande de lecture dépasse la limite de simultanéité. Ce point de terminaison est principalement destiné à être utilisé en backend pour supprimer des sessions une fois terminées :
/api/v1/accounts/{account_id}/sessions
Méthode :
DELETE