Réglage du son et de la vidéo — iOS
Vous pouvez régler les paramètres audio et vidéo de publié et abonné flux :
- Publication d'audio ou de vidéo uniquement
- Publication dans une session vocale uniquement
- Sélection de la caméra utilisée par un éditeur
- Détecter le changement de caméra de l'éditeur
- Réglage de la résolution et de la fréquence d'images d'une vidéo
- Activation de la torche de l'appareil photo (lampe de poche)
- Réglage du zoom de l'appareil photo
- Utilisation d'un capteur vidéo personnalisé
- Utilisation d'un pilote audio personnalisé
- Application de transformations audio et vidéo aux flux publiés
- Réglage de la qualité audio
- Réduction de la bande passante audio avec Opus DTX
- Réglage du volume audio pour un abonné
- Abonnement audio ou vidéo uniquement
- Détecter si un flux contient de l'audio ou de la vidéo
- Définition des préférences de l'éditeur en matière de dégradation de la qualité vidéo
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. Par exemple, le code suivant désactive le son :
publisher.publishAudio = NO;
Publication dans une session vocale uniquement
Pour mettre en place un voix seulement session, définissez le videoTrack propriété de l'objet OTPublisherSettings vers NO quand tu initialiser chaque objet OTPublisher dans la session. Par exemple, le code suivant crée un éditeur pour une session vocale uniquement :
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.videoTrack = NO;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
Sélection de la caméra utilisée par un éditeur
Vous pouvez définir (ou modifier) la caméra utilisée pour diffuser un flux :
publisher.cameraPosition = AVCaptureDevicePositionFront; // front camera
publisher.cameraPosition = AVCaptureDevicePositionBack; // back camera
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é.
Détecter le changement de caméra de l'éditeur
Lorsque la caméra utilisée pour publier un flux change, le délégué de l'éditeur envoie un [OTPublisher publisher:didChangeCameraPosition:] message :
- (void)publisher:(OTPublisher *)publisher didChangeCameraPosition:(AVCaptureDevicePosition)position
{
if (position == AVCaptureDevicePositionFront) {
// front camera
} else {
// back camera
}
}
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 d'un flux diffusé par un éditeur en configurant le cameraResolution et cameraFrameRate propriétés de l'objet OTPublisherSettings que vous transmettez à la méthode [OTPublisher initWithDelegate:settings:] méthode :
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
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.
Remarque : Voir le Guide du développeur 1080p pour les considérations relatives à l'utilisation de la résolution 1080p.
Activation de la torche de l'appareil photo (lampe de poche)
Utiliser le cameraTorch propriété de l'éditeur permettant d'activer ou de désactiver la lampe de poche de la caméra (torche) lors de la capture de vidéos :
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraTorch = YES;
La valeur par défaut est NO (la lampe de poche n'est pas utilisée).
Notez que toutes les caméras de l'appareil ne disposent pas d'une lampe torche. Si la caméra active ne prend pas en charge la fonctionnalité d'éclairage de la caméra (par exemple, la caméra frontale ne la prend généralement pas en charge), l'appel à cette méthode n'a aucun effet.
Réglage du zoom de l'appareil photo
Utiliser le cameraZoomFactor propriété de l'éditeur permettant de définir le taux (facteur) de zoom de la caméra :
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraZoomFactor = 0.7;
La valeur du rapport/facteur est comprise entre 0,5 et le facteur de zoom maximal. Les valeurs comprises entre 0,5 et 1,0 représentent un ultra grand angle (zoom arrière), et les valeurs comprises entre 1,0 et le facteur de zoom maximal représentent un zoom avant. Le facteur de zoom réel appliqué est limité à la plage prise en charge par la configuration de la caméra active. Si la caméra ne prend pas en charge l'ultra grand angle, les facteurs de zoom définis en dessous de 1,0 ne seront pas pris en compte et aucun zoom ne sera appliqué. Pour les valeurs supérieures au facteur de zoom maximal pris en charge par la caméra, le facteur de zoom sera fixé à la valeur maximale prise en charge.
Utilisation d'un capteur vidéo personnalisé
La classe `OTPublisher` permet de capturer la vidéo provenant d'une caméra sur l'appareil iOS. Vous pouvez utiliser l'API de flux vidéo personnalisée pour définir un capteur vidéo personnalisé, à l'aide des classes `OTPublisherKit` et `OTVideoCapture`. Pour un exemple, consultez l'exemple « Projet 2 : Créons OTPublisher » dans le répertoire samples du SDK OpenTok pour iOS (ou à l'adresse opentok-ios-sdk-échantillons (référentiel sur GitHub).
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 iOS 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é. Appelez la méthode [OTAudioDeviceManager setAudioDevice:] Procédure permettant de configurer un pilote audio personnalisé pour la capture et la lecture d'échantillons audio :
myAudioDevice = [[MyAudioDevice alloc] init];
[OTAudioDeviceManager setAudioDevice:_myAudioDevice];
Appeler [OTAudioDeviceManager setAudioDevice:] avant d'initialiser un objet OTSession. Appelez la méthode [OTAudioDevice setAudioBus:] méthode permettant de définir un objet « bus audio ». Cet objet, défini par le protocole OTAudioBus, dispose d'un [OTAudioBus writeCaptureData:numberOfSamples:] méthode et un [OTAudioBus readRenderData:numberOfSamples:] méthode. Ces méthodes sont appelées lorsque des échantillons audio sont mis à disposition pour être écrits dans le flux audio de l'éditeur ou pour être lus à partir des flux auxquels on est abonné.
À titre d'exemple, consultez l'exemple « Project 7 : External Audio Device » dans le répertoire « samples » du SDK OpenTok pour iOS (ou à l'adresse opentok-ios-sdk-échantillons référentiel sur GitHub).
Application de transformations audio et vidéo aux flux publiés
Vous pouvez utiliser les transformateurs prêts à l'emploi de la bibliothèque Vonage Media Processor ou créer votre propre transformateur audio ou vidéo personnalisé à appliquer à une vidéo publiée. Voir ce sujet.
Réglage de la qualité audio
Pour affiner la qualité audio d'un flux d'éditeur, les approches suivantes peuvent être utilisées :
Débit binaire audio en tant que paramètres de l'éditeur
@property (nonatomic) int audioBitrate
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). Si vous ne définissez pas cette option, OpenTok attribue automatiquement un débit audio au flux.
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)
Réduction de la bande passante audio avec Opus DTX
Opus DTX (transmission discontinue) est un codec audio permettant de réduire la consommation de bande passante lorsqu'un participant ne parle pas. Cela peut s'avérer utile lors de sessions de grande envergure comptant de nombreux participants audio. Pour activer Opus DTX, il suffit de configurer le paramètre enableOpusDtx de la propriété OTPublisherKitSettings que vous passez dans l'objet [OTPublisherKit initWithDelegate:settings:] méthode (lorsque Créer un éditeur). 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 réglant le paramètre OTSubscriberKit.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.
Lorsque vous s'abonner à un fluxVous pouvez spécifier si vous souhaitez vous abonner initialement au flux audio ou vidéo (s'ils sont disponibles). Par exemple, le code suivant s'abonne uniquement au flux audio :
_subscriber = [[OTSubscriber alloc]
initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = NO;
Après avoir créé un objet Subscriber, vous activez ou désactivez l'audio en appelant la fonction subscribeToAudio() de l'objet Abonné :
_subscriber.subscribeToAudio = NO; // audio off
_subscriber.subscribeToAudio = YES; // audio on
Vous pouvez activer ou désactiver la vidéo en appelant la fonction subscribeToVideo() de l'objet Abonné :
subscriber.subscribeToVideo = NO; // video off
subscriber.subscribeToVideo = YES; // video on
Notez toutefois que vous ne pouvez vous abonner à l'audio ou à la vidéo que si le client qui publie le flux inclut l'audio ou la vidéo. Par exemple, en appelant subscribeToVideo(false) 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
Par défaut, un objet Subscriber lit à la fois l'audio et la vidéo (s'ils sont disponibles). Vous pouvez vérifier si un flux contient de l'audio ou de la vidéo (si l'éditeur du flux diffuse de l'audio ou de la vidéo) en vérifiant l'attribut hasAudio et hasVideo de l'objet Stream :
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 OTDegradationPreference valeurs :
Non défini
_publisher.degradationPreference = OTDegradationPreferenceNotSet;
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 = OTDegradationPreferenceMaintainFrameRateAndResolution;
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 = OTDegradationPreferenceMaintainFrameRate;
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 = OTDegradationPreferenceMaintainResolution;
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 = OTDegradationPreferenceBalanced;
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.