Audio- und Videoeinstellungen anpassen — iOS

Sie können Audio- und Videoeinstellungen für veröffentlicht und abonniert Streams:

Nur Audio oder Video veröffentlichen

Sie können Audio und Video ein- oder ausschalten, indem Sie die publishAudio und publishVideo Eigenschaften. Der folgende Code schaltet beispielsweise den Ton aus:

publisher.publishAudio = NO;

Veröffentlichung in einer reinen Sprachsitzung

Zum Einrichten einer Reine Sprachausgabe Sitzung, legen Sie die videoTrack Eigenschaft des OTPublisherSettings-Objekts auf NO wenn du Jedes OTPublisher-Objekt initialisieren in der Sitzung. Der folgende Code erstellt zum Beispiel einen Verleger für eine reine Sprachsitzung:

OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.videoTrack = NO;
_publisher = [[OTPublisher alloc]
              initWithDelegate:self
              settings:_publisherSettings];

Auswahl der von einem Herausgeber verwendeten Kamera

Sie können die Kamera festlegen (oder ändern), die zum Veröffentlichen eines Streams verwendet wird:

publisher.cameraPosition = AVCaptureDevicePositionFront; // front camera
publisher.cameraPosition = AVCaptureDevicePositionBack; // back camera

Beachten Sie, dass die cameraPosition Eigenschaft ist in der OTPublisherKit-Klasse nicht verfügbar. Wenn Sie die OTPublisherKit-Klasse verwenden, um einen benutzerdefinierten Video-Capturer implementierenkönnen Sie die im benutzerdefinierten Code für die Videoaufzeichnung verwendete Kamera festlegen.

Erkennen, wann sich die Kamera des Verlegers ändert

Wenn sich die zur Veröffentlichung eines Streams verwendete Kamera ändert, sendet der Veröffentlichungsdelegierte eine [OTPublisher publisher:didChangeCameraPosition:] Nachricht:

- (void)publisher:(OTPublisher *)publisher didChangeCameraPosition:(AVCaptureDevicePosition)position
{
    if (position == AVCaptureDevicePositionFront) {
        // front camera
    } else {
        // back camera
    }
}

Auflösung und Bildfrequenz für ein Video einstellen

Sie können die Auflösung und die Bildrate für den Stream eines Anbieters festlegen, indem Sie die cameraResolution und cameraFrameRate Eigenschaften des OTPublisherSettings-Objekts, das Sie an die [OTPublisher initWithDelegate:settings:] Methode:

OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
              initWithDelegate:self
              settings:_publisherSettings];

