Réglage du son et de l'image — Windows

Vous pouvez régler les paramètres audio et vidéo de publié et abonné flux :

Publication d'audio ou de vidéo uniquement

Vous pouvez activer ou désactiver le son et la vidéo en configurant le PublishAudio et PublishVideo propriétés de l'objet Publisher. Par exemple, le code suivant désactive le son :

publisher.PublishAudio = false;

Publication dans une session vocale uniquement

Pour mettre en place un voix seulement session, définissez le hasVideoTrack du paramètre Publisher() au constructeur de false et définir le capturer paramètre vers null quand tu instanciation de chaque objet Publisher dans la session. Par exemple, le code suivant crée un éditeur pour une session vocale uniquement :

mPublisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: null, hasVideo: false);

Sélection de la caméra utilisée par un éditeur

Appeler le VideoCapturer.EnumerateDevices pour obtenir une liste d'objets `VideoDevice`, représentant les périphériques vidéo (généralement des caméras) disponibles sur le système. Vous pouvez ensuite utiliser l'une des CreateVideoCapturer() méthodes d'un objet `VideoDevice` pour créer un capteur vidéo qui utilise ce périphérique comme source vidéo. Vous pouvez ensuite utiliser ce capteur vidéo lors de l'instanciation d'un objet `Publisher` :

var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High);
publisher = new Publisher(Context.Instance, renderer: publisherVideo, capturer: capturer);

La classe VideoDevice comprend Name et Id propriétés permettant d'identifier le périphérique vidéo.

Mise en miroir de l'affichage local de la vidéo d'un éditeur

Vous pouvez régler la MirrorOnLocalRender de l'objet VideoCaptureSettings pour que la vidéo rendue localement par l'éditeur soit reflétée (true) ou non (false). Cette propriété doit être définie dans l'implémentation du GetCaptureSettings() méthode de la fonction de capture vidéo personnalisée pour l'objet Publisher. Voir Utilisation d'un capteur vidéo personnalisé.

Ce paramètre n'affecte que la vidéo rendue dans l'application client de l'éditeur. Il n'a aucun effet sur la vidéo dans les clients abonnés.

Changement de la source audio utilisée par les éditeurs

Vous pouvez facilement modifier la source d'entrée audio (microphone) utilisée par les diffuseurs. Appelez la fonction statique AudioDevice.EnumerateInputAudioDevices() pour obtenir une liste d'objets AudioDevice.InputAudioDevice, représentant les périphériques d'entrée disponibles. Appelez la méthode AudioDevice.SetInputAudioDevice(audioInput) pour définir le périphérique d'entrée audio utilisé par les éditeurs.

Réglage de la résolution et de la fréquence d'images d'une vidéo

Vous pouvez définir la résolution et la fréquence d'images pour le flux d'un éditeur en configurant le paramètre VideoCapturer objet que vous utilisez lorsque vous instanciation de l'objet Publisher.

Remarque : Voir le Guide du développeur 1080p pour les considérations relatives à l'utilisation de la résolution 1080p.

Il existe un certain nombre de façons d'instancier un VideoCapturer l'objet. L'une d'entre elles consiste à appeler la fonction OpenTok.VideoCapturer.EnumerateDevices() pour obtenir une liste des périphériques vidéo disponibles. Utilisez ensuite l'une des méthodes suivantes CreateVideoCapturer() de l'appareil que vous avez choisi pour instancier un VideoCapturer . Par exemple, le code suivant crée un éditeur qui utilise le capteur vidéo par défaut du système avec une résolution définie sur 720p (VideoCapturer.Resolution.High) et la fréquence d'images est réglée sur 30 images par seconde :

var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
             VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);

Si l'appareil vidéo sélectionné ne prend pas en charge la résolution ou la fréquence d'images sélectionnée, le capteur vidéo utilisera les paramètres disponibles les plus proches.

