Personnalisation de l'interface utilisateur — Windows

Voici les réglages que vous pouvez effectuer pour personnaliser l'interface utilisateur des vidéos OpenTok :

Ajouter un nom à un flux publié

Vous pouvez spécifier le nom de l'éditeur en appelant la fonction name() de l'objet Publisher.Builder lorsque vous utilisez la méthode instanciation de l'objet Publisher:

publisher = new Publisher(Context.Instance,
  renderer: publisherVideoRenderer,
  name: "Bob's video",
  capturer: capturer);

Vous pouvez utiliser ce nom pour identifier le client qui publie le flux. La classe Stream possède un élément Name propriété. Lorsque vous s'abonner à un fluxvous pouvez afficher ce nom dans un élément de l'interface utilisateur.

Ne pas utiliser d'informations personnelles dans le champ "nom" de l'éditeur. — Le nom de l'éditeur peut être visible par les autres participants à la session et peut également apparaître dans l'outil « Inspector » ainsi que dans les journaux internes de Vonage ; par conséquent, vous ne devez en aucun cas utiliser d'informations sensibles ou personnelles non chiffrées dans le nom de l'éditeur. Consultez les bonnes pratiques en matière de sécurité.

Ajout d'un bouton de mise en sourdine pour un éditeur

Il n'y a pas d'élément d'interface utilisateur par défaut pour couper le microphone de l'éditeur. Cependant, vous pouvez ajouter un élément, tel qu'un bouton, qui active la fonction PublishAudio de l'objet Publisher lorsque l'utilisateur clique dessus. Définissez la propriété à false pour mettre l'éditeur en sourdine :

publisher.PublishAudio = false;

Fixer la propriété à true pour publier des documents audio.

publisher.PublishAudio = true;

Ajout d'un bouton de mise en sourdine pour un abonné

Il n'y a pas d'élément d'interface utilisateur par défaut pour couper le son de l'abonné. Toutefois, vous pouvez ajouter un élément, tel qu'un bouton, qui active la fonction SubscribeToAudio de l'objet Abonné lorsque l'utilisateur clique dessus. Définissez la propriété à false pour couper le son :

subscriber.SubscribeToAudio = false;

Fixer la propriété à true pour activer la lecture audio (si le flux contient de l'audio) :

subscriber.SubscribeToAudio = true;

Ajout d'un bouton permettant de basculer l'appareil photo de l'éditeur

Il n'y a pas d'élément d'interface utilisateur par défaut pour basculer la caméra utilisée par l'éditeur. Cependant, vous pouvez ajouter un élément, tel qu'un bouton, qui définit l'option VideoCapturer de l'objet Publisher :

publisher.VideoCapturer = newCapturer;

Pour plus d'informations, voir Utilisation d'un capteur vidéo personnalisé.

Ajustement de l'interface utilisateur lorsque la vidéo est activée ou désactivée

Lorsque la vidéo d'un abonné est désactivée, l'objet Abonné envoie un message VideoDisabled (événement de désactivation de la vidéo). Dans ce cas, vous pouvez ajouter un élément d'interface utilisateur (tel qu'une icône) pour indiquer que la vidéo a été désactivée :

subscriber.VideoDisabled += Subscriber_VideoDisabled;

private void Subscriber_VideoDisabled(object sender, EventArgs e) {
    // Display the video disabled indicator
}

Lorsque la vidéo d'un abonné est réactivée, l'objet Abonné envoie un message VideoEnabled (événement de réactivation de la vidéo). Dans ce cas, vous pouvez supprimer un élément de l'interface utilisateur (une icône, par exemple) qui indique que la vidéo est réactivée :

subscriber.VideoEnabled += Subscriber_VideoEnabled;

private void Subscriber_VideoEnabled(object sender, EventArgs e) {
    // Display the video disabled indicator
}

Dans les sessions qui utilisent l'option Routeur multimédia OpenTok (sessions dont le mode média est réglé sur routé), l'abonnement peut également envoyer les événements suivants :

  • VideoDisableWarning — Le routeur multimédia OpenTok a détecté une baisse de la qualité du flux ; la vidéo sera désactivée si cette baisse se poursuit.
  • VideoDisableWarningLifted — Le routeur multimédia OpenTok a déterminé que la qualité du flux s'est suffisamment améliorée pour que la désactivation de la vidéo ne présente plus de risque immédiat.

