Medienprozessor (macOS)
Sie können vorgefertigte Transformatoren in der Vonage Media Processor-Bibliothek verwenden oder Ihre eigenen benutzerdefinierten Audio- oder oder Videotransformator erstellen, der auf veröffentlichte Videos angewendet wird.
Sie können die otc_publisher_set_video_transformers() und
otc_publisher_set_audio_transformers()
Funktionen, um Audio- und Videotransformatoren auf einen veröffentlichten Stream anzuwenden.
Das ist wichtig: Derzeit werden nur Apple Silicon Macs unterstützt. Siehe Systemanforderungen für weitere Informationen.
Das Vonage Video macOS SDK bietet zwei Möglichkeiten zur Implementierung von Transformatoren:
Mäßig - Für Videos können Sie die Videotransformatoren Hintergrundunschärfe und Hintergrundersetzung anwenden, die in der Datei Vonage-Mediathek. Siehe Anwenden eines Videotransformators aus der Vonage-Medienbibliothek. Für Audio können Sie den Audioübertrager mit Rauschunterdrückung verwenden, der in der Vonage-Mediathek. Siehe Anwenden eines Audiotransformators aus der Vonage-Medienbibliothek.
Fortgeschrittene - Sie können Ihre eigene kundenspezifische Videoübertrager und kundenspezifische Audio-Transformatoren.
Sie können auch Ihre eigenen Audio- und Videotransformatoren erstellen.
Systemanforderungen
Derzeit werden Vonage Media Library Transformers nur auf Apple Silicon Macs unterstützt.
Transformatoren erfordern eine angemessene Prozessorunterstützung. Selbst auf unterstützten Systemen sind Transformatoren möglicherweise nicht stabil, wenn Hintergrundprozesse die verfügbaren Verarbeitungsressourcen begrenzen. Die gleichen Einschränkungen können für benutzerdefinierte Medientransformatoren zusätzlich zu den Transformatoren aus der Vonage-Medienbibliothek gelten.
macOS kann die CPU-Leistung drosseln, um Energie zu sparen (z. B. um die Lebensdauer der Laptop-Batterie zu verlängern). Dies kann zu einer suboptimalen Transformatorleistung führen und unerwünschte Audio- oder Video-Artefakte verursachen. Wir empfehlen, Ihr System so einzustellen nicht in solchen Fällen den Energiesparmodus verwenden.
Viele Videotransformationen (z. B. Hintergrundunschärfe) verwenden Segmentierung, um den Sprecher vom Hintergrund zu trennen. Die besten Ergebnisse erzielen Sie, wenn Sie eine gute Beleuchtung und einen einfachen Hintergrund verwenden. Unzureichende Beleuchtung oder komplexe Hintergründe können Videoartefakte verursachen (z. B. kann der Sprecher oder ein Hut, den der Sprecher trägt, zusammen mit dem Hintergrund verschwimmen).
Sie sollten Benchmark-Tests auf so vielen unterstützten Geräten wie möglich durchführen, unabhängig von der Transformation.
Integration der Vonage-Mediathek
Aufgrund der erheblich gestiegenen Größe bei der Integration der Vonage Media Library in das SDK sind die Media Transformers ab OpenTok SDK v2.27.3 über die opt-in Vonage Media Library verfügbar. Diese Bibliothek muss explizit zum Projekt hinzugefügt werden.
Die Vonage Medienbibliothek war ursprünglich in OpenTok SDK eingebettet. Wenn Ihre OpenTok SDK-Version älter als 2.27.3 ist, wechseln Sie direkt zu Anwenden eines Videotransformators aus der Vonage-Medienbibliothek und Anwenden eines Audiotransformators aus der Vonage-Medienbibliothek.
Die Vonage-Medienbibliothek ist als Pod "VonageClientSDKVideoMacOSTransformers" verfügbar, für Verwendung mit CocoaPods.
Wenn ein Aufruf an otc_video_transformer_create() oder otc_audio_transformer_create() durchgeführt wird, ohne die Bibliothek zu laden, ist der zurückgegebene Transformator null. Sie sollten errno verwenden, eine globale Variable, die von Systemaufrufen im Falle eines Fehlers gesetzt wird, um anzuzeigen, was falsch gelaufen ist. Sie ist definiert in der <cerrno> Kopfzeile. Der Fehlercode für eine fehlende Bibliothek lautet 0x0A000006.
Anwenden eines Videotransformators aus der Vonage-Medienbibliothek
Derzeit wird nur ein Vonage Media Library Transformer unterstützt: Hintergrundunschärfe. Für diesen Transformator:
Verwenden Sie die otc_video_transformer_create() um einen Videotransformer zu erstellen, der einen benannten Transformer aus der Vonage-Medienbibliothek verwendet.
Es werden zwei Transformatoren unterstützt:
Hintergrundunschärfe.
- Setzen Sie die
typeParameter zuOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(im SDK definiert). Dies zeigt an, dass Sie einen Transformator aus der Vonage Media Library verwenden. - Setzen Sie die
nameParameter zu"BackgroundBlur". - Setzen Sie die
propertiesauf eine JSON-Zeichenkette, die die Eigenschaften des Transformators definiert. Für den Transformator "Hintergrundunschärfe" lautet das Format des JSON-Strings "{"Radius": "Keiner"}". Gültige Werte für denradiussind "Keine", "Hoch", "Niedrig" und "Benutzerdefiniert". Wenn Sie die EigenschaftradiusEigenschaft auf "Benutzerdefiniert", fügen Sie einecustom_radiusEigenschaft an die JSON Zeichenfolge: "{"radius": "Custom", "custom_radius": "value"}" (wobeicustom_radiusist eine positive ganze Zahl die den Unschärferadius definiert). - Setzen Sie die
callbackParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Videotransformatoren verwendet). - Setzen Sie die
userDataParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Videotransformatoren verwendet).
otc_video_transformer *backgroundBlur = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundBlur", "{\"radius\":\"High\"}", NULL, NULL );- Setzen Sie die
Hintergrundaustausch.
- Setzen Sie die
typeParameter zuOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(im SDK definiert). Dies zeigt an, dass Sie einen Transformator aus der Vonage Media Library verwenden. - Setzen Sie die
nameParameter zu"BackgroundReplacement". - Setzen Sie die
propertiesauf eine JSON-Zeichenkette, die Eigenschaften für den Transformator definiert. Für den Transformator zur Ersetzung des Hintergrunds lautet das Format des JSON-Strings "{"image_file_path": "path/to/image"}", wobeiimage_file_pathist der absolute Dateipfad eines lokalen Bildes, das als virtueller Hintergrund verwendet werden soll. Unterstützte Bildformate sind PNG und JPEG. - Setzen Sie die
callbackParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Videotransformatoren verwendet). - Setzen Sie die
userDataParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Videotransformatoren verwendet).
otc_video_transformer *backgroundReplacement = otc_video_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}", NULL, NULL );- Setzen Sie die
Nachdem Sie den Transformator erstellt haben, können Sie ihn auf einen Publisher anwenden, indem Sie die
otc_publisher_set_video_transformers()
Funktion:
// Array of video transformers
otc_video_transformer *video_transformers[] = {
background_blur
};
otc_publisher_set_video_transformers(publisher, video_transformers, 1);
Der letzte Parameter von otc_publisher_set_video_transformers() ist die Größe der transformers Array.
In diesem Beispiel wenden wir einen Videotransformator auf den Herausgeber an. Sie können mehrere Transformatoren anwenden
anwenden, indem Sie mehrere otc_video_transformer-Objekte zu dem transformers Array übergeben in
otc_publisher_set_video_transformers().
Anwenden eines Audiotransformators aus der Vonage-Medienbibliothek
Verwenden Sie die otc_audio_transformer_create()
um einen Audiotransformer zu erstellen, der einen benannten Transformer aus der Vonage Media Library verwendet.
Es wird ein Transformator unterstützt:
Geräuschunterdrückung.
- Setzen Sie die
typeParameter zuOTC_MEDIA_TRANSFORMER_TYPE_VONAGE(im SDK definiert). Dies zeigt an, dass Sie einen Transformator aus der Vonage Media Library verwenden. - Setzen Sie die
nameParameter zu"NoiseSuppression". - Setzen Sie die
propertiesauf eine JSON-Zeichenkette, die Eigenschaften für den Transformator definiert. Für den Rauschunterdrückungstransformator gibt es derzeit keine Eigenschaften, so dass das Format des der JSON-Zeichenfolge ist "". - Setzen Sie die
callbackParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Audiotransformatoren verwendet). - Setzen Sie die
userDataParameter zuNULL. (Dieser Parameter wird für benutzerdefinierte Audiotransformatoren verwendet).
otc_audio_transformer *noise_suppression = otc_audio_transformer_create( OTC_MEDIA_TRANSFORMER_TYPE_VONAGE, "NoiseSuppression", "{}", NULL, NULL );- Setzen Sie die
Nachdem Sie den Transformator erstellt haben, können Sie ihn auf einen Publisher anwenden, indem Sie die otc_publisher_set_audio_transformers()
Funktion:
// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
noise_suppression
};
otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);
Der letzte Parameter von otc_publisher_set_audio_transformers() ist die Größe der transformers Array.
In diesem Beispiel wenden wir einen Audiotransformator auf den Herausgeber an. Sie können mehrere Transformatoren anwenden
anwenden, indem Sie mehrere otc_audio_transformer-Objekte zu dem transformers Array übergeben in
otc_publisher_set_audio_transformers().
Erstellen eines benutzerdefinierten Videotransformators
Verwenden Sie die otc_video_transformer_create()
Funktion, um einen Videotransformator zu erstellen.
- Setzen Sie die
typeParameter zuOTC_MEDIA_TRANSFORMER_TYPE_CUSTOM(im SDK definiert). Dies zeigt an, dass Sie einen benutzerdefinierten Transformator erstellen. - Setzen Sie die
nameauf einen eindeutigen Namen für Ihren Transformator. - Setzen Sie die
propertiesParameterNULL. (Dieser Parameter wird verwendet, wenn Sie einen Transformator aus der der Vonage-Medienbibliothek.) - Setzen Sie die
callbackParameter an eine Rückruffunktion übergeben. Diese Funktion ist eine Instanz von dervideo_transform_callbackTyp, der im SDK definiert ist. Diese Funktion hat zwei Parameter:user_data-- siehe den nächsten Parameter -- undframe-- eine Instanz vom Typotc_video_frame(im SDK definiert) an die Callback-Funktion übergeben, wenn Videobilddaten vorhanden sind. Transformieren Sie die Videobilddaten in der Rückruffunktion. - Setzen Sie die
userData(optional) für die in der Callback-Funktion zu übergebenden Benutzerdaten.
Hier ist ein einfaches Beispiel:
void on_transform_black_white(void* user_data, struct otc_video_frame* frame)
{
// implement transformer on the otc_video_frame data
}
otc_video_transformer *black_white_border = otc_video_transformer_create(
OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
"blacknwhite",
NULL,
on_transform_black_white,
NULL
);
Nachdem Sie den Transformator erstellt haben, können Sie ihn auf einen Publisher anwenden, indem Sie die
otc_publisher_set_video_transformers()
Funktion:
// Array of video transformers
otc_video_transformer *video_transformers[] = {
black_white_border
};
otc_publisher_set_video_transformers(publisher, video_transformers, 1);
Erstellen eines benutzerdefinierten Audiotransformators
Verwenden Sie die otc_audio_transformer_create()
Funktion, um einen Audiotransformator zu erstellen.
- Setzen Sie die
typeParameter zuOTC_MEDIA_TRANSFORMER_TYPE_CUSTOM(im SDK definiert). Dies zeigt an, dass Sie einen benutzerdefinierten Transformator erstellen. (In dieser Version werden keine vordefinierten Audiotransformatoren aus der Vonage Medienbibliothek unterstützt). - Setzen Sie die
nameauf einen eindeutigen Namen für Ihren Transformator. - Setzen Sie die
propertiesParameterNULL. (Dieser Parameter wird verwendet, wenn Sie einen Transformator aus der der Vonage-Medienbibliothek.) - Setzen Sie die
callbackParameter an eine Rückruffunktion übergeben. Diese Funktion ist eine Instanz von deraudio_transform_callbackTyp, der im SDK definiert ist. Diese Funktion hat zwei Parameter:user_data-- siehe den nächsten Parameter -- undframe-- eine Instanz vom Typotc_audio_data(im SDK definiert) an die Callback-Funktion übergeben, wenn Audiodaten vorhanden sind. Transformieren Sie die Audiodaten in der Callback-Funktion. - Setzen Sie die
userData(optional) für die in der Callback-Funktion zu übergebenden Benutzerdaten.
Hier ist ein einfaches Beispiel:
void on_transform_audio(void* user_data, struct otc_video_frame* frame)
{
// implement transformer on the otc_audio_data audio data
}
otc_audio_transformer *lowpass_filter = otc_video_transformer_create(
OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
"lowpassFilter",
NULL,
on_transform_audio,
NULL
);
Nachdem Sie den Transformator erstellt haben, können Sie ihn auf einen Publisher anwenden, indem Sie die
otc_publisher_set_audio_transformers()
Funktion:
// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
lowpass_filter
};
otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);
Der letzte Parameter von otc_publisher_set_audio_transformers() ist die Größe der transformers Array.
In diesem Beispiel wenden wir einen Audiotransformator auf den Herausgeber an. Sie können mehrere Transformatoren anwenden
durch Hinzufügen mehrerer otc_audio_transformer Objekte zum transformers Array übergeben in
otc_publisher_set_audio_transformers().
Clearing von Videotransformatoren für einen Verlag
Um Videotransformatoren für einen Verleger zu löschen, übergeben Sie ein leeres Array an die
otc_publisher_set_video_transformers() Funktion.
otc_audio_transformer empty_array[] = {};
otc_publisher_set_video_transformers(publisher, empty_array, 0);
Verwenden Sie die
otc_video_transformer_delete()
Funktion, um eine otc_audio_transformer-Instanz zu löschen:
otc_video_transformer_delete(lowpass_filter);
Clearing von Audio-Transformatoren für einen Verlag
Um Audiotransformatoren für einen Verlag zu löschen, übergeben Sie ein leeres Array an die
otc_publisher_set_audio_transformers() Funktion.
otc_video_transformer empty_array[] = {};
otc_publisher_set_audio_transformers(publisher, empty_array, 0);
Verwenden Sie die otc_audio_transformer_delete()
Funktion, um eine otc_audio_transformer-Instanz zu löschen:
otc_audio_transformer_delete(black_white_border);
Beispiel-Applikation
Siehe diese Probe am opentok-macos-sdk-samples Repo auf GitHub.