Veuillez noter que dans les sessions qui utilisent OpenTok Media Router (sessions avec le mode média Dans les sessions dont le mode média est défini sur routé, l'abaissement de la fréquence d'images réduit proportionnellement la bande passante utilisée par le flux. Toutefois, dans les sessions dont le mode média est défini sur relayé, la réduction de la fréquence d'images ne réduit pas la bande passante du flux.

Utilisation d'un capteur vidéo personnalisé

Utilisez la méthode VideoCapturer.EnumerateDevices() pour obtenir la liste des périphériques vidéo disponibles (caméras). Utilisez l'une des CreateVideoCapturer() méthodes de la classe `VideoDevice` permettant d'instancier un objet `VideoCapturer` à partir du périphérique vidéo.

Le SDK OpenTok pour Windows comprend une interface IVideoCapturer que vous pouvez utiliser pour définir un capteur vidéo personnalisé. Créez des classes personnalisées qui implémentent l'interface IVideoCapturer afin de créer un capteur vidéo personnalisé. Transmettez une instance de la classe de capteur vidéo personnalisé à la Publisher()instancier l'objet Publisher.

Le SDK OpenTok pour Windows appelle la fonction Start(IVideoFrameConsumer frameConsumer) méthode de l'objet « capturer vidéo » permettant de lancer la capture vidéo à partir du capturer vidéo personnalisé. Le SDK inclut une interface IVideoFrameConsumer qui définit le consommateur d'images vidéo pour un capturer personnalisé.

Le SDK OpenTok pour Windows appelle la fonction Consume(VideoFrame frame) méthode de l'objet consommateur d'images vidéo personnalisé lorsqu'une nouvelle image vidéo doit être affichée. La classe `VideoFrame`, définie dans le SDK Windows d'OpenTok, représente l'image vidéo.

Vous pouvez utiliser un outil de capture vidéo personnalisé pour diffuser un flux de partage d'écran. Pour plus d'informations et pour consulter un exemple de code, rendez-vous sur Partage d'écran.

Vous pouvez également utiliser un rendu vidéo personnalisé pour les vidéos.

Utilisation d'un pilote audio personnalisé

Par défaut, le SDK OpenTok pour Windows utilise le microphone de l'appareil pour capturer le son à transmettre vers un flux publié. Il utilise également les haut-parleurs (ou le casque) pour lire le son provenant d'un flux auquel l'utilisateur est abonné. Vous pouvez implémenter un pilote audio personnalisé pour lire et écrire des données audio pour les abonnés et les éditeurs. Créez une implémentation de la IAudioDevice l'interface et ses méthodes. L' IAudioDevice.InitAudio(AudioDevice.AudioBus audioBus) Cette méthode est appelée lors de l'initialisation de l'AudioDevice. Utilisez la AudioBus objet, transmis à cette méthode, pour lire et écrire des données audio, avec son ReadRenderData(buffer, numberOfSamples) et WriteCaptureData(buffer, numberOfSamples) des méthodes.

De plus, vous pouvez mettre en œuvre la IAudioDeviceExtension interface. Lorsqu'un CustomAudioDevice implémentant cette interface est attribué via AudioDevice.SetCustomAudioDevice(), l'implémentation comprend des méthodes supplémentaires (permettant de répertorier les périphériques, de sélectionner un périphérique spécifique ou de s'abonner à des notifications), qui seront intégrées en interne à l'implémentation personnalisée du périphérique audio plutôt qu'à l'implémentation statique par défaut.

La classe MMAudioDevice, incluse dans le SDK, implémente cette interface à l'aide de l'interface Windows mmdeviceapi.h :

readonly MMAudioDevice audioDevice;
    
...

audioDevice = new MMAudioDevice(dispatcher);
AudioDevice.SetCustomAudioDevice(context, audioDevice);

/* Subscribe to notifications: */
audioDevice.InputDeviceAdded += AudioInputDeviceAdded;
audioDevice.InputDeviceRemoved += AudioInputDeviceRemoved;
audioDevice.DefaultInputDeviceChanged += AudioDefaultInputDeviceChanged;

/* Alternatively, you can use the following code to subscribe to
notifications and yield the same result: */
AudioDevice.Notifications notifications = new AudioDevice.Notifications(dispatcher);
notifications.InputDeviceAdded += AudioInputDeviceAdded;
notifications.InputDeviceRemoved += AudioInputDeviceRemoved;
notifications.DefaultInputDeviceChanged += AudioDefaultInputDeviceChanged;

/* Call methods */
audioDevice.SetInputAudioDevice(myInputAudioDevice.Id);

/* Alternatively, you can use the static methods in AudioDevice and yield the same result: */
AudioDevice.SetInputAudioDevice(myInputAudioDevice);

Réglage de la qualité audio

Les Publisher.Builder comprend des propriétés permettant de régler la qualité audio. Cela vous permet de publier des flux utilisant un son de haute qualité (ou de qualité inférieure) :

AudioBitrate (Nombre) - Le débit souhaité pour l'audio publié, en bits par seconde. Les valeurs prises en charge sont comprises entre 6 000 et 510 000 (les valeurs non valides sont ignorées). (Les valeurs non valides sont ignorées.) Définissez cette valeur pour permettre un son de haute qualité (ou pour réduire l'utilisation de la bande passante avec un son de qualité inférieure).

Les paramètres suivants sont recommandés :

  • 8 000 - 12 000 pour la parole en bande étroite (NB)
  • 16 000 - 20 000 pour la parole à large bande (WB)
  • 28 000 - 40 000 pour la parole en bande complète (FB)
  • 48 000 - 64 000 pour la musique à bande complète (FB)

Si vous ne configurez pas cette option, OpenTok définit automatiquement le débit binaire audio du flux.

AutoGainControl (booléen) - Permet d'activer ou non le contrôle automatique du gain pour l'audio publié. Il peut être utile de régler ce paramètre sur false lors de la publication de fichiers audio de haute qualité (en réglant le paramètre AutoGainControl de la propriété Publisher.Builder). La valeur par défaut est true. Ce paramètre est ignoré si vous réglez DisableAudioProcessing à true (qui désactive l'annulation de l'écho, le contrôle automatique du gain et la suppression du bruit pour le flux publié).

Désactiver le traitement audio (booléen) - Désactive ou non l'annulation de l'écho, le contrôle automatique du gain et la suppression du bruit pour l'audio publié. Il peut être utile de régler ce paramètre sur true lors de la publication de fichiers audio de haute qualité (en réglant le paramètre DisableAudioProcessing de la propriété Publisher.Builder). La valeur par défaut est false.

Annulation de l'écho (booléen) - Permet d'activer ou non l'annulation de l'écho pour l'audio publié. Il peut être utile de régler ce paramètre sur false lors de la publication de fichiers audio de haute qualité (en réglant le paramètre EchoCancellation de la propriété Publisher.Builder). La valeur par défaut est true. Ce paramètre est ignoré si vous réglez DisableAudioProcessing à true (qui désactive l'annulation de l'écho, le contrôle automatique du gain et la suppression du bruit pour le flux publié).

Stéréo (booléen) - Indique s'il faut publier de l'audio stéréo. La valeur par défaut est false.

Suppression du bruit (booléen) - Permet d'activer ou non la suppression du bruit pour l'audio publié. Il peut être utile de régler ce paramètre sur false lors de la publication de fichiers audio de haute qualité (en réglant le paramètre NoiseSuppression de la propriété Publisher.Builder). La valeur par défaut est true. Ce paramètre est ignoré si vous réglez DisableAudioProcessing à true (qui désactive l'annulation de l'écho, le contrôle automatique du gain et la suppression du bruit pour le flux publié).

Réduction de la bande passante audio avec Opus DTX

Opus DTX (transmission discontinue) est un codec audio qui permet de réduire l'utilisation de la bande passante lorsqu'un participant ne parle pas. Cela peut s'avérer utile lors de sessions importantes avec de nombreux participants audio.

Vous activez Opus DTX en réglant le paramètre OpusDtx de la propriété Publisher.Builder objet que vous utilisez lorsque Créer un éditeur) à true.

