Utilisation de la bibliothèque Vonage Media Processor et application de transformations multimédia
Vous pouvez utiliser des transformateurs préconstruits dans la bibliothèque du processeur média de Vonage ou créer votre propre transformateur audio ou vidéo personnalisé à appliquer à la vidéo publiée.
Vous pouvez utiliser le PublisherKit.setAudioTransformers() et PublisherKit.setVideoTransformers() méthodes permettant d'appliquer des transformateurs audio et vidéo à un flux.
Important :
Les transformations multimédias ne sont pas prises en charge sur tous les appareils. Voir Exigences du client.
Le SDK Android de Vonage Video comprend deux façons d'implémenter les transformateurs :
-
Modéré - Pour la vidéo, vous pouvez appliquer les transformateurs vidéo de flou d'arrière-plan et de remplacement d'arrière-plan inclus dans le module Médiathèque de Vonage. Voir Application d'un transformateur vidéo à partir de la médiathèque de Vonage. Pour l'audio, vous pouvez appliquer le transformateur audio de suppression du bruit inclus dans le logiciel Médiathèque de Vonage. Voir Application d'un transformateur audio à partir de la médiathèque de Vonage.
-
Avancé - Vous pouvez créer votre propre transformateurs vidéo personnalisés et transformateurs audio sur mesure.
Exigences du client
Les transformateurs de la bibliothèque multimédia Vonage sont pris en charge sur les appareils Android dont le niveau d'API est égal ou supérieur à 23, à savoir :
- Samsung Galaxy S8 et supérieur
- Google Pixel 5 et supérieur
- OPPO A94 et supérieur
- Téléphones Android utilisant Qualcomm Snapdragon 835 et plus
- Téléphones Android utilisant Qualcomm Snapdragon 765G et plus
Tester sur d'autres appareils pour vérifier la prise en charge.
Les transformateurs nécessitent un processeur adéquat. Même sur les appareils pris en charge, les transformateurs peuvent ne pas être stables lorsque les processus d'arrière-plan limitent les ressources de traitement disponibles. Les mêmes limitations peuvent s'appliquer aux transformateurs de médias personnalisés en plus des transformateurs de la médiathèque de Vonage.
Android peut limiter les performances du processeur afin d'économiser de l'énergie (par exemple, pour prolonger l'autonomie de la batterie). Cela peut entraîner des performances sous-optimales du transformateur et générer des artefacts audio ou vidéo indésirables. Dans ce cas, nous vous recommandons de désactiver le mode économie d'énergie ou le mode faible consommation, si cette option est disponible.
De nombreuses transformations vidéo (telles que le flou d'arrière-plan) utilisent la segmentation pour séparer le locuteur de l'arrière-plan. Pour obtenir les meilleurs résultats, utilisez un éclairage adéquat et un arrière-plan simple. Un éclairage insuffisant ou des arrière-plans complexes peuvent provoquer des artefacts vidéo (par exemple, l'orateur ou un chapeau qu'il porte peuvent être flous en même temps que l'arrière-plan).
Vous devez effectuer des tests de référence sur le plus grand nombre possible d'appareils pris en charge, quelle que soit la transformation.
Intégration de la médiathèque de Vonage
En raison de l'augmentation significative de la taille lors de l'intégration de la bibliothèque multimédia de Vonage dans le SDK, à partir de OpenTok SDK v2.27.2, les transformateurs multimédia sont disponibles via la bibliothèque multimédia de Vonage (opt-in). Cette bibliothèque doit être explicitement ajoutée au projet.
La médiathèque de Vonage était initialement intégrée à OpenTok SDK. Si votre version d'OpenTok SDK est antérieure à la version 2.27.2, passez directement à la section Application d'un transformateur vidéo à partir de la médiathèque de Vonage et Application d'un transformateur audio à partir de la médiathèque de Vonage.
Une version Maven est disponible à l'adresse suivante https://central.sonatype.com/artifact/com.vonage/client-sdk-video-transformers.
L'identifiant de l'artefact est "client-sdk-video-transformers".
Modifiez le fichier build.gradle de l'application et ajoutez l'extrait de code suivant au fichier
dependencies section :
implementation 'com.vonage:client-sdk-video-transformers:2.35.1'
Si l'on appelle PublisherKit.VideoTransformer(String name, String properties) ou PublisherKit.AudioTransformer(String name, String properties) sans avoir chargé la bibliothèque, le transformateur renvoyé sera null. Une exception sera levée avec le code d'erreur suivant : 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.
Application d'un transformateur vidéo à partir de la médiathèque de Vonage
Utiliser le PublisherKit.VideoTransformer(String nom, String propriétés) pour créer un transformateur vidéo qui utilise un transformateur nommé de la médiathèque de Vonage.
Deux transformateurs sont pris en charge :
-
Flou d'arrière-plan. Pour ce filtre, le paramètre
nameau paramètre"BackgroundBlur". Régler lepropertiesparamètre sous la forme d'une chaîne JSON définissant les propriétés du transformateur. Pour le transformateur de flou d'arrière-plan, ce JSON comprend une seule propriété : --radius-- qui peut être réglée à"High","Low","None"ou"Custom. Si vous configurez leradiusà "Custom", ajoutez uncustom_radiuspropriété à la chaîne JSON :"{\"radius\":\"Custom\",\"custom_radius\":\"value\"}"(oùcustom_radiusest un nombre entier positif définissant le rayon de flou).CopiePublisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>(); PublisherKit.VideoTransformer backgroundBlur = publisher.new VideoTransformer( "BackgroundBlur", "{\"radius\":\"High\"}" ); videoTransformers.add(backgroundBlur); publisher.setVideoTransformers(videoTransformers); -
Remplacement des antécédents. Pour ce filtre, le paramètre
nameau paramètre"BackgroundReplacement". Et définissez unpropertiesparamètre en une chaîne JSON. Le format du JSON est le suivant :"{\"image_file_path\":\"path/to/image\"}"oùimage_file_pathest le chemin d'accès absolu à une image locale à utiliser comme arrière-plan virtuel. Les formats d'image pris en charge sont PNG et JPEG.CopiePublisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>(); PublisherKit.VideoTransformer backgroundReplacement = publisher.new VideoTransformer( "BackgroundReplacement", "{\"image_file_path\":\"path-to-image-file\"}" ); videoTransformers.add(backgroundReplacement); publisher.setVideoTransformers(videoTransformers);
Application d'un transformateur audio à partir de la médiathèque de Vonage
Utiliser le PublisherKit.AudioTransformer(String nom, String propriétés) pour créer un transformateur audio qui utilise un transformateur nommé de la médiathèque de Vonage.
Un transformateur est pris en charge :
-
Suppression du bruit. Pour ce filtre, le paramètre
nameau paramètre"NoiseSuppression". Régler lepropertiesà une chaîne JSON définissant les propriétés du transformateur. Pour le transformateur de suppression de bruit, ce JSON ne contient aucune propriété pour le moment. Donnez-lui la valeur d'une chaîne vide"".CopiePublisher 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);
Création d'un transformateur vidéo personnalisé
Créez une classe qui met en œuvre la méthode PublisherKit.CustomVideoTransformer
l'interface. Mettre en œuvre l'interface PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) méthode. La méthode PublisherKit.CustomVideoTransformer.onTransform(BaseVideoRenderer.Frame frame) est déclenchée pour chaque image vidéo.
Dans la mise en œuvre de la méthode, il convient d'appliquer une transformation à l'élément frame transmis à la méthode :
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());
}
}
Passez ensuite l'objet qui implémente l'interface PublisherKit.CustomVideoTransformer dans la fonction PublisherKit.setVideoTransformers() méthode :
Publisher publisher = new Publisher.Builder(MainActivity.this).build();
MyCustomTransformer transformer = new MyCustomTransformer();
PublisherKit.VideoTransformer myCustomTransformer = publisher.new VideoTransformer("myTransformer", transformer);
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(myCustomTransformer);
publisher.setVideoTransformers(videoTransformers);
Vous pouvez combiner le transformateur de la bibliothèque Vonage Media (voir la section précédente) avec des transformateurs personnalisés ou appliquer plusieurs transformateurs personnalisés en ajoutant plusieurs objets PublisherKit.VideoTransformer à la liste de tableaux transmise.
ou appliquer plusieurs transformateurs personnalisés en ajoutant plusieurs objets PublisherKit.VideoTransformer à la liste ArrayList passée
à la liste de tableaux transmise à la fonction PublisherKit.setVideoTransformers() méthode.
en ajoutant plusieurs objets OTPublisherKit.VideoTransformer au tableau utilisé
pour le OTPublisherKit.videoTransformers propriété.
Création d'un transformateur audio personnalisé
Créez une classe qui met en œuvre la méthode PublisherKit.CustomAudioTransformer
l'interface. Mettre en œuvre l'interface PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) méthode.
La méthode PublisherKit.CustomAudioTransformer.onTransform(AudioData audioData) est déclenchée pour chaque image audio.
Dans la mise en œuvre de la méthode, il faut appliquer une transformation à l'élément frame transmis à la méthode.
L'exemple suivant applique un simple limiteur d'amplitude à l'audio :
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);
}
}
}
Ensuite, transmettez l'objet qui implémente l'interface PublisherKit.CustomAudioTransformer à la méthode PublisherKit.setAudioTransformers() méthode :
Publisher publisher = new Publisher.Builder(MainActivity.this).build();
MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
PublisherKit.AudioTransformer myCustomTransformer = publisher.new AudioTransformer("myTransformer", transformer);
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(myCustomTransformer);
publisher.setAudioTransformers(audioTransformers);
Vous pouvez appliquer plusieurs transformateurs personnalisés en ajoutant plusieurs objets PublisherKit.AudioTransformer à l'ArrayList
transmise à la fonction PublisherKit.setAudioTransformers() méthode.
Nettoyage des transformateurs vidéo pour un éditeur
Pour effacer les transformateurs vidéo d'un éditeur, il suffit d'introduire une liste vide (ArrayList) dans le système.
vide dans la liste PublisherKit.setVideoTransformers() méthode.
videoTransformers.clear();
mPublisher.setVideoTransformers(videoTransformers);
Nettoyage de transformateurs audio pour un éditeur
Pour effacer les transformateurs audio d'un éditeur, passez un ArrayList vide
vide dans la liste PublisherKit.setAudioTransformers() méthode.
audioTransformers.clear();
mPublisher.setAudioTransformers(videoTransformers);
Exemples d'applications
Voir cet exemple basé sur Java et cet exemple basé sur Kotlin dans le dépôt « opentok-android-sdk-samples » sur GitHub.