Diffusions vidéo interactives en direct

Dans une diffusion vidéo interactive en direct, un grand nombre de clients peuvent communiquer en direct en publiant et en s'abonnant aux flux de chacun dans la session. Une session de diffusion vidéo interactive en direct peut prendre en charge jusqu'à 15 000 participants au total, en fonction du nombre d'éditeurs actifs dans la session.

Le tableau ci-dessous détaille le nombre de participants à la diffusion interactive en direct qui peuvent s'abonner à tous les éditeurs de la session. Les participants à la diffusion interactive sont les abonnés à faible latence de tous les flux publiés et les spectateurs de la diffusion interactive en direct. Les éditeurs de la session peuvent être considérés comme les hôtes de la diffusion et, en tant qu'hôtes, ils peuvent également s'abonner aux autres flux publiés. Lorsque le nombre d'éditeurs par session augmente, le nombre de spectateurs simultanés de tous les flux publiés diminue également.

Par exemple, d'après le tableau ci-dessous, lorsqu'il y a 1 ou 2 flux publiés dans la session, jusqu'à 15 000 participants peuvent voir ces deux flux publiés avec une latence en temps réel en tant que participants à la diffusion en direct. De même, lorsqu'il y a 3 flux publiés dans la session, jusqu'à 13 000 participants peuvent voir les 3 flux publiés avec une latence en temps réel en tant que participants à la diffusion en direct.

Nombre d'éditeurs * Interactif simultané en direct
participants par session
(les participants s'abonnent à tous les éditeurs)
1 15,000
2 15,000
3 13,000
4 11,000
5 8,000
6 6,800
7 5,700
8 5,000
9 4,300
10 4,000
12 3,400
15 2,900
16 2,800
20 2,000
25 1,600
50 800
55 700
  • Les flux publiés comprennent à la fois les flux de caméras et les flux de partage d'écran.

Si le nombre de participants à la session est supérieur à la valeur indiquée dans le tableau, vous devez utiliser la fonction de diffusion en direct (voir Diffusion en direct).

De même, les sessions peuvent accueillir jusqu'à 15 000 clients se connectant simultanément à une session.

Les développeurs d'applications doivent gérer les limites de la plateforme dans l'application. Voir la section suivante.

La fonction de diffusion vidéo interactive en direct n'est disponible que pour les sessions acheminées (sessions qui utilisent le routeur média de Vonage). Pour plus d'informations, consultez la section Routeur média et modes média.

Les diffusions vidéo interactives en direct prennent en charge la vidéo HD (ainsi que la vidéo de résolution inférieure) si les ressources du client (bande passante et unité centrale) prennent en charge la résolution.

Construire votre application pour prendre en charge les diffusions vidéo interactives en direct.

Il existe quelques améliorations de l'API que vous devez utiliser pour prendre en charge un grand nombre de clients se connectant à des sessions. Voir les sections suivantes :

Suppression des événements de connexion

Si un grand nombre de clients se connectent à une session, il est important de désactiver les événements de connexion dans les clients. Ces événements comprennent ceux qui sont envoyés lorsque d'autres clients se connectent et se déconnectent de la session. La plupart des clients n'ont pas besoin de traiter ces événements, et le fait de les désactiver empêche les clients de subir des pertes de performances (par exemple lors de la publication ou de l'abonnement à des flux audio-vidéo) causées par ces événements à fort volume.

Important : Pour optimiser votre application à cette grande échelle, veillez à utiliser les API de suppression des événements de connexion décrites ici.

À partir de la version 2.10.0, chacun des SDK clients (pour le Web, iOS et Android) comprend une amélioration de l'API permettant de désactiver les événements de connexion dans le client.

Bien que vous puissiez utiliser d'autres versions de clients prises en charge (2.9.0+) dans des sessions importantes, les événements de connexion ne seront pas supprimés dans les clients utilisant des versions antérieures à 2.10.0+. Les clients utilisant des versions plus anciennes d'OpenTok.js peuvent voir leurs performances se dégrader en raison du grand nombre d'événements de connexion.

Supprimer les événements de connexion avec OpenTok.js (web)

Lors de l'initialisation de l'objet Session, créez un objet avec l'attribut connectionEventsSuppressed est définie comme étant la propriété trueet transmettre cet objet en tant que options lors de l'appel de la fonction OT.initSession() méthode. Ensuite, connectez-vous à la session :

var props = {connectionEventsSuppressed: true};
var session = OT.initSession(APPLICATION_ID, SESSION_ID, props);
session.connect(token, function(error) {
  if (error) {
    console.log('Error connecting: ', error.code, error.message);
  } else {
    console.log('Connected to the session.');
  }
});

Cela empêche l'objet Session d'envoyer connectionCreated et connectionDestroyed lorsque d'autres clients se connectent ou se déconnectent de la session. (Le serveur Vonage n'envoie pas non plus ces événements au client web).

Suppression des événements de connexion avec le SDK iOS

Lors de l'initialisation d'un objet OTSessionSettings, il convient de définir le paramètre connectionEventsSuppressed à la propriété YES. Passez ensuite cet objet en tant que settings lors de l'appel de la fonction [OTSession initWithApiKey:sessionId:delegate:settings:] pour initialiser l'objet OTSession :

OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;
OTSession *session = [[OTSession alloc] initWithApiKey:applicationId
                                        sessionId:sessionId
                                        delegate:self
                                        Settings:settings];

Ensuite, connectez-vous à la session :

OTError* error = nil;
[session connectWithToken:kToken error:&error];
if (error) {
  NSLog(@"connect failed with error: (%@)", error);
}

Cela permet d'éviter que le [SessionDelegate session:connectionCreated:] d'être envoyés lorsque d'autres clients se connectent ou se déconnectent de la session. (Le serveur Vonage n'envoie pas non plus ces événements au client iOS).

