Processeur média (macOS)

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 otc_publisher_set_video_transformers() et otc_publisher_set_audio_transformers() pour appliquer des transformateurs audio et vidéo à un flux publié.

Important : Actuellement, seuls les Mac en silicone d'Apple sont pris en charge. Voir le site Exigences du système pour plus d'informations.

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

Vous pouvez également créer vos propres transformateurs audio et vidéo.

Exigences du système

Actuellement, les transformateurs de la médiathèque de Vonage ne sont pris en charge que sur les Macs au silicium d'Apple.

Les transformateurs nécessitent un support processeur adéquat. Même sur les systèmes 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.

macOS peut limiter les performances du processeur pour économiser de l'énergie (par exemple, pour prolonger la durée de vie de la batterie de l'ordinateur portable). Cela peut entraîner des performances sous-optimales du transformateur et introduire des artefacts audio ou vidéo indésirables. Nous vous recommandons de régler votre système sur pas utiliser 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.3, 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.3, 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.

La médiathèque de Vonage est disponible sous la forme du pod "VonageClientSDKVideoMacOSTransformers", pour utiliser avec CocoaPods.

Si un appel à otc_video_transformer_create() ou otc_audio_transformer_create() est effectué sans charger la bibliothèque, le transformateur retourné sera nul. Vous devez utiliser errno, une variable globale qui est définie par les appels système en cas d'erreur pour indiquer ce qui n'a pas fonctionné. Elle est définie dans le fichier <cerrno> en-tête. Le code d'erreur pour la bibliothèque manquante est 0x0A000006.

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

Actuellement, un seul transformateur de la médiathèque de Vonage est pris en charge : le flou d'arrière-plan. Pour ce transformateur :

Utiliser le otc_video_transformer_create() 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.

    • Régler le type au paramètre OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (défini dans le SDK). Cela indique que vous utilisez un transformateur de la médiathèque de Vonage.
    • Régler le 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, le format JSON est "{"radius" : "None"}". Les valeurs valides pour le paramètre radius sont "Aucun", "Haut", "Bas" et "Personnalisé". 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).
    • Régler le callback au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs vidéo personnalisés).
    • Régler le userData au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs vidéo personnalisés).
    otc_video_transformer *backgroundBlur = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundBlur",
      "{\"radius\":\"High\"}",
      NULL,
      NULL
    );
    
  • Remplacement des antécédents.

    • Régler le type au paramètre OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (défini dans le SDK). Cela indique que vous utilisez un transformateur de la médiathèque de Vonage.
    • Régler le name au paramètre "BackgroundReplacement".
    • Régler le properties à une chaîne JSON définissant les propriétés du transformateur. Pour le transformateur de remplacement d'arrière-plan, 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.
    • Régler le callback au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs vidéo personnalisés).
    • Régler le userData au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs vidéo personnalisés).
    otc_video_transformer *backgroundReplacement = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundReplacement",
      "{\"image_file_path\":\"path-to-image\"}",
      NULL,
      NULL
    );
    

Après avoir créé le transformateur, vous pouvez l'appliquer à un éditeur à l'aide de la fonction otc_publisher_set_video_transformers() fonction :

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  background_blur
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

Le dernier paramètre de otc_publisher_set_video_transformers() est la taille du transformers réseau. Dans cet exemple, nous appliquons un transformateur vidéo à l'éditeur. Vous pouvez appliquer plusieurs transformateurs en ajoutant plusieurs objets otc_video_transformer à l'objet transformers passé dans le tableau otc_publisher_set_video_transformers().

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

Utiliser le otc_audio_transformer_create() 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.

    • Régler le type au paramètre OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (défini dans le SDK). Cela indique que vous utilisez un transformateur de la médiathèque de Vonage.
    • Régler le 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, il n'y a actuellement aucune propriété, le format du JSON est donc "". JSON est "".
    • Régler le callback au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs audio personnalisés).
    • Régler le userData au paramètre NULL. (Ce paramètre est utilisé pour les transformateurs audio personnalisés).
    otc_audio_transformer *noise_suppression = otc_audio_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "NoiseSuppression",
      "{}",
      NULL,
      NULL
    );
    

Après avoir créé le transformateur, vous pouvez l'appliquer à un éditeur à l'aide de la fonction otc_publisher_set_audio_transformers() fonction :

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  noise_suppression
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

