Processeur média (Android)

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() des méthodes permettant d'appliquer des transformateurs audio et vidéo à un flux.

Important : Les transformations de média ne sont pas prises en charge sur tous les appareils. Voir exigences du client. Le filtre de flou d'arrière-plan de la médiathèque de Vonage est disponible en version bêta.

Le SDK Android de Vonage Video comprend deux façons d'implémenter les transformateurs :

Exigences du client

Les transformateurs de la médiathèque de Vonage sont pris en charge par le niveau API Android 24 ou supérieur, sur les appareils suivants :

  • 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.

iOS peut limiter les performances du processeur pour économiser de l'énergie (par exemple, pour prolonger la durée de vie de la batterie). Cela peut entraîner des performances sous-optimales du transformateur et introduire des artefacts audio ou vidéo indésirables. Nous recommandons de désactiver le mode basse consommation dans de tels cas.

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.33.0'

Si un appel à PublisherKit.VideoTransformer(String name, String properties) ou PublisherKit.AudioTransformer(String name, String properties) est effectué sans charger la bibliothèque, le transformateur retourné sera nul. 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

Remarque : La prise en charge des transformateurs de la médiathèque de Vonage est une fonction bêta.

Utiliser le PublisherKit.VideoTransformer(String name, String properties) pour créer un transformateur vidéo qui utilise un transformateur nommé de la médiathèque de Vonage.

Actuellement, un seul transformateur est pris en charge : le flou d'arrière-plan. Définir le transformateur name au paramètre "BackgroundBlur". Régler le properties à 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 propriété -- radius -- qui peut être réglée à "High", "Low"ou "None".

ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
PublisherKit.VideoTransformer backgroundBlur = new PublisherKit.VideoTransformer(
    "BackgroundBlur",
    "{\"radius\":\"High\"}"
);
videoTransformers.add(backgroundBlur);
mPublisher.setVideoTransformers(videoTransformers);

Application d'un transformateur audio à partir de la médiathèque de Vonage

Utiliser le PublisherKit.AudioTransformer(String name, String properties) 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 name au paramètre "NoiseSuppression". Régler le properties à 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. Définissez-le à une chaîne JSON vide "{}".

    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);
    

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 :

MyCustomTransformer transformer = new MyCustomTransformer();
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(transformer);
mPublisher.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);
        }
    }
}

Passez ensuite l'objet qui implémente l'interface PublisherKit.CustomAudioRransformer dans l'objet PublisherKit.setAudioTransformers() méthode :

MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(transformer);
mPublisher.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);

Exemple d'application

Voir cet exemple basé sur Java et cet exemple basé sur Kotlin.