Pour plus d'informations, consultez ceci Article de la base de connaissances de Vonage Video API.

Réglage du volume audio pour un abonné

Vous pouvez régler individuellement le volume audio pour chaque abonné en appelant la fonction Subscriber.AudioVolume propriété.

Abonnement audio ou vidéo uniquement

Par défaut, un objet « Subscriber » est initialisé pour s'abonner aux flux audio et vidéo, s'ils sont disponibles.

Vous pouvez activer ou désactiver le son en configurant le SubscribeToAudio propriété de l'objet « Subscriber » :

subscriber.SubscribeToAudio = false; // audio off
subscriber.SubscribeToAudio = true;  // audio on

Pour activer ou désactiver la vidéo, il suffit de régler le SubscribeToVideo propriété de l'objet « Subscriber » :

subscriber.SubscribeToVideo = false; // video off
subscriber.SubscribeToVideo = true;  // video on

Notez toutefois que vous ne pouvez vous abonner au flux audio ou vidéo que si le client qui diffuse ce flux inclut effectivement de l'audio ou de la vidéo. Par exemple, en définissant SubscribeToVideo à true n'aura aucun effet si le client qui publie le flux ne publie que de l'audio.

Détecter si un flux contient de l'audio ou de la vidéo

Vous pouvez consulter le HasAudio et HasVideo propriétés d'un objet Stream pour vérifier s'il contient du contenu audio ou vidéo

