Audio- und Videoeinstellungen anpassen – Windows
Sie können Audio- und Videoeinstellungen für veröffentlicht und abonniert Streams:
- Nur Audio oder Video veröffentlichen
- Veröffentlichung in einer reinen Sprachsitzung
- Auswahl der von einem Herausgeber verwendeten Kamera
- Spiegelung der lokalen Wiedergabe eines Videos eines Anbieters
- Wechseln der von den Herausgebern verwendeten Audioquelle
- Auflösung und Bildfrequenz für ein Video einstellen
- Verwendung eines benutzerdefinierten Video-Capturers
- Verwendung eines benutzerdefinierten Audiotreibers
- Optimierung der Audioqualität
- Reduzierung der Audiobandbreite mit Opus DTX
- Einstellen der Lautstärke für einen Teilnehmer
- Nur Audio- oder Videoabonnements
- Erkennen, ob ein Stream Audio oder Video enthält
- Einstellung der Präferenz für die Videoqualitätsreduzierung durch den Herausgeber
Nur Audio oder Video veröffentlichen
Sie können Audio und Video ein- oder ausschalten, indem Sie die PublishAudio und PublishVideo Eigenschaften des Publisher-Objekts. Der folgende Code schaltet beispielsweise den Ton aus:
publisher.PublishAudio = false;
Veröffentlichung in einer reinen Sprachsitzung
Zum Einrichten einer Reine Sprachausgabe Sitzung, legen Sie die hasVideoTrack Parameter des Publisher() Konstrukteur zu false und stelle die capturer Parameter für null wenn du jedes Publisher-Objekt instanziieren in der Sitzung. Der folgende Code erstellt zum Beispiel einen Verleger für eine reine Sprachsitzung:
mPublisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: null, hasVideo: false);
Auswahl der von einem Herausgeber verwendeten Kamera
Rufen Sie die VideoCapturer.EnumerateDevices um eine Liste von „VideoDevice“-Objekten abzurufen, die die auf dem System verfügbaren Videogeräte (in der Regel Kameras) darstellen. Anschließend können Sie eines der CreateVideoCapturer() Methoden eines `VideoDevice`-Objekts, um einen Video-Capturer zu erstellen, der das Gerät als Videoquelle nutzt. Diesen Video-Capturer können Sie dann bei der Instanziierung eines `Publisher`-Objekts verwenden:
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High);
publisher = new Publisher(Context.Instance, renderer: publisherVideo, capturer: capturer);
Die Klasse „VideoDevice“ umfasst Name und Id Eigenschaften zur Identifizierung des Videogeräts.
Spiegelung der lokalen Wiedergabe eines Videos eines Anbieters
Sie können die MirrorOnLocalRender Eigenschaft des VideoCaptureSettings-Objekts, um das lokal gerenderte Video des Herausgebers zu spiegeln (true) oder nicht (false). Setzen Sie diese Eigenschaft in der Implementierung der GetCaptureSettings() Methode des benutzerdefinierten Video-Capturers für das Publisher-Objekt. Siehe Verwendung eines benutzerdefinierten Video-Capturers.
Diese Einstellung wirkt sich nur auf das gerenderte Video in der Client-Anwendung des Herausgebers aus. Sie hat keine Auswirkungen auf das Video in abonnierten Clients.
Wechseln der von den Herausgebern verwendeten Audioquelle
Sie können die von den Verlegern verwendete Audio-Eingangsquelle (Mikrofon) ganz einfach ändern. Rufen Sie die statische Funktion AudioDevice.EnumerateInputAudioDevices() Methode, um eine Liste von AudioDevice.InputAudioDevice-Objekten zu erhalten, die die verfügbaren Eingabegeräte darstellen. Rufen Sie die AudioDevice.SetInputAudioDevice(audioInput) Methode, um das von den Verlagen verwendete Audio-Eingabegerät festzulegen.
Auflösung und Bildfrequenz für ein Video einstellen
Sie können die Auflösung und die Bildrate für den Stream eines Publishers festlegen, indem Sie die Option VideoCapturer Objekt, das Sie verwenden, wenn Sie das Publisher-Objekt instanziieren.
Anmerkung: Siehe die 1080p-Entwicklerhandbuch für Überlegungen zur Verwendung der 1080p-Auflösung.
Es gibt eine Reihe von Möglichkeiten zur Instanziierung einer VideoCapturer Objekt. Eine davon ist der Aufruf der OpenTok.VideoCapturer.EnumerateDevices() Methode, um eine Liste der verfügbaren Videogeräte zu erhalten. Verwenden Sie dann eines der CreateVideoCapturer() Methoden des Geräts, das Sie zur Instanziierung einer VideoCapturer Objekt. Der folgende Code erstellt beispielsweise einen Publisher, der den Standard-Systemvideo-Capturer mit einer Auflösung von 720p verwendet (VideoCapturer.Resolution.High) und die Bildrate auf 30 Bilder pro Sekunde eingestellt:
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);
Wenn das ausgewählte Videogerät die gewählte Auflösung oder Bildrate nicht unterstützt, verwendet der Video-Capturer die nächstmöglichen Einstellungen.
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.
Verwendung eines benutzerdefinierten Video-Capturers
Verwenden Sie `VideoCapturer.EnumerateDevices()`, um eine Liste der verfügbaren Videogeräte (Kameras) abzurufen. Verwenden Sie eine der CreateVideoCapturer() Methoden der Klasse „VideoDevice“, um ein „VideoCapturer“-Objekt auf Basis des Videogeräts zu instanziieren.
Das OpenTok Windows SDK enthält eine IVideoCapturer-Schnittstelle, mit der Sie einen benutzerdefinierten Video-Capturer definieren können. Erstellen Sie benutzerdefinierte Klassen, die die IVideoCapturer-Schnittstelle implementieren, um einen benutzerdefinierten Video-Capturer zu erstellen. Übergeben Sie eine Instanz der benutzerdefinierten Video-Capturer-Klasse an die Publisher()das Publisher-Objekt instanziieren.
Das OpenTok Windows SDK ruft die Start(IVideoFrameConsumer frameConsumer) Methode des Video-Capturer-Objekts, um die Videoaufnahme über den benutzerdefinierten Video-Capturer zu starten. Das SDK enthält eine IVideoFrameConsumer-Schnittstelle, die den Video-Frame-Consumer für einen benutzerdefinierten Capturer definiert.
Das OpenTok Windows SDK ruft die Consume(VideoFrame frame) Methode des benutzerdefinierten Videoframe-Consumer-Objekts, wenn ein neues Videoframe gerendert werden soll. Die im OpenTok Windows SDK definierte VideoFrame-Klasse stellt das Videoframe dar.
Sie können einen benutzerdefinierten Video-Capturer verwenden, um einen Bildschirmfreigabe-Stream zu veröffentlichen. Weitere Informationen sowie ein Code-Beispiel finden Sie unter Bildschirmfreigabe.
Sie können auch ein benutzerdefinierter Videorenderer für Videos.
Verwendung eines benutzerdefinierten Audiotreibers
Standardmäßig verwendet das OpenTok Windows SDK das Mikrofon des Geräts, um Audiodaten für die Übertragung an einen veröffentlichten Stream aufzunehmen. Außerdem nutzt es die Lautsprecher (oder Kopfhörer), um Audiodaten aus einem abonnierten Stream wiederzugeben. Sie können einen benutzerdefinierten Audiotreiber implementieren, um Audiodaten für Abonnenten und Publisher zu lesen und zu schreiben. Erstellen Sie eine Implementierung der IAudioDevice Schnittstelle und ihre Methoden. Die IAudioDevice.InitAudio(AudioDevice.AudioBus audioBus) Die Methode wird bei der Initialisierung des AudioDevice aufgerufen. Verwenden Sie die AudioBus Objekt, das an diese Methode übergeben wird, um Audiodaten zu lesen und zu schreiben, mit dessen ReadRenderData(buffer, numberOfSamples) und WriteCaptureData(buffer, numberOfSamples) Methoden.
Außerdem können Sie die IAudioDeviceExtension Schnittstelle. Wenn ein CustomAudioDevice, das diese Schnittstelle implementiert, über AudioDevice.SetCustomAudioDevice(), umfasst die Implementierung zusätzliche Methoden (zum Aufzählen von Geräten, zum Auswählen eines bestimmten Geräts oder zum Abonnieren von Benachrichtigungen), die intern mit der benutzerdefinierten Audio-Geräte-Implementierung statt mit der statischen Standardimplementierung verknüpft werden.
Die im SDK enthaltene Klasse „MMAudioDevice“ implementiert diese Schnittstelle unter Verwendung der Windows-Schnittstelle „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);
Optimierung der Audioqualität
Die Herausgeber.Builder Klasse enthält Eigenschaften zur Einstellung der Audioqualität. Damit können Sie Streams mit hoher (oder niedriger) Audioqualität veröffentlichen:
AudioBitrate (Numbers) - 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 aktivieren (oder um die Bandbreitennutzung mit Audio geringerer Qualität zu reduzieren).
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)
Wenn Sie diese Option nicht festlegen, legt OpenTok die Audio-Bitrate für den Stream automatisch fest.
AutoGainControl (Boolean) - Ob die automatische Verstärkungsregelung für das veröffentlichte Audio aktiviert werden soll. Sie sollten diese Option auf false bei der Veröffentlichung von hochwertigem Audio (durch Einstellen der AutoGainControl Eigenschaft der Publisher.Builder). Der Standardwert ist true. Diese Einstellung wird ignoriert, wenn Sie DisableAudioProcessing zu true (wodurch die Echokompensation, die automatische Verstärkungsregelung und die Rauschunterdrückung für den veröffentlichten Stream deaktiviert werden).
DisableAudioProcessing (Boolean) - Ob die Echounterdrückung, die automatische Verstärkungsregelung und die Rauschunterdrückung für die veröffentlichten Audiodaten deaktiviert werden sollen. Sie sollten diese Option auf true bei der Veröffentlichung von hochwertigem Audio (durch Einstellen der DisableAudioProcessing Eigenschaft der Publisher.Builder). Der Standardwert ist false.
Echounterdrückung (Boolean) - Ob die Echounterdrückung für das veröffentlichte Audio aktiviert werden soll. Sie sollten diese Option auf false bei der Veröffentlichung von hochwertigem Audio (durch Einstellen der EchoCancellation Eigenschaft der Publisher.Builder). Der Standardwert ist true. Diese Einstellung wird ignoriert, wenn Sie DisableAudioProcessing zu true (wodurch die Echokompensation, die automatische Verstärkungsregelung und die Rauschunterdrückung für den veröffentlichten Stream deaktiviert werden).
Stereo (Boolean) - Ob Stereo-Audio veröffentlicht werden soll. Der Standardwert ist false.
Geräuschunterdrückung (Boolean) - Ob die Rauschunterdrückung für das veröffentlichte Audio aktiviert werden soll. Sie sollten diese Option auf false bei der Veröffentlichung von hochwertigem Audio (durch Einstellen der NoiseSuppression Eigenschaft der Publisher.Builder). Der Standardwert ist true. Diese Einstellung wird ignoriert, wenn Sie DisableAudioProcessing zu true (wodurch die Echokompensation, die automatische Verstärkungsregelung und die Rauschunterdrückung für den veröffentlichten Stream deaktiviert werden).
Reduzierung der Audiobandbreite mit Opus DTX
Opus DTX (Diskontinuierliche Übertragung) ist ein Audiocodec, der die Bandbreitennutzung reduzieren kann, wenn ein Teilnehmer nicht spricht. Dies kann in großen Sitzungen mit vielen Audioteilnehmern nützlich sein.
Sie aktivieren Opus DTX durch Setzen des Parameters OpusDtx Eigenschaft der Publisher.Builder Objekt, das Sie verwenden, wenn Einen Verlag anlegen) bis true.
Weitere Informationen finden Sie hier Vonage Video API Wissensbasisartikel.
Einstellen der Lautstärke für einen Teilnehmer
Sie können die Lautstärke für jeden Teilnehmer individuell einstellen, indem Sie die Funktion Subscriber.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.
Sie können den Ton ein- oder ausschalten, indem Sie die SubscribeToAudio Eigenschaft des Subscriber-Objekts:
subscriber.SubscribeToAudio = false; // audio off
subscriber.SubscribeToAudio = true; // audio on
Sie können das Video ein- oder ausschalten, indem Sie die SubscribeToVideo Eigenschaft des Subscriber-Objekts:
subscriber.SubscribeToVideo = false; // video off
subscriber.SubscribeToVideo = true; // video on
Beachten Sie jedoch, dass Sie Audio- oder Videostreams nur abonnieren können, wenn der Client, der den Stream veröffentlicht, Audio- oder Videodaten enthält. Beispielsweise führt die Einstellung SubscribeToVideo zu true hat keine Auswirkung, wenn der Client, der den Stream veröffentlicht, nur Audio veröffentlicht.
Erkennen, ob ein Stream Audio oder Video enthält
Sie können die HasAudio und HasVideo Eigenschaften eines Stream-Objekts, um festzustellen, ob es Audio- oder Videodaten enthält
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 DegradationPreference Werte:
Nicht festgelegt
publisher.DegradationPreference = DegradationPreference.NotSet;
Der Standardwert. Die Video-Engine legt die optimale Einstellung für die Qualitätsreduzierung fest.
Bildrate und Auflösung beibehalten
publisher.DegradationPreference = DegradationPreference.MaintainFrameRateAndResolution;
Die Video-Engine versucht, die Bildrate konstant zu halten und die Auflösung nicht zu verringern.
Bildrate beibehalten
publisher.DegradationPreference = DegradationPreference.MaintainFrameRate;
Die Video-Engine versucht, die Bildrate konstant zu halten, kann jedoch bei Bedarf die Auflösung verringern.
Auflösung beibehalten
publisher.DegradationPreference = DegradationPreference.MaintainResolution;
Die Video-Engine verringert die Auflösung nicht, kann aber bei Bedarf die Bildrate reduzieren.
Ausgewogen
publisher.DegradationPreference = DegradationPreference.Balanced;
Die Video-Engine versucht, bei Bedarf ein Gleichgewicht zwischen der Verringerung der Auflösung und der Bildrate herzustellen.