Processeur de médias (Windows)

Vous pouvez utiliser des transformateurs préconstruits dans la bibliothèque du processeur multimédia de Vonage ou créer votre propre transformateur audio ou vidéo personnalisé pour l'appliquer à la vidéo publiée. ou vidéo personnalisé à appliquer à la vidéo publiée.

Vous pouvez utiliser le Publisher.AudioTransformers et Publisher.VideoTransformers pour appliquer des transformateurs audio et vidéo à un flux.

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

Exigences du système

Les GPU NVIDIA sont recommandés pour une performance optimale lors de l'utilisation des transformateurs de la médiathèque de Vonage.

Tester sur d'autres configurations 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.

Windows peut limiter les performances de l'unité centrale 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 configurer votre système d'exploitation pour qu'il utilise le meilleur mode de performance (ou pour qu'il n'utilise pas 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.

Un paquet nuget est disponible sous le nom "Vonage.Client.Video.Transformers". Installez-le dans votre projet.

Si un appel à VideoTransformer(string name, string properties) ou 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

Utiliser le VideoTransformer(string name, string properties) 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 name au paramètre "BackgroundBlur". Et fixer un properties à une chaîne JSON. Le format JSON est "{"radius" : "None"}". Les valeurs valides pour le paramètre radius sont "None", "High" et "Low". Si vous définissez la propriété radius à "Custom", ajoutez un custom_radius à la propriété JSON chaîne de caractères : "{"radius" : "Custom", "custom_radius" : "value"}" (où custom_radius est un nombre entier positif définissant le rayon du flou).

    VideoTransformer backgroundBlur = new VideoTransformer("BackgroundBlur", "{\"radius\":\"High\"}");
    List<VideoTransformer> transformers = new ArrayList<VideoTransformer> 
    {
      backgroundBlur
    };
    publisher.VideoTransformers = transformers;
    
  • Remplacement des antécédents. Pour ce filtre, le paramètre name au paramètre "BackgroundReplacement". Et fixer un properties à une chaîne JSON. Le format JSON est "{"chemin_du_fichier_image" : "chemin/vers/image"}", où image_file_path est 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.

    VideoTransformer backgroundReplacement = new VideoTransformer("BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}");
    List<VideoTransformer> transformers = new ArrayList<VideoTransformer> 
    {
      backgroundReplacement
    };
    publisher.VideoTransformers = transformers;
    

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

Utiliser le 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. Donnez-lui la valeur d'une chaîne vide "".

    AudioTransformer noiseSuppression = new AudioTransformer("NoiseSuppression", "");
    List<AudioTransformer> transformers = new ArrayList<AudioTransformer> 
    {
      noiseSuppression
    };
    publisher.AudioTransformers = transformers;
    

Création d'un transformateur vidéo personnalisé

Créez une classe qui met en œuvre la méthodeICustomVideoTransformer l'interface. Mettre en œuvre l'interface ICustomVideoTransformer.Transform() en appliquant une transformation à la VideoFrame transmis à la méthode. L'objet ICustomVideoTransformer.Transform est déclenchée pour chaque image vidéo :

public class MyCustomTransformer : IVideoTransformer
{
    public void Transform(VideoFrame frame)
    {
        // transformer implementation
        PixelFormat pixelFormat = frame.PixelFormat;
        int numberOfPlanes = frame.NumberOfPlanes;

        //invert U and V planes
        IntPtr[] planes = new IntPtr[] { frame.GetPlane(0), frame.GetPlane(2), frame.GetPlane(1) };
        int[] strides = new int[] { frame.GetPlaneStride(0), frame.GetPlaneStride(2), frame.GetPlaneStride(1) };

        frame.ConvertInPlace(pixelFormat, planes, strides);
    }
}

Réglez ensuite le PublisherKit.VideoTransformers à un tableau qui inclut l'objet qui implémente l'interface OTCustomVideoTransformer :

MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer> 
{
  myCustomTransformer
};
publisher.VideoTransformers = transformers;

Vous pouvez combiner le transformateur de la médiathèque de Vonage (voir la section précédente) avec des transformateurs personnalisés ou appliquer des transformateurs personnalisés multiples en ajoutant plusieurs objets VideoTransformer à la liste de tableaux utilisée. plusieurs transformateurs personnalisés en ajoutant plusieurs objets VideoTransformer à la liste ArrayList utilisée pour le PublisherKit.VideoTransformers propriété.

Création d'un transformateur audio personnalisé

Créez une classe qui met en œuvre la méthode ICustomAudioTransformer l'interface. Mettre en œuvre l'interface ICustomAudioTransformer.Transform() en appliquant une transformation à la AudioData transmis à la méthode. L'objet CustomAudioTransformer.Transform() est déclenchée pour chaque trame audio. est déclenchée pour chaque trame audio. L'exemple suivant applique un simple limiteur d'amplitude sur l'audio :

public class MyCustomTransformer : IAudioTransformer
{
    private const short CROP_LIMIT = (short)(short.MaxValue * 0.5);

    public unsafe void Transform(AudioData frame)
    {
        // transformer implementation
        short* data = (short*)frame.SampleBuffer;
        int samplesXChannels = (int)frame.NumberOfSamples * (int)frame.NumberOfChannels;
        for (int s = 0; s < samplesXChannels; ++s)
        {
            if (data[s] > CROP_LIMIT)
                data[s] = CROP_LIMIT;
            else if (data[s] < -CROP_LIMIT)
                data[s] = -CROP_LIMIT;
        }
    }
}

Réglez ensuite le OTPublisherKit.AudioTransformers à un tableau qui inclut l'objet qui implémente l'interface CustomAudioTransformer :

MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer> 
{
  myCustomTransformer
};
publisher.AudioTransformers = transformers;

Vous pouvez appliquer plusieurs transformateurs personnalisés en ajoutant plusieurs objets OTPublisherKit.AudioTransformer à l'ArrayList utilisée pour le OTPublisherKit.AudioTransformers propriété.

Nettoyage des transformateurs vidéo pour un éditeur

Pour supprimer les transformateurs vidéo d'un éditeur, définissez le paramètre Publisher.VideoTransformers à un tableau vide.

publisher.VideoTransformers =  new ArrayList<VideoTransformer> {};

Nettoyage de transformateurs audio pour un éditeur

Pour supprimer les transformateurs audio d'un éditeur, définissez le paramètre Publisher.AudioTransformers à un tableau vide.

publisher.AudioTransformers =  new ArrayList<AudioTransformer> {};

Exemple d'application

Voir cet échantillon au vonage-video-windows-sdk-samples sur GitHub.