Vous pouvez également afficher et supprimer une notification de l'interface utilisateur (telle qu'une icône) lorsque ces événements sont envoyés.

Notez que lorsque vous instanciez un objet Publisher, vous activez ou désactivez la fonction de repli audio pour les éditeurs et les abonnés concernant le flux publié. La fonction de repli audio désactive la vidéo (chez les éditeurs et les abonnés) lorsque les conditions du réseau ou du processeur ne permettent pas la diffusion vidéo. Voir Solution de secours audio (Windows).

Si vous activez la solution de secours audio de l'éditeur, le Publisher envoie les événements suivants liés à la solution de secours audio :

  • VideoDisabled
  • VideoEnabled
  • VideoDisableWarning
  • VideoDisableWarningLifted

Vous pouvez afficher des indicateurs d'interface utilisateur en réponse à ces événements.

Affichage d'un élément indicateur lorsqu'une session est en cours d'archivage

Lorsqu'une archive d'une session commence à enregistrer (ou si vous vous connectez à une session en cours d'enregistrement), l'objet Session envoie un message ArchiveStarted événement. Lorsque l'enregistrement s'arrête, l'objet Session envoie un ArchiveStopped événement. Vous pouvez ajouter un élément d'interface utilisateur, tel qu'une icône affichée dans une vue éditeur, pour indiquer qu'une vidéo est en cours d'enregistrement :

session.ArchiveStarted += Session_ArchiveStarted;
session.ArchiveStopped += Session_ArchiveStopped;

private void Session_ArchiveStarted(object sender, EventArgs e) {
    // Display the archive indicator
}

private void Session_ArchiveStopped(object sender, EventArgs e) {
    // Hide the archive indicator
}

Ajustement de l'interface utilisateur en fonction des niveaux audio

Les Subscriber.AudioLevel et Publisher.AudioLevel sont envoyés à intervalles réguliers avec le niveau audio de l'abonné et de l'éditeur. Vous pouvez utiliser la fonction AudioLevel des arguments de l'événement pour mettre à jour l'affichage d'un indicateur de niveau audio :

@Override
publisher.AudioLevel += Publisher_AudioLevel;
subscriber.AudioLevel += Subscriber_AudioLevel;

private void Publisher_AudioLevel(object sender, EventArgs e) {
    // Display the audio level based on e.AudioLevel
}

private void Subscriber_AudioLevel(object sender, EventArgs e) {
    // Display the audio level based on e.AudioLevel
}

Remarque : Le niveau audio d'un éditeur n'est disponible qu'une fois que son flux a été publié dans une session. Pour prévisualiser l'audio avant que l'éditeur ne commence à diffuser son flux vers la session, utilisez un pilote audio personnalisé.

Par défaut, pour des raisons de confidentialité, lorsque tous les éditeurs sont en sourdine, la capture audio s'arrête et le microphone est relâché. Cela signifie qu'il n'y aura plus de mises à jour du niveau audio jusqu'à ce qu'une instance d'éditeur active à nouveau l'audio. À partir de la version 2.31.0, l'éditeur est doté d'une propriété permettant de poursuivre la capture audio lorsque le son est coupé.

Lors de l'instanciation d'une nouvelle instance d'éditeur, le développeur peut activer ce comportement :


	publisher = new Publisher.Builder(_context)
	{
		AllowAudioCaptureWhileMuted = true
	}.Build();

Note : En activant ce comportement, le microphone sera utilisé même si l'éditeur est en sourdine.

Utilisation d'un moteur de rendu vidéo personnalisé

Par défaut, les éditeurs utilisent un moteur de rendu vidéo par défaut pour Windows Presentation Foundation, défini par le SDK Windows d'OpenTok.

Vous pouvez également spécifier un moteur de rendu pour la vidéo en créant une classe qui implémente l'interface IVideoRenderer. L'interface comprend un élément RenderFrame(frame) qui est appelée lorsqu'une nouvelle image vidéo est disponible. Dans votre implémentation de cette méthode, utilisez l'objet frame passé dans la méthode pour créer une image à rendre. De plus, à la fin de votre implémentation de cette méthode, assurez-vous d'appeler la méthode Dispose() de la méthode frame afin d'éviter les fuites de mémoire.

Lorsque vous instanciez un objet éditeur ou abonné, vous pouvez transmettre l'objet de rendu vidéo personnalisé à la fonction Publisher() ou Subscriber() (comme le constructeur renderer ).