Suppression des événements de connexion avec le SDK Android

Pour vous connecter à la session, instanciez un objet Session.Builder, en lui transmettant votre identifiant d'application et votre identifiant de session. Appelez ensuite l'objet connectionEventsSuppressed() de l'objet Builder, en passant par la méthode true. Appeler le build() pour créer l'objet Session. Appelez ensuite la méthode connect() de l'objet Session pour se connecter à la session :

Session session = new Session.Builder(this, APPLICATION_ID, mySessionId)
                    .connectionEventsSuppressed(true)
                    .build();

session.connect(myToken);

Ne pas appeler le Session.setConnectionListener(ConnectionListener listener) (pour définir un ConnectionListener pour l'objet Session) ; l'appel de cette méthode n'aura aucun effet. La suppression des événements de connexion empêche les méthodes ConnectionListener d'être appelées lorsque d'autres clients se connectent ou se déconnectent de la session. (De plus, le serveur Vonage n'envoie pas ces événements au client Android).

Suppression des événements de connexion avec le SDK Windows

Pour se connecter à la session, instanciez un objet Session à l'aide de la classe Session.Builder. Passez votre identifiant d'application et l'identifiant de session dans l'objet Session.Builder() et de définir le connectionEventsSuppressed au paramètre true. Appelez ensuite le Connect() de l'objet Session pour se connecter à la session :

Session = new Session.Builder(Context.Instance, APPLICATION_ID, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);