Le dernier paramètre de otc_publisher_set_audio_transformers() est la taille du transformers réseau. Dans cet exemple, nous appliquons un transformateur audio à l'éditeur. Vous pouvez appliquer plusieurs transformateurs en ajoutant plusieurs objets otc_audio_transformer à l'objet transformers passé dans le tableau otc_publisher_set_audio_transformers().

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

Utiliser le otc_video_transformer_create() pour créer un transformateur vidéo.

  • Régler le type au paramètre OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (défini dans le SDK). Cela indique que vous créez un transformateur personnalisé.
  • Régler le name à un nom unique pour votre transformateur.
  • Régler le properties paramètre NULL. (Ce paramètre est utilisé lors de l'utilisation d'un transformateur de la de la médiathèque de Vonage).
  • Régler le callback à une fonction de rappel. Cette fonction est une instance de l'instance video_transform_callback défini dans le SDK. Cette fonction a deux paramètres : user_data -- voir le paramètre suivant -- et frame -- une instance de type otc_video_frame (définie dans le SDK) transmise à la fonction de rappel lorsque des données d'images vidéo sont disponibles. Transformer les données de l'image vidéo dans la fonction de rappel.
  • Régler le userData paramètre (facultatif) pour les données de l'utilisateur à transmettre dans la fonction de rappel.

Voici un exemple de base :

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

Après avoir créé le transformateur, vous pouvez l'appliquer à un éditeur à l'aide de la fonction otc_publisher_set_video_transformers() fonction :

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  black_white_border
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

Création d'un transformateur audio personnalisé

Utiliser le otc_audio_transformer_create() pour créer un transformateur audio.

  • Régler le type au paramètre OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (défini dans le SDK). Cela indique que vous créez un transformateur personnalisé. (Dans cette version, aucun transformateur audio prédéfini de la médiathèque de Vonage n'est pris en charge).
  • Régler le name à un nom unique pour votre transformateur.
  • Régler le properties paramètre NULL. (Ce paramètre est utilisé lors de l'utilisation d'un transformateur de la de la médiathèque de Vonage).
  • Régler le callback à une fonction de rappel. Cette fonction est une instance de l'instance audio_transform_callback défini dans le SDK. Cette fonction a deux paramètres : user_data -- voir le paramètre suivant -- et frame -- une instance de type otc_audio_data (définie dans le SDK) transmise à la fonction de rappel lorsque des données audio sont disponibles. Transformer les données audio dans la fonction de rappel.
  • Régler le userData paramètre (facultatif) pour les données de l'utilisateur à transmettre dans la fonction de rappel.

Voici un exemple de base :

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

Après avoir créé le transformateur, vous pouvez l'appliquer à un éditeur à l'aide de la fonction otc_publisher_set_audio_transformers() fonction :

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  lowpass_filter
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

Le dernier paramètre de otc_publisher_set_audio_transformers() est la taille du transformers réseau. Dans cet exemple, nous appliquons un transformateur audio à l'éditeur. Vous pouvez appliquer plusieurs transformateurs en ajoutant plusieurs otc_audio_transformer aux objets de la transformers passé dans le tableau otc_publisher_set_audio_transformers().

Nettoyage des transformateurs vidéo pour un éditeur

Pour supprimer les transformateurs vidéo d'un éditeur, passez un tableau vide dans la fonction otc_publisher_set_video_transformers() fonction.

otc_audio_transformer empty_array[] = {};
otc_publisher_set_video_transformers(publisher, empty_array, 0);

Utiliser le otc_video_transformer_delete() pour supprimer une instance de otc_audio_transformer :

otc_video_transformer_delete(lowpass_filter);

Nettoyage de transformateurs audio pour un éditeur

Pour effacer les transformateurs audio d'un éditeur, passez un tableau vide dans la fonction otc_publisher_set_audio_transformers() fonction.

otc_video_transformer empty_array[] = {};
otc_publisher_set_audio_transformers(publisher, empty_array, 0);

Utiliser le otc_audio_transformer_delete() pour supprimer une instance de otc_audio_transformer :

otc_audio_transformer_delete(black_white_border);

Exemple d'application

Voir cet échantillon au opentok-macos-sdk-samples sur GitHub.