Beachten Sie, dass in Sitzungen, die den OpenTok Media Router verwenden (Sitzungen mit dem Medienbetrieb Wenn der Medienmodus auf geroutet eingestellt ist, wird durch die Verringerung der Bildrate die vom Stream verwendete Bandbreite proportional reduziert. In Sitzungen, bei denen der Medienmodus auf "Relayed" eingestellt ist, wird die Bandbreite des Streams durch die Verringerung der Bildrate jedoch nicht verringert.

Anmerkung: Siehe die 1080p-Entwicklerhandbuch für Überlegungen zur Verwendung der 1080p-Auflösung.

Aktivieren der Kamerataschenlampe (Blitzlicht)

Verwenden Sie die cameraTorch Verlegereigenschaft zum Aktivieren oder Deaktivieren des Kamerablitzlichts (Taschenlampe) während der Videoaufnahme:

OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraTorch = YES;

Der Standardwert ist NO (die Taschenlampe wird nicht benutzt).

Beachten Sie, dass nicht alle Gerätekameras über ein Kamerablitzlicht verfügen. Wenn die aktive Kamera die Funktion des Kamerablitzes nicht unterstützt (z. B. unterstützt die Frontkamera diese Funktion in der Regel nicht), hat der Aufruf dieser Methode keine Wirkung.

Einstellen des Kamerazooms

Verwenden Sie die cameraZoomFactor Eigenschaft des Herausgebers, um den Zoomfaktor der Kamera festzulegen:

OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraZoomFactor = 0.7;

Der Wert des Verhältnisses/Faktors reicht von 0,5 bis zum maximalen Zoomfaktor. Werte zwischen 0,5 und 1,0 stehen für Ultraweitwinkel (Herauszoomen), Werte zwischen 1,0 und dem maximalen Zoomfaktor für Heranzoomen. Der tatsächlich angewandte Zoomfaktor ist auf den Bereich beschränkt, der von der aktiven Kamerakonfiguration unterstützt wird - wenn die Kamera keinen Ultraweitwinkel unterstützt, werden Zoomfaktoren unter 1,0 nicht wirksam und es wird kein Zoom angewandt. Bei Werten, die über dem von der Kamera unterstützten maximalen Zoomfaktor liegen, wird der Zoomfaktor auf den maximal unterstützten Wert gesetzt.

Verwendung eines benutzerdefinierten Video-Capturers

Die Klasse „OTPublisher“ erfasst Videodaten von einer Kamera auf dem iOS-Gerät. Mithilfe der benutzerdefinierten Video API können Sie mithilfe der Klassen „OTPublisherKit“ und „OTVideoCapture“ einen benutzerdefinierten Video-Capturer definieren. Ein Beispiel finden Sie im Beispiel „Projekt 2: OTPublisher erstellen“ im Verzeichnis „samples“ des OpenTok iOS SDK (oder unter der Adresse opentok-ios-sdk-Beispiele Repo auf GitHub).

Sie können auch ein benutzerdefinierter Videorenderer für Videos.

Verwendung eines benutzerdefinierten Audiotreibers

Standardmäßig nutzt das OpenTok-iOS-SDK das Mikrofon des Geräts, um Audioaufnahmen für die Übertragung an einen veröffentlichten Stream aufzunehmen. Zur Wiedergabe von Audio aus einem abonnierten Stream werden die Lautsprecher (oder Kopfhörer) verwendet. Rufen Sie die [OTAudioDeviceManager setAudioDevice:] Vorgehensweise zum Einrichten eines benutzerdefinierten Audiotreibers für die Erfassung und Wiedergabe von Audio-Samples:

myAudioDevice = [[MyAudioDevice alloc] init];
[OTAudioDeviceManager setAudioDevice:_myAudioDevice];

Rufen Sie an. [OTAudioDeviceManager setAudioDevice:] bevor Sie ein OTSession-Objekt initialisieren. Rufen Sie die [OTAudioDevice setAudioBus:] Methode zum Festlegen eines Audiobus-Objekts. Dieses Objekt, das durch das OTAudioBus-Protokoll definiert ist, verfügt über ein [OTAudioBus writeCaptureData:numberOfSamples:] Methode und eine [OTAudioBus readRenderData:numberOfSamples:] Methode. Diese Methoden werden aufgerufen, wenn Audio-Samples zum Schreiben in den Audio-Stream des Publishers oder zum Lesen aus den abonnierten Streams bereitgestellt werden.

Ein Beispiel finden Sie im Beispiel „Project 7: External Audio Device“ im Verzeichnis „samples“ des OpenTok iOS SDK (oder unter der Adresse opentok-ios-sdk-Beispiele Repo auf GitHub).

Anwendung von Audio- und Videotransformationen auf veröffentlichte Streams

Sie können vorgefertigte Transformatoren aus der Vonage Media Processor-Bibliothek verwenden oder einen eigenen benutzerdefinierten Audio- oder Video-Transformator erstellen, um diesen auf veröffentlichte Videos anzuwenden. Siehe dieses Thema.

Optimierung der Audioqualität

Zur Feinabstimmung der Audioqualität für einen Publisher-Stream können die folgenden Methoden verwendet werden:

Audio-Bitrate als Verlagseinstellungen

@property (nonatomic) int audioBitrate

Die gewünschte Bitrate für das veröffentlichte Audio in Bits pro Sekunde. Der unterstützte Wertebereich liegt zwischen 6.000 und 510.000. (Ungültige Werte werden ignoriert.) Legen Sie diesen Wert fest, um Audio in hoher Qualität zu ermöglichen (oder um die Bandbreitennutzung mit Audio geringerer Qualität zu reduzieren). Wenn Sie diese Option nicht festlegen, weist OpenTok automatisch eine Audio-Bitrate für den Stream zu.

Die folgenden Einstellungen sind empfehlenswert:

  • 8.000 - 12.000 für Schmalbandsprache (NB)
  • 16.000 - 20.000 für Breitbandsprache (WB)
  • 28.000 - 40.000 für Full-Band (FB) Sprache
  • 48.000 - 64.000 für Vollbandmusik (FB)

Reduzierung der Audiobandbreite mit Opus DTX

Opus DTX (Diskontinuierliche Übertragung) ist ein Audio-Codec, der den Bandbreitenverbrauch reduzieren kann, wenn ein Teilnehmer gerade nicht spricht. Dies kann bei großen Sitzungen mit vielen Audio-Teilnehmern nützlich sein. Sie aktivieren Opus DTX, indem Sie die enableOpusDtx Eigenschaft der OTPublisherKitSettings Objekt, das Sie an die [OTPublisherKit initWithDelegate:settings:] Methode (wenn Einen Verlag anlegen). Weitere Informationen finden Sie hier Vonage Video API Wissensbasisartikel.

Einstellen der Lautstärke für einen Teilnehmer

Sie können die Audiolautstärke für jeden Teilnehmer individuell einstellen, indem Sie die OTSubscriberKit.audioVolume Eigentum.

Nur Audio- oder Videoabonnements

Standardmäßig wird ein „Subscriber“-Objekt so initialisiert, dass es Audio- und Videodaten abonniert, sofern diese verfügbar sind.

Wenn Sie einen Stream abonnierenkönnen Sie angeben, ob Sie zunächst den Audio- oder den Videostream abonnieren möchten (sofern verfügbar). Der folgende Code abonniert zum Beispiel nur den Audiostream:

_subscriber = [[OTSubscriber alloc]
                initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = NO;

Nachdem Sie ein Subscriber-Objekt erstellt haben, schalten Sie den Ton ein oder aus, indem Sie die Funktion subscribeToAudio() Methode des Subscriber-Objekts:

_subscriber.subscribeToAudio = NO; // audio off
_subscriber.subscribeToAudio = YES; // audio on

Sie schalten das Video ein oder aus, indem Sie die Funktion subscribeToVideo() Methode des Subscriber-Objekts:

subscriber.subscribeToVideo = NO; // video off
subscriber.subscribeToVideo = YES; // video on

Beachten Sie jedoch, dass Sie Audio oder Video nur abonnieren können, wenn der Client, der den Stream veröffentlicht, Audio oder Video enthält. Zum Beispiel, der Aufruf subscribeToVideo(false) hat keine Auswirkung, wenn der Client, der den Stream veröffentlicht, nur Audio veröffentlicht.

Erkennen, ob ein Stream Audio oder Video enthält

Standardmäßig gibt ein Subscriber-Objekt sowohl Audio als auch Video wieder (wenn sie verfügbar sind). Sie können überprüfen, ob ein Stream Audio oder Video enthält (wenn der Herausgeber des Streams Audio oder Video streamt), indem Sie die hasAudio und hasVideo Eigenschaften des Stream-Objekts:

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

Zum Beispiel, wenn Sie einen Stream abonnieren, möchten Sie die Benutzeroberfläche möglicherweise je nachdem anpassen, ob der Stream Audio oder Video enthält. Beispielsweise möchten Sie dem Benutzer vielleicht anzeigen, ob ein Stream Audio enthält oder nicht; oder Sie möchten die Abonnentenansicht möglicherweise nicht anzeigen, wenn ein Stream kein Video enthält.

Einstellung der Präferenz für die Videoqualitätsreduzierung durch den Herausgeber

Wenn die Bandbreite oder die CPU begrenzt sind, kann die Video-Engine die Bildrate und/oder die Auflösung des Herausgebervideos reduzieren, um sich an die Einschränkungen anzupassen.

Die Degradierungspräferenz ist eine Konfigurationseinstellung, mit der sich dieses Verhalten anpassen lässt.

Die Entwickler sind für die Definition und Anwendung von Degradationspräferenzen entsprechend ihrem Anwendungsfall und ihren Anforderungen verantwortlich.

Es handelt sich um eine Voreinstellung, d. h. die Video-Engine versucht, die gewählte Voreinstellung zu befolgen, aber es gibt keine Garantie für das Ergebnis.

Diese Einstellung kann sich anders verhalten, wenn Sie skalierbares VideoDie Video-Engine kann beschließen, Ebenen zu entfernen, anstatt die Auflösung zu verringern.

Hinweis auf den Inhalt und Degradationspräferenz dienen unterschiedlichen, aber verwandten Zwecken: Der Inhaltshinweis beschreibt die Art des zu übertragenden Inhalts, während die Degradationspräferenz die Codierungsstrategie steuert. Wenn Sie einen Inhaltshinweis festlegen, bestimmt die Video-Engine automatisch die entsprechende Degradierungspräferenz (z. B. wird bei "Text" automatisch die Auflösung beibehalten). Eine explizit festgelegte Degradationspräferenz setzt diese automatische Auswahl außer Kraft.

Sie können diesen Wert mit einer der bereitgestellten OTDegradationPreference Werte:

Nicht festgelegt

_publisher.degradationPreference = OTDegradationPreferenceNotSet;

Der Standardwert. Die Video-Engine legt die optimale Einstellung für die Qualitätsreduzierung fest.

Bildrate und Auflösung beibehalten

_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRateAndResolution;

Die Video-Engine versucht, die Bildrate konstant zu halten und die Auflösung nicht zu verringern.

Bildrate beibehalten

_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRate;

Die Video-Engine versucht, die Bildrate konstant zu halten, kann jedoch bei Bedarf die Auflösung verringern.

Auflösung beibehalten

_publisher.degradationPreference = OTDegradationPreferenceMaintainResolution;

Die Video-Engine verringert die Auflösung nicht, kann aber bei Bedarf die Bildrate reduzieren.

Ausgewogen

_publisher.degradationPreference = OTDegradationPreferenceBalanced;

Die Video-Engine versucht, bei Bedarf ein Gleichgewicht zwischen der Verringerung der Auflösung und der Bildrate herzustellen.