Medienprozessor (Android)
Sie können vorgefertigte Transformatoren aus der Vonage Media Processor-Bibliothek verwenden oder einen eigenen Audio- oder Videotransformator erstellen, der auf veröffentlichte Videos angewendet werden kann.
Sie können die PublisherKit.setAudioTransformers() und PublisherKit.setVideoTransformers() Methoden zur Anwendung von Audio- und Videotransformatoren auf einen Stream.
Das ist wichtig: Medienumwandlungen werden nicht auf allen Geräten unterstützt. Siehe Kundenanforderungen. Der Filter "Hintergrundunschärfe" der Vonage-Mediathek ist als Beta-Funktion verfügbar.
Das Vonage Video Android 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.
Anforderungen des Kunden
Die Transformatoren aus der Vonage-Medienbibliothek werden auf Android API Level 24 oder höher auf den folgenden Geräten unterstützt:
- Samsung Galaxy S8 und höher
- Google Pixel 5 und höher
- OPPO A94 und höher
- Android-Handys mit Qualcomm Snapdragon 835 und höher
- Android-Handys mit Qualcomm Snapdragon 765G und höher
Testen Sie auf anderen Geräten, um die Unterstützung zu prüfen.
Transformatoren erfordern eine angemessene Prozessorunterstützung. Selbst auf unterstützten Geräten 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.
iOS kann die CPU-Leistung drosseln, um Energie zu sparen (z. B. um die Lebensdauer der Batterie zu verlängern). Dies kann zu einer suboptimalen Transformatorleistung führen und unerwünschte Audio- oder Videoartefakte verursachen. Wir empfehlen, den Energiesparmodus in solchen Fällen zu deaktivieren.
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.2 ü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.2 ist, wechseln Sie direkt zu Anwenden eines Videotransformators aus der Vonage-Medienbibliothek und Anwenden eines Audiotransformators aus der Vonage-Medienbibliothek.
Eine Maven-Version ist verfügbar unter https://central.sonatype.com/artifact/com.vonage/client-sdk-video-transformers.
Die Artefakt-ID lautet "client-sdk-video-transformers".
Ändern Sie die Datei build.gradle der Anwendung und fügen Sie den folgenden Codeschnipsel in die Datei
dependencies Abschnitt:
implementation 'com.vonage:client-sdk-video-transformers:2.32.1'
Wenn ein Aufruf an PublisherKit.VideoTransformer(String name, String properties) oder PublisherKit.AudioTransformer(String name, String properties) durchgeführt wird, ohne die Bibliothek zu laden, ist der zurückgegebene Transformator null. Es wird eine Ausnahme mit dem folgenden Fehlercode ausgelöst 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.
Anwenden eines Videotransformators aus der Vonage-Medienbibliothek
Anmerkung: Die Unterstützung für Vonage Media Library Transformers ist eine Beta-Funktion.
Verwenden Sie die PublisherKit.VideoTransformer(String name, String properties)
Konstruktor, um einen Videotransformer zu erstellen, der einen benannten Transformer aus der Vonage-Medienbibliothek verwendet.
Derzeit wird nur ein Transformator unterstützt: Hintergrundunschärfe. Setzen Sie die name Parameter zu "BackgroundBlur".
Setzen Sie die properties auf eine JSON-Zeichenkette, die Eigenschaften für den Transformator definiert.
Für den Transformator "Hintergrundunschärfe" enthält dieses JSON eine Eigenschaft -- radius -- die eingestellt werden können
auf "High", "Low", oder "None".
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
PublisherKit.VideoTransformer backgroundBlur = new PublisherKit.VideoTransformer(
"BackgroundBlur",
"{\"radius\":\"High\"}"
);
videoTransformers.add(backgroundBlur);
mPublisher.setVideoTransformers(videoTransformers);
Anwenden eines Audiotransformators aus der Vonage-Medienbibliothek
Verwenden Sie die PublisherKit.AudioTransformer(String name, String properties)
Konstruktor, um einen Audiotransformer zu erstellen, der einen benannten Transformer aus der Vonage Media Library verwendet.
Es wird ein Transformator unterstützt:
Geräuschunterdrückung. Für diesen Filter setzen Sie den
nameParameter zu"NoiseSuppression". Setzen Sie diepropertiesauf eine JSON-Zeichenkette, die Eigenschaften für den Transformator definiert. Für den Rauschunterdrückungstransformator enthält diese JSON-Zeichenkette derzeit keine Eigenschaften. Setzen Sie ihn auf eine leere JSON-Zeichenkette"{}".Publisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.AudioTransformer> audioTransformers = new ArrayList<>(); PublisherKit.AudioTransformer noiseSuppression = publisher.new AudioTransformer( "NoiseSuppression", "" ); audioTransformers.add(noiseSuppression); publisher.setAudioTransformers(audioTransformers);
Erstellen eines benutzerdefinierten Videotransformators
Erstellen Sie eine Klasse, die die PublisherKit.CustomVideoTransformer
Schnittstelle. Implementieren Sie die PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) Methode. Die Website PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) Methode wird für jedes Videobild ausgelöst.
Wenden Sie bei der Implementierung der Methode eine Transformation auf die frame Objekt, das an die Methode übergeben wird:
public class MyCustomTransformer implements PublisherKit.CustomVideoTransformer {
@Override
public void onTransform(BaseVideoRenderer.Frame frame) {
// Replace this with code to transform the frame:
frame.convertInPlace(frame.getYplane(), frame.getVplane(), frame.getUplane(), frame.getYstride(), frame.getUvStride());
}
}
Dann übergeben Sie das Objekt, das die Schnittstelle PublisherKit.CustomVideoTransformer implementiert, an die PublisherKit.setVideoTransformers() Methode:
MyCustomTransformer transformer = new MyCustomTransformer();
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(transformer);
mPublisher.setVideoTransformers(videoTransformers);
Sie können den Transformer der Vonage Medienbibliothek (siehe vorheriger Abschnitt) mit benutzerdefinierten Transformern kombinieren oder mehrere benutzerdefinierte Transformer anwenden
mehrere benutzerdefinierte Transformatoren anwenden, indem Sie mehrere PublisherKit.VideoTransformer Objekte zu der ArrayList hinzufügen, die
in die PublisherKit.setVideoTransformers() Methode.
Hinzufügen mehrerer OTPublisherKit.VideoTransformer-Objekte zu dem Array, das
für die OTPublisherKit.videoTransformers Eigentum.
Erstellen eines benutzerdefinierten Audiotransformators
Erstellen Sie eine Klasse, die die PublisherKit.CustomAudioTransformer
Schnittstelle. Implementieren Sie die PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) Methode.
Die Website PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) Methode wird für jeden Audio-Frame ausgelöst.
Wenden Sie bei der Implementierung der Methode eine Transformation auf den frame Objekt, das an die Methode übergeben wird.
Das folgende Beispiel wendet einen einfachen Amplitudenbegrenzer auf das Audiomaterial an:
public class MyCustomAudioTransformer implements PublisherKit.CustomAudioTransformer {
private short CROP_LIMIT = (short)(32767 * 0.05);
@Override
public void onTransform(AudioData audioData) {
int samplesPerChannel = (int)audioData.getNumberOfSamples() * (int)audioData.getNumberOfChannels();
ShortBuffer samples = audioData.getSampleBuffer().asShortBuffer();
for (int s = 0; s < samplesPerChannel; ++s) {
short sample = samples.get(s);
if (sample > CROP_LIMIT)
samples.put(s, CROP_LIMIT);
else if (sample < -CROP_LIMIT)
samples.put(s, (short)-CROP_LIMIT);
}
}
}
Dann übergeben Sie das Objekt, das die Schnittstelle PublisherKit.CustomAudioRransformer implementiert, an die PublisherKit.setAudioTransformers() Methode:
MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(transformer);
mPublisher.setAudioTransformers(audioTransformers);
Sie können mehrere benutzerdefinierte Transformatoren anwenden, indem Sie mehrere PublisherKit.AudioTransformer-Objekte zu der ArrayList
hinzufügen, die an die PublisherKit.setAudioTransformers() Methode.
Clearing von Videotransformatoren für einen Verlag
Um Videoumwandler für einen Verleger zu löschen, übergeben Sie eine leere ArrayList
an die PublisherKit.setVideoTransformers() Methode.
videoTransformers.clear();
mPublisher.setVideoTransformers(videoTransformers);
Clearing von Audio-Transformatoren für einen Verlag
Um Audiotransformatoren für einen Verlag zu löschen, übergeben Sie eine leere ArrayList
in die PublisherKit.setAudioTransformers() Methode.
audioTransformers.clear();
mPublisher.setAudioTransformers(videoTransformers);
Beispiel-Applikation
Siehe dieses Java-basierte Beispiel und dieses Kotlin-basierte Beispiel am opentok-android-sdk-samples Repo auf GitHub.