Concurrence générique des flux

Ce document décrit comment limiter la simultanéité des flux aux spectateurs finaux avec un mécanisme de battement de cœur et sans DRM.

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é :

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.

Solutions pour la concomitance des flux
Concurrence générique des flux Concurrence des flux avec DRM
Avantages :
  • Ne nécessite pas de DRM
  • Les sessions de streaming actives peuvent être répertoriées via l'API
Avantages
  • Il n'y a aucun moyen de le désactiver du côté client
  • Le mécanisme de renouvellement est transparent pour les applications personnalisées
  • Plus sécurisé
Désavantages
  • Heartbeat fonctionne côté client
  • Les implémentations personnalisées nécessitent l'intégration du mécanisme de battement de cœur
Désavantages
  • Il nécessite de nombreuses licences DRM
  • pas de moyen de lister toutes les sessions actives d'un utilisateur spécifique

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

  1. 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.
  2. 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
    • sid- L'identifiant du corrélateur définit les emplacements de diffusion d'un téléspectateur.

      Exemples :
      • 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
  3. Enregistrez la clé publique du JWT auprès de Brightcove. Voir Utilisation des API d'authentification pour plus de détails.
  4. 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 :

Logique de la simultanéité
Logique de la simultanéité

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