Personnalisation générale
Vous pouvez effectuer un certain nombre de réglages pour personnaliser l'interface utilisateur de Vonage Video :
Ajouter un nom à un flux publié
Lorsque vous créez un éditeur, vous pouvez (éventuellement) spécifier un nom à afficher dans la vidéo :
// Replace the first parameter with the target element ID:
var publisher = OT.initPublisher("myPublisher",
{name: "John"})
session.publish(publisher);
Vous pouvez utiliser ce nom pour identifier le client.
Notez que vous pouvez également ajouter des métadonnées sur le client lorsque vous créez un jeton. Ce nom n'est pas automatiquement affiché dans la vidéo. Cependant, en ajoutant les données lorsque vous créez un jeton, vous pouvez ajouter des informations de manière plus sécurisée (puisque les jetons sont créés sur le serveur, et non sur le client). Pour plus d'informations, voir Création de jetons.
Les clients peuvent choisir de masquer le nom dans une vue de l'éditeur ou de l'abonné. Voir aussi cette section
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:
mPublisher = new Publisher.Builder(context)
.name("Bob's video")
.build();
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.
Pour spécifier la propriété du nom du flux publié, définissez la propriété name de l'objet OTPublisherSettings que vous utilisez lors de l'initialisation d'un éditeur :
let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Juan"
let publisher = OTPublisher(delegate: self, settings: publisherSettings)
La classe OTStream possède une fonction name propriété. Lorsque vous s'abonner à un fluxvous pouvez afficher ce nom dans un élément de l'interface utilisateur. (Ce nom s'affiche également lorsque la vidéo se trouve dans une page web qui utilise la bibliothèque OpenTok.js).
Pour spécifier la propriété du nom du flux publié, définissez la propriété name de l'objet OTPublisherSettings que vous utilisez lors de l'initialisation d'un éditeur :
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Juan";
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
La classe OTStream possède une fonction name propriété. Lorsque vous s'abonner à un fluxvous pouvez afficher ce nom dans un élément de l'interface utilisateur. (Ce nom s'affiche également lorsque la vidéo se trouve dans une page web qui utilise la bibliothèque OpenTok.js).
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.
Ajout d'un bouton de mise en sourdine pour un éditeur
Par défaut, l'interface utilisateur d'un éditeur ou d'un abonné comprend un bouton "couper le son". Pour un éditeur, l'utilisateur peut cliquer sur ce bouton pour activer ou désactiver le micro.
Lorsque vous publiez un flux, vous pouvez spécifier si le bouton muet est affiché en passant un paramètre style.buttonDisplayMode dans la propriété OT.initPublisher() méthode :
const publisher = OT.initPublisher(
'publisher-element-id', // Replace with the replacement element ID
{
name: 'John',
style: {buttonDisplayMode: 'on'}
}
);
session.publish(publisher);
Les style.buttonDisplayMode peut prendre l'une des trois valeurs suivantes :
- "auto" - Le bouton muet s'affiche lorsque le flux est affiché pour la première fois et lorsque l'utilisateur passe la souris sur la vidéo (par défaut).
- "off" - La touche mute n'est pas affichée.
- "on" - La touche mute est affichée.
Une fois que vous avez créé l'éditeur, vous pouvez modifier le mode d'affichage du bouton muet en appelant la commande setStyle() de l'objet Publisher. Voir la documentation de l'objet Publisher.setStyle().
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 appelle la fonction setPublishAudio() de l'objet PublisherKit lorsque l'utilisateur clique dessus. Passer en false pour mettre l'éditeur en sourdine :
mPublisher.setPublishAudio(false);
Entrer true pour publier des documents audio.
mPublisher.setPublishAudio(true);
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 OTPublisher lorsque l'utilisateur clique dessus. Définir la propriété publishAudio à la propriété false pour mettre l'éditeur en sourdine :
publisher.publishAudio = false
Régler le publishAudio à la propriété true pour publier des documents audio.
publisher.publishAudio = true
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 OTPublisher lorsque l'utilisateur clique dessus. Définir la propriété publishAudio à la propriété NO pour mettre l'éditeur en sourdine :
publisher.publishAudio = NO;
Régler le publishAudio à la propriété YES pour publier des documents audio.
publisher.publishAudio = YES;
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é
Par défaut, l'interface utilisateur d'un éditeur ou d'un abonné comprend un bouton "couper le son". Pour un abonné, l'utilisateur peut cliquer pour activer ou désactiver le haut-parleur.
Lorsque vous vous abonnez à un flux, vous pouvez spécifier si le haut-parleur muet est affiché en passant un paramètre style.buttonDisplayMode dans la propriété Session.subscribe() méthode :
const subscriber = session.subscribe(stream,
'subscriber-element-id', // Replace with the replacement element ID
{
style: {buttonDisplayMode: 'on'}
}
);
Les style.buttonDisplayMode peut prendre l'une des trois valeurs suivantes :
- "auto" - Le bouton muet s'affiche lorsque le flux est affiché pour la première fois et lorsque l'utilisateur passe la souris sur la vidéo (par défaut).
- "off" - La touche mute n'est pas affichée.
- "on" - La touche mute est affichée.
Une fois que vous avez créé l'abonné, vous pouvez modifier le mode d'affichage du bouton muet en appelant la fonction setStyle() de l'objet Abonné. Voir la documentation de l'objet Abonné.setStyle().
Il n'y a pas d'élément d'interface utilisateur par défaut pour couper le son de l'abonné. Cependant, vous pouvez ajouter un élément, tel qu'un bouton, qui appelle la fonction setSubscribeToAudio() de l'objet SubscriberKit lorsque l'utilisateur clique dessus. Transmettre à false pour mettre l'abonné en sourdine
mSubscriber.setSubscribeToAudio(false);
Entrer true pour s'abonner à l'audio (s'il y a un flux audio) :
mSubscriber.setSubscribeToAudio(true);
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 OTSubscriber lorsque l'utilisateur clique dessus. Définir l'objet subscribeToAudio à la propriété false pour mettre l'abonné en sourdine
subscriber.subscribeToAudio = false
Régler le subscribeToAudio à la propriété true pour s'abonner à l'audio (s'il y a un flux audio) :
subscriber.subscribeToAudio = true
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 OTSubscriber lorsque l'utilisateur clique dessus. Définir l'objet subscribeToAudio à la propriété NO pour mettre l'abonné en sourdine
subscriber.subscribeToAudio = NO;
Régler le subscribeToAudio à la propriété YES pour s'abonner à l'audio (s'il y a un flux audio) :
subscriber.subscribeToAudio = YES;
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 appelle la fonction swapCamera de l'objet Publisher :
mPublisher.swapCamera();
Il convient de noter que le cameraPosition n'est pas disponible dans la classe PublisherKit. Si vous utilisez la classe PublisherKit pour mettre en œuvre un capteur vidéo personnalisévous pouvez définir la caméra utilisée dans le code de capture vidéo personnalisé.
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 cameraPosition de l'objet OTPublisher. Définissez la propriété à une valeur définie dans l'enum AVCaptureDevicePosition. Par exemple, le code suivant définit l'éditeur de manière à ce qu'il utilise la caméra arrière :
publisher.cameraPosition = .back
Il convient de noter que le cameraPosition n'est pas disponible dans la classe OTPublisherKit. Si vous utilisez la classe OTPublisherKit pour mettre en œuvre un capteur vidéo personnalisévous pouvez définir la caméra utilisée dans le code de capture vidéo personnalisé.
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 cameraPosition de l'objet OTPublisher. Définissez la propriété à une valeur définie dans l'enum AVCaptureDevicePosition. Par exemple, le code suivant définit l'éditeur de manière à ce qu'il utilise la caméra arrière :
publisher.cameraPosition = AVCaptureDevicePositionBack;
Il convient de noter que le cameraPosition n'est pas disponible dans la classe OTPublisherKit. Si vous utilisez la classe OTPublisherKit pour mettre en œuvre un capteur vidéo personnalisévous pouvez définir la caméra utilisée dans le code de capture vidéo personnalisé.
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
Un objet Abonné envoie les événements suivants liés à l'activation ou à la désactivation de la vidéo pour le flux de l'abonné :
videoEnabled- Envoyé lorsque la vidéo a été activée après avoir été désactivée.videoDisabled- Lancé lorsque la vidéo a été désactivée. La propriété reason de l'objet event indique la raison pour laquelle la vidéo a été désactivée. (Cet objet d'événement est un VideoEnabledChangedEvent objet.)videoDisableWarning- Envoyé lorsque le routeur média détermine que la qualité du flux s'est dégradée et que la vidéo sera désactivée si la qualité se dégrade davantage. Si la qualité se dégrade encore, l'abonné désactive la vidéo et envoie un message d'avertissement.videoDisabledévénement.videoDisableWarningLifted- La vidéo a été activée alors qu'elle était précédemment désactivée.
Les videoDisableWarning et videoDisableWarningLifted ne sont disponibles que dans les sessions qui utilisent l'option Routeur média (sessions dont le mode média est réglé sur routé).
Par défaut, l'abonné affiche un indicateur d'avertissement de désactivation vidéo et un indicateur de désactivation vidéo lorsque l'écran de l'abonné s'éteint. videoDisableWarning et videoDisableWarningLifted sont envoyés. Vous pouvez désactiver l'affichage par défaut de l'indicateur en définissant le paramètre videoDisabledDisplayMode paramètre de style de l'objet Abonné.
L'exemple suivant utilise l'option videoDisabledDisplayMode pour que l'indicateur d'avertissement de désactivation vidéo et l'indicateur de désactivation vidéo clignotent toutes les secondes lorsque l'écran de l'ordinateur est éteint. videoDisableWarning et videoDisableWarningLifted sont envoyés :
var indicatorBlinker = new IndicatorBlinker(subscriber);
var IndicatorBlinker = function(subscriber) {
var timer;
var indicatorOn = false;
subscriber.on({
videoDisabled: function(event) {
start();
},
videoDisableWarning: function(event) {
start();
},
videoDisableWarningLifted: function(event) {
stop();
},
videoEnabled: function(event) {
stop();
}
});
var start = function() {
subscriber.setStyle('videoDisabledDisplayMode', 'on');
if (timer) {
clearInterval(timer);
}
timer = setInterval(function() {
if (indicatorOn) {
subscriber.setStyle('videoDisabledDisplayMode', 'off');
} else {
subscriber.setStyle('videoDisabledDisplayMode', 'on');
}
indicatorOn = !indicatorOn;
}, 1000);
indicatorOn = true;
};
var stop = function() {
if (timer) {
clearInterval(timer);
}
};
};
Vous pouvez également régler la videoDisabledDisplayMode à "off" et ajoutez vos propres éléments d'interface utilisateur basés sur le style videoDisableWarning, videoDisabled, videoDisableWarningLiftedet videoEnabled événements.
Lorsque la vidéo d'un abonné est désactivée, l'application SubscriberKit.VideoListener.onVideoDisabled(subscriber, reason) est appelée. 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 :
@Override
public void onVideoDisabled(SubscriberKit subscriber, String reason) {
// Display the video disabled indicator
}
Lorsque la vidéo d'un abonné est réactivée, la fonction SubscriberKit.VideoListener.onVideoEnabled(subscriber, reason) est appelée. Dans ce cas, vous pouvez supprimer un élément de l'interface utilisateur (tel qu'une icône) qui indique que la vidéo est réactivée :
@Override
public void onVideoEnabled(SubscriberKit subscriber, String reason) {
// Display the video disabled indicator
}
Dans les sessions qui utilisent l'option Routeur vidéo multimédia de Vonage (sessions dont le mode média est réglé sur routé), le SubscriberKit.VideoListener peut également appeler les méthodes suivantes :
- onVideoDisableWarning(subscriber) - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est dégradée et la vidéo sera désactivée si la qualité se dégrade davantage.
- onVideoDisableWarningLifted(abonné) - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est améliorée au point que la désactivation de la vidéo ne constitue pas un risque immédiat.
Vous pouvez également afficher et supprimer une notification de l'interface utilisateur (telle qu'une icône) lorsque ces messages sont envoyés.
Notez que lorsque vous publiez un flux, vous pouvez éviter que la vidéo soit désactivée en raison de la qualité du flux. Avant de publier le flux (en appelant la fonction Session.publish(publisher) ), appeler la méthode setAudioFallbackEnabled(boolean enabled) de l'objet Publisher (ou de l'objet PublisherKit) et transmet la méthode false.
Lorsque la vidéo d'un abonné est désactivée, l'application OTSubscriberKitDelegate subscriberVideoDisabled(_:reason :) est envoyé. 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 :
func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Display the video disabled indicator
}
Lorsque la vidéo d'un abonné est réactivée, la fonction OTSubscriberKitDelegate subscriberVideoEnabled(_:reason :) est envoyé. Dans ce cas, vous pouvez supprimer un élément de l'interface utilisateur (tel qu'une icône) qui indique que la vidéo est réactivée :
func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
// Remove the video disabled indicator
}
Dans les sessions qui utilisent l'option Routeur vidéo multimédia de Vonage (sessions dont le mode média est réglé sur routé), les messages suivants peuvent également être envoyés :
- OTSubscriberKitDelegate subscriberVideoDisableWarning(_ :) - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est dégradée et la vidéo sera désactivée si la qualité se dégrade davantage.
- OTSubscriberKitDelegate subscriberVideoDisableWarningLifted(_ :)] - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est améliorée au point que la désactivation de la vidéo ne constitue pas un risque immédiat.
Vous pouvez également afficher et supprimer une notification de l'interface utilisateur (telle qu'une icône) lorsque ces messages sont envoyés.
Notez que lorsque vous publiez un flux, vous pouvez éviter que la vidéo soit désactivée en raison de la qualité du flux. Avant de publier le flux (en appelant la fonction OTSession publish(_:error:) ), définir la méthode audioFallbackEnabled de l'objet Publisher (ou PublisherKit) à false.
Lorsque la vidéo d'un abonné est désactivée, l'application [OTSubscriberKitDelegate subscriberVideoDisabled:reason :] est envoyé. 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 :
- (void)subscriberVideoDisabled:(OTSubscriberKit*)subscriber
reason:(OTSubscriberVideoEventReason)reason
{
// Display the video disabled indicator
}
Lorsque la vidéo d'un abonné est réactivée, la fonction [OTSubscriberKitDelegate subscriberVideoEnabled:reason :] est envoyé. Dans ce cas, vous pouvez supprimer un élément de l'interface utilisateur (tel qu'une icône) qui indique que la vidéo est réactivée :
- (void)subscriberVideoEnabled:(OTSubscriberKit*)subscriber
reason:(OTSubscriberVideoEventReason)reason
{
// Remove the video disabled indicator
}
Dans les sessions qui utilisent l'option Routeur vidéo multimédia de Vonage (sessions dont le mode média est réglé sur routé), les messages suivants peuvent également être envoyés :
- [OTSubscriberKitDelegate subscriberVideoDisableWarning :] - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est dégradée et la vidéo sera désactivée si la qualité se dégrade davantage.
- [OTSubscriberKitDelegate subscriberVideoDisableWarningLifted :] - Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est améliorée au point que la désactivation de la vidéo ne constitue pas un risque immédiat.
Vous pouvez également afficher et supprimer une notification de l'interface utilisateur (telle qu'une icône) lorsque ces messages sont envoyés.
Notez que lorsque vous publiez un flux, vous pouvez éviter que la vidéo soit désactivée en raison de la qualité du flux. Avant de publier le flux (en appelant la fonction [OTSession publish:error] ), définir la méthode audioFallbackEnabled de l'objet Publisher (ou PublisherKit) à NO.
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 vidéo multimédia de Vonage (sessions dont le mode média est réglé sur routé), l'abonnement peut également envoyer les événements suivants :
VideoDisableWarning- Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est dégradée et la vidéo sera désactivée si la qualité se dégrade davantage.VideoDisableWarningLifted- Le routeur vidéo de Vonage a déterminé que la qualité du flux s'est améliorée au point que la désactivation de la vidéo ne constitue pas un 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.
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'icône Session.ArchiveListener.onArchiveStarted(session, name) est appelée. Lorsque l'enregistrement s'arrête, la méthode Session.ArchiveListener.onArchiveStopped(session, name) est appelée. 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 :
@Override
public void onArchiveStarted(Session session, String id, String name) {
// Display the archive indicator
}
@Override
public void onArchiveStopped(Session session, String id, String name) {
// Hide the archive indicator
}
Lorsqu'une archive d'une session commence à enregistrer (ou si vous vous connectez à une session en cours d'enregistrement), l'icône OTSessionDelegate session(_:archiveStartedWithId:name:) est envoyé. Lorsque l'enregistrement s'arrête, le OTSessionDelegate session(_:archiveStoppedWithId:) est envoyé. Vous pouvez ajouter un élément d'interface utilisateur, tel qu'une icône affichée dans une vue OTPublisher, pour indiquer qu'une vidéo est en cours d'enregistrement :
func session(_ session: OTSession, archiveStartedWithId archiveId: String, name: String?) {
// Display the archive indicator
}
func session(_ session: OTSession, archiveStoppedWithId archiveId: String) {
// Hide the archive indicator
}
Lorsqu'une archive d'une session commence à enregistrer (ou si vous vous connectez à une session en cours d'enregistrement), l'icône [OTSessionDelegate session:archiveStartedWithId:name:] est envoyé. Lorsque l'enregistrement s'arrête, le [OTSessionDelegate session:archiveStoppedWithId:] est envoyé. Vous pouvez ajouter un élément d'interface utilisateur, tel qu'une icône affichée dans une vue OTPublisher, pour indiquer qu'une vidéo est en cours d'enregistrement :
- (void) session:(OTSession*)session
archiveStartedWithId:(NSString*)archiveId
name:(NSString*)name
{
// Display the archive indicator
}
- (void) session:(OTSession*)session
archiveStoppedWithId:(NSString*)archiveId
{
// Hide the archive indicator
}
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
Répartition des objets Publisher et Subscriber audioLevelUpdated périodiquement pour signaler le niveau audio. Vous pouvez utiliser ces événements pour afficher un indicateur de niveau audio. Vous pouvez également utiliser ces événements pour détecter les haut-parleurs actifs dans une session.
L'exemple suivant modifie la valeur d'un élément de compteur qui indique le volume d'un abonné. Le code définit la valeur de l'élément audioLevelDisplayMode style à 'off'qui désactive l'indicateur de niveau audio par défaut affiché dans l'Abonné. Notez que le niveau audio est ajusté de manière logarithmique et qu'une moyenne mobile est appliquée :
subscriber.setStyle('audioLevelDisplayMode', 'off');
var movingAvg = null;
subscriber.on('audioLevelUpdated', function(event) {
if (movingAvg === null || movingAvg <= event.audioLevel) {
movingAvg = event.audioLevel;
} else {
movingAvg = 0.7 * movingAvg + 0.3 * event.audioLevel;
}
// 1.5 scaling to map the -30 - 0 dBm range to [0,1]
var logLevel = (Math.log(movingAvg) / Math.LN10) / 1.5 + 1;
logLevel = Math.min(Math.max(logLevel, 0), 1);
document.getElementById('subscriberMeter').value = logLevel;
});
L'exemple suppose qu'il existe un élément HTML meter avec l'ID "subscriberMeter".
Notez qu'en mode audio uniquement, un élément DOM éditeur ou abonné affiche par défaut un indicateur de volume (dans le coin supérieur droit de l'élément). Vous pouvez désactiver cet élément d'interface utilisateur par défaut et afficher votre propre indicateur de volume. Voir la rubrique suivante, Ajustement de l'interface utilisateur lorsque la vidéo est activée ou désactivée.
Vous pouvez également utiliser la fonction audioLevelUpdated pour déterminer quand l'audio d'un éditeur ou d'un abonné est assez fort pendant suffisamment longtemps pour indiquer que le participant a commencé à parler. Ou, si l'audio est resté silencieux pendant suffisamment longtemps, vous pouvez identifier le participant comme ayant cessé de parler :
var subscriber = session.subscribe(event.stream);
SpeakerDetection(subscriber, function() {
console.log('started talking');
}, function() {
console.log('stopped talking');
});
var SpeakerDetection = function(subscriber, startTalking, stopTalking) {
var activity = null;
subscriber.on('audioLevelUpdated', function(event) {
var now = Date.now();
if (event.audioLevel > 0.2) {
if (!activity) {
activity = {timestamp: now, talking: false};
} else if (activity.talking) {
activity.timestamp = now;
} else if (now- activity.timestamp > 1000) {
// detected audio activity for more than 1s
// for the first time.
activity.talking = true;
if (typeof(startTalking) === 'function') {
startTalking();
}
}
} else if (activity && now - activity.timestamp > 3000) {
// detected low audio activity for more than 3s
if (activity.talking) {
if (typeof(stopTalking) === 'function') {
stopTalking();
}
}
activity = null;
}
});
};
(Au lieu d'enregistrer les données dans la console, votre application pourrait ajuster un élément de l'interface utilisateur lorsque l'utilisateur commence et arrête de parler.
Les SubscriberKit.AudioLevelListener.onAudioLevelUpdated(subscriber, audioLevel) et PublisherKit.AudioLevelListener.onAudioLevelUpdated(publisher, audioLevel) Les messages sont envoyés à intervalles réguliers avec le niveau audio de l'abonné et de l'éditeur. Vous pouvez utiliser la fonction audioLevel pour actualiser l'affichage d'un indicateur de niveau audio :
@Override
public void onAudioLevelUpdated(
SubscriberKit subscriber, float audioLevel) {
// Adjust an audio meter UI element based on the audioLevel value.
}
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 :
mPublisher = new Publisher.Builder(this).name(mUsername).allowAudioCaptureWhileMuted(true).build();
Note : En activant ce comportement, le microphone sera utilisé même si l'éditeur est en sourdine.
Les OTPublisherKitAudioLevelDelegate publisher(_:audioLevelUpdated:) et OTSubscriberKitAudioLevelDelegate subscriber(_:audioLevelUpdated:) Les messages sont envoyés à intervalles réguliers avec le niveau audio de l'abonné et de l'éditeur. Vous pouvez utiliser la fonction audioLevel pour actualiser l'affichage d'un indicateur de niveau audio.
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 :
let settings = OTPublisherSettings()
settings.allowAudioCaptureWhileMuted = true;
publisher = OTPublisher(delegate: self, settings: settings)!
Note : En activant ce comportement, le microphone sera utilisé même si l'éditeur est en sourdine.
Les [OTPublisherKitAudioLevelDelegate publisher:audioLevelUpdated:] et [OTSubscriberKitAudioLevelDelegate subscriber:audioLevelUpdated:] Les messages sont envoyés à intervalles réguliers avec le niveau audio de l'abonné et de l'éditeur. Vous pouvez utiliser la fonction audioLevel pour actualiser l'affichage d'un indicateur de niveau audio.
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 :
OTPublisherKitSettings* settings = [[OTPublisherKitSettings alloc] init];
settings.allowAudioCaptureWhileMuted = true;
_publisher = [[OTPublisherKit alloc] initWithDelegate:self settings:settings];
Note : En activant ce comportement, le microphone sera utilisé même si l'éditeur est en sourdine.
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
}
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é
Les classes Subscriber et Publisher mettent en œuvre un moteur de rendu vidéo standard qui rend le flux et fournit des commandes d'interface utilisateur pour l'affichage du nom du flux et la coupure du microphone ou de la caméra. Vous pouvez utiliser les classes SubscriberKit et PublisherKit pour mettre en œuvre un moteur de rendu vidéo personnalisé.
Le SDK Android comprend une classe BaseVideoRenderer. Remplacez cette classe pour créer un moteur de rendu vidéo personnalisé.
Après avoir instancié un objet PublisherKit, vous pouvez définir un moteur de rendu vidéo personnalisé en appelant la fonction setRenderer() de l'objet PublisherKit :
mPublisher = new PublisherKit(MyClass.this, "publisher");
// Use a custom video renderer.
// MyVideoRenderer extends BaseVideoRenderer
mRenderer = new MyVideoRenderer();
mPublisher.setRenderer(new mRenderer);
La classe SubscriberKit possède également une fonction setRenderer() méthode.
Les onFrame() de la classe BaseVideoRenderer est appelée lorsqu'une nouvelle image est disponible :
public void onFrame(Frame frame) {
// The new frame is available.
}
Les frame est un objet BaseVideoRenderer.Frame. Cet objet comprend un getBuffer() qui renvoie le tampon d'octets contenant les données de l'image vidéo. Vous pouvez utiliser ce tampon d'octets pour ajouter l'image de la trame vidéo à la vue de l'éditeur.
Pour un exemple, voir la classe OpenTokVideoRenderer dans l'exemple d'application OpenTokHelloWorld.
Vous pouvez également configurer un éditeur pour qu'il utilise un capteur vidéo personnalisé.
Les classes OTPublisher et OTSubscriber fournissent une instance UIView par défaut qui assure le rendu de la vidéo de l'éditeur ou de l'abonné. Vous pouvez utiliser l'API de flux vidéo personnalisé pour définir un moteur de rendu vidéo personnalisé, à l'aide des classes OTPublisherKit, OTSubscriberKit et OTVideoRender.
Vous pouvez également configurer un éditeur pour qu'il utilise un capteur vidéo personnalisé.
Les classes OTPublisher et OTSubscriber fournissent une instance UIView par défaut qui assure le rendu de la vidéo de l'éditeur ou de l'abonné. Vous pouvez utiliser l'API de flux vidéo personnalisé pour définir un moteur de rendu vidéo personnalisé, à l'aide des classes OTPublisherKit, OTSubscriberKit et OTVideoRender.
Vous pouvez également configurer un éditeur pour qu'il utilise un capteur vidéo personnalisé.
Par défaut, les éditeurs utilisent un moteur de rendu vidéo par défaut pour Windows Presentation Foundation, qui est défini par le SDK Windows Video de Vonage.
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 ).