if (!stream.HasAudio) {
	// You may want to adjust the user interface
}
if (!stream.HasVideo) {
	// You may want to adjust the user interface
}

Par exemple, lorsque vous s'abonner à un flux, vous souhaiterez peut-être adapter l'interface utilisateur selon que le flux comporte du son ou de la vidéo. Par exemple, vous souhaiterez peut-être indiquer à l'utilisateur si un flux comporte du son ou non ; ou vous ne souhaiterez peut-être pas afficher la vue d'un abonné si le flux ne comporte pas de vidéo.

Définition des préférences de l'éditeur en matière de dégradation de la qualité vidéo

Lorsque la bande passante ou l'unité centrale sont limitées, le moteur vidéo peut réduire la fréquence d'images et/ou la résolution de la vidéo de l'éditeur pour s'adapter à ces limitations.

La « préférence de dégradation » est un paramètre de configuration qui permet d'ajuster ce comportement.

Les développeurs sont chargés de définir et d'appliquer les préférences de dégradation en fonction de leur cas d'utilisation et de leurs exigences.

Il s'agit d'une préférence, ce qui signifie que le moteur vidéo essaiera de suivre la préférence sélectionnée, mais il n'y a aucune garantie quant au résultat.

Cette préférence peut se comporter différemment lors de l'utilisation de vidéo évolutiveoù le moteur vidéo peut décider de supprimer des couches au lieu de dégrader la résolution.

Indice de contenu et la préférence de dégradation ont des objectifs différents mais liés : L'indication de contenu décrit le type de contenu transmis, tandis que la préférence de dégradation contrôle la stratégie d'encodage. Lorsque vous définissez une indication de contenu, le moteur vidéo détermine automatiquement la préférence de dégradation appropriée (par exemple, "texte" sélectionne automatiquement le maintien de la résolution). Une préférence de dégradation explicitement définie remplacera cette sélection automatique.

Vous pouvez définir cette valeur à l'aide de l'une des options suivantes DegradationPreference valeurs :

Non défini

publisher.DegradationPreference = DegradationPreference.NotSet;

Valeur par défaut. Le moteur vidéo déterminera le niveau de dégradation optimal.

Conserver la fréquence d'images et la résolution

publisher.DegradationPreference = DegradationPreference.MaintainFrameRateAndResolution;

Le moteur vidéo s'efforcera de maintenir une fréquence d'images constante sans réduire la résolution.

Maintenir la fréquence d'images

publisher.DegradationPreference = DegradationPreference.MaintainFrameRate;

Le moteur vidéo s'efforcera de maintenir une fréquence d'images constante, mais pourra réduire la résolution si nécessaire.

Conserver la résolution

publisher.DegradationPreference = DegradationPreference.MaintainResolution;

Le moteur vidéo ne réduira pas la résolution, mais pourra réduire la fréquence d'images si nécessaire.

Équilibré

publisher.DegradationPreference = DegradationPreference.Balanced;

Le moteur vidéo s'efforcera de trouver un juste équilibre entre la réduction de la résolution et celle de la fréquence d'images lorsque cela s'avérera nécessaire.