Ne définissez pas les gestionnaires d'événements Session.StreamReceived ou Session.StreamDropped, car la suppression des événements de connexion empêche ces événements d'être déclenchés lorsque d'autres clients se connectent à la session ou s'en déconnectent. (De plus, le serveur Vonage n'envoie pas ces événements au client Windows).

Suppression des événements de connexion avec le SDK Linux

Pour se connecter à la session, instanciez un fichier otc_session_settings en indiquant votre App ID et l'ID de session Vonage. Appelez ensuite la structure otc_session_settings_set_connection_events_suppressed() en passant l'instance otc_session_settings comme premier paramètre, et OTC_TRUE comme le second, suppress, paramètre. Appelez ensuite le otc_session_new_with_settings() pour créer la structure otc_session. Puis fonction pour se connecter à la session :

otc_session_settings *session_settings = otc_session_settings_new();
otc_session_settings_set_connection_events_suppressed(session_settings, OTC_TRUE);

otc_session_callbacks session_callbacks = {0};
// Set the callback functions of the otc_session_callbacks instance.

otc_session *session = otc_session_new_with_settings(APPLICATION_ID, SESSION_ID,
                                                     &session_callbacks,
                                                     session_settings);
otc_session_connect(session, TOKEN);

Ne pas régler le otc_session_callbacks.on_connection_created ou otc_session_callbacks.on_connection_dropped les fonctions de rappel. La suppression des événements de connexion empêche ces fonctions de rappel d'être appelées lorsque d'autres clients se connectent ou se déconnectent de la session. (De plus, le serveur Vonage n'envoie pas ces événements au client Linux).

Détection du dépassement des limites de connexion et de flux

Les SDK clients incluent des erreurs qui indiquent qu'un client tente de se connecter à une session ou de s'abonner à un flux alors que la limite de connexion (15 000) ou de flux (15 000) pour la session a été dépassée.

Si le client ne peut pas se connecter à une session ou s'abonner à un flux parce que la limite de connexion ou de flux a été atteinte, vous pouvez lui demander d'afficher un message de type diffusion en direct de la session (si vous en avez mis une en place).

Erreurs de connexion et de limite de flux dans OpenTok.js (web)

Si vous tentez de vous connecter à une session alors que la limite de connexion pour une session (15 000 clients connectés simultanément) a été atteinte, le gestionnaire d'achèvement de la fonction Session.connect() est appelée avec la méthode error à un objet Error avec le paramètre name est définie comme étant la propriété 'OT_CONNECTION_LIMIT_EXCEEDED'.

Si vous tentez de vous abonner à un flux alors que la limite de flux d'une session a été dépassée, le gestionnaire d'achèvement de la fonction Session.subscribe() est appelée avec la méthode error à un objet Error avec le paramètre name est définie comme étant la propriété 'OT_STREAM_LIMIT_EXCEEDED'.

Erreurs de connexion et de limite de flux dans le SDK Android

Si vous tentez de vous connecter à une session alors que la limite de connexion pour une session (15 000 clients connectés simultanément) a été atteinte, l'icône Session.SessionListener.onError(session, error) est appelée avec la méthode error paramètre défini sur un objet Error dont la propriété code est définie sur SessionConnectionLimitExceeded.

Si vous tentez de vous abonner à un flux alors que la limite de flux pour une session a été atteinte, l'icône Session.SubscriberListener.onError(subscriber, error) est appelée avec la méthode error paramètre défini sur un objet Error dont la propriété code est définie sur SubscriberStreamLimitExceeded.

Qualité vidéo dans les diffusions vidéo interactives en direct

Les sessions à grande échelle bénéficient de la fonction vidéo évolutive. Grâce à cette fonction, les points d'extrémité abonnés peuvent consommer différentes résolutions vidéo et fréquences d'images en fonction des conditions du réseau et de l'unité centrale. Cette fonctionnalité est disponible dans le SDK iOS de Vonage (sur certains appareils), le SDK Android (sur certains appareils), le SDK Windows et OpenTok.js dans Chrome et Safari.

Erreurs de connexion et de limite de flux dans le SDK iOS

Si vous tentez de vous connecter à une session alors que la limite de connexion pour une session (15 000 clients connectés simultanément) a été atteinte, l'icône [SessionDelegate session:didFailWithError:] est envoyé avec le message error à un objet OTError avec l'attribut code est définie comme étant la propriété OTSessionConnectionLimitExceeded.

Si vous tentez de vous abonner à un flux alors que la limite de flux pour une session a été atteinte, l'icône [OTSubscriberKitDelegate subscriber:didFailWithError:] est envoyé avec le message error à un objet OTError avec l'attribut code est définie comme étant la propriété OTSubscriberStreamLimitExceeded.

Erreurs de connexion et de limite de flux dans le SDK Windows

Si vous tentez de vous connecter à une session alors que la limite de connexion pour une session (15 000 clients connectés simultanément) a été atteinte, l'icône Session envoie un Error envoyé avec l'événement ErrorCode fixé à ErrorCode.SessionConnectionLimitExceeded.

Si vous tentez de vous abonner à un flux alors que la limite de flux pour une session a été atteinte, l'objet Subscriber envoie un événement Error avec l'attribut ErrorCode à un objet OTError avec l'attribut code est définie comme étant la propriété ErrorCode.SubscriberStreamLimitExceeded.

Erreurs de connexion et de limite de flux dans le SDK Linux

Si vous tentez de vous connecter à une session alors que la limite de connexion pour une session (15 000 clients connectés simultanément) a été atteinte, l'icône otc_session_callbacks.on_error() est appelée avec le paramètre d'erreur fixé à OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.

Si vous tentez de vous abonner à un flux alors que la limite de flux pour une session a été atteinte, l'icône otc_subscriber_callbacks.on_error() est appelée avec la fonction error paramètre réglé sur OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED.

Prix des émissions interactives en direct

La vidéo interactive en direct utilise la même tarification par minute souscrite que celle utilisée pour les autres sessions. Pour plus de détails, voir Tarification.