Diffusion de flux — Windows
Une fois que vous avez connecté à une sessionvous pouvez publier un flux que les autres clients connectés à la session peuvent visualiser.
Cette rubrique comprend les sections suivantes :
- Initialisation d'un objet Publisher
- Publication d'un flux
- Définition du débit maximal d'un flux
- Empêcher un éditeur de diffuser en streaming
- Obtenir des statistiques sur le flux d'un éditeur
- Tester le flux d'un éditeur
Initialisation d'un objet Publisher
Un objet Publisher sert à capturer un flux audio-vidéo à partir du microphone et de la caméra du système afin de l'utiliser dans une session OpenTok. Vous pouvez également utiliser un Publisher pour diffuser un partage d'écran flux vidéo.
Vous pouvez créer un éditeur de base en appelant la fonction Publisher() en transmettant l'instance de l'application Windows :
publisher = new Publisher(Context.Instance);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Transmettre l'objet Publisher à la fonction Session.publish() méthode permettant de publier un flux vers une session. Voir Publication d'un flux.
Par défaut, Publisher utilise le module de capture vidéo par défaut, qui utilise le microphone et la caméra par défaut du système comme sources audio et vidéo pour le flux publié. Ceci est défini par l'interface VideoCapturer du SDK OpenTok.
Vous pouvez définir un objet de capture vidéo spécifique à utiliser par l'éditeur. Cet objet capture de la vidéo à partir d'une source vidéo (telle qu'une caméra) et possède des paramètres pour la vidéo (tels que la fréquence d'images et la résolution).
Vous pouvez utiliser le VideoCapturer.EnumerateDevices() pour énumérer les périphériques de capture vidéo (caméras) sur le système. Cette méthode renvoie une liste d'objets VideoDevice. La classe VideoDevice comprend un certain nombre d'éléments suivants CreateVideoCapturer() afin d'instancier un objet VideoCapturer qui utilise le périphérique vidéo :
VideoCapturer.CreateVideoCapturer(format)- Crée un objet VideoCapturer en utilisant les paramètres définis par un objet VideoFormat.VideoCapturer.CreateVideoCapturer(width, height, fps)- Crée un objet VideoCapturer avec la résolution définie par le paramètrewidthetheightet avec la fréquence d'images définie par les paramètresfpsparamètre.VideoCapturer.CreateVideoCapturer(resolution, fps)- Crée un objet VideoCapturer avec la résolution définie par le paramètreresolutionet avec la fréquence d'images définie par le paramètrefpsparamètre. LesOpenTok.VideoCapturer.Resolutiondéfinit les valeurs utilisées par leresolutionparamètre :Low(320x240 pixels),Medium(640 × 480 pixels),High(1280x720 pixels), etHigh1080p(1920x1080 pixels).
Le capteur vidéo utilise la résolution prise en charge par le système le plus proche de la résolution que vous avez spécifiée.
Par défaut, les éditeurs utilisent un moteur de rendu vidéo par défaut pour Windows Presentation Foundation, défini par la classe `VideoRenderer` du SDK Windows d'OpenTok. Vous pouvez également spécifier un moteur de rendu vidéo en créant une classe qui implémente l'interface `IVideoRenderer`. Vous pouvez utiliser un moteur de rendu vidéo personnalisé — voir Utilisation d'un moteur de rendu vidéo personnalisé.
Le code suivant crée un éditeur qui utilise le capteur vidéo par défaut du système avec une résolution fixée à 720p (VideoCapturer.Resolution.High) et la fréquence d'images est réglée sur 30 images par seconde :
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Remarque : Dans les sessions qui utilisent OpenTok Media Router (sessions avec le mode média Dans les sessions dont le mode média est défini sur routé, l'abaissement de la fréquence d'images réduit proportionnellement la bande passante utilisée par le flux. Toutefois, dans les sessions dont le mode média est défini sur relayé, la réduction de la fréquence d'images ne réduit pas la bande passante du flux.
Vous passez d'autres paramètres facultatifs du Publisher() pour définir des paramètres personnalisés pour le flux publié :
name- Le nom de la vidéo de l'éditeur. Le nom de l'éditeur de la vidéo.Stream.Namepour un flux publié par cet éditeur sera définie à cette valeur (sur tous les clients).hasAudioTrack- Indique s'il faut inclure une piste audio dans le flux publié. La valeur par défaut esttrue.hasVideoTrack- Indique s'il faut inclure une piste audio dans le flux publié. La valeur par défaut esttrue.stereo- Activer ou non l'audio stéréo dans le flux publié. La valeur par défaut estfalse. Réglez cette valeur surtruepour publier des données audio provenant d'un microphone stéréo.
Vous pouvez également changer la source audio utilisée par l'éditeur. Vous pouvez également créer un pilote audio personnalisé à utiliser par tous les éditeurs et abonnés.
Vous pouvez utiliser un capteur vidéo personnalisé pour publier un flux avec une source vidéo personnalisée - voir Utilisation d'un capteur vidéo personnalisé. Vous pouvez également utiliser le capteur vidéo personnalisé pour publier un flux de partage d'écran - voir Partage d'écran.
Remarque : La classe OpenTok.Publisher et OpenTok.VideoCapturer implémentent l'interface System.IDisposable. Veillez à appeler la classe Dispose() de ces objets pour libérer leurs ressources lorsque vous n'avez plus besoin de l'objet (par exemple, lorsque l'éditeur est supprimé ou lorsque l'application ou la fenêtre se ferme).
Publication d'un flux
Une fois que vous avez créé un objet Publisher (voir Initialisation d'un objet Publisher), vous pouvez le transmettre à la Publish(publisher) d'un objet Session pour publier le flux dans la session :
session.Publish(publisher);
Ce code suppose que session est un objet de session, que publisher est un objet Publisher et que le client s'est connecté à la session. Pour plus d'informations, voir Rejoindre une session.
Les Publisher envoie le StreamCreated lorsque l'éditeur commence à diffuser des informations dans la session :
publisher.StreamCreated += Publisher_StreamCreated;
session.Publish(publisher);
private void Publisher_StreamCreated(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher started streaming.");
}
Définition du débit maximal d'un flux
Vous pouvez définir le débit binaire maximal d'un flux publié. La définition d'un débit binaire maximal peut contribuer à réduire la consommation de bande passante lorsqu'un utilisateur se connecte via une connexion à volume limité. Voir cette documentation.
Empêcher un éditeur de diffuser en streaming
Vous pouvez empêcher l'éditeur de diffuser en continu vers la session en appelant la méthode Unpublish(publisher) de l'objet Session :
session.unpublish(mPublisher);
Les Publisher envoie le StreamCreated lorsque l'éditeur commence à diffuser des informations dans la session :
publisher.StreamCreated += Publisher_StreamDestroyed;
session.Publish(publisher);
private void Publisher_StreamDestroyed(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher stopped streaming.");
}
Obtenir des statistiques sur le flux d'un éditeur
Pour enregistrer des méthodes de rappel permettant de générer des rapports périodiques sur les statistiques audio et vidéo d'un éditeur, définissez un gestionnaire d'événements pour le Publisher AudioStatsUpdated et VideoUpdated événements. Pour obtenir des statistiques de connexion entre pairs de bas niveau, utilisez la commande Publisher.GetRtcStatsReport() méthode.
Se référer à le guide du développeur de l'observabilité du client pour obtenir des informations détaillées.
Tester le flux d'un éditeur
Vous pouvez publier un flux de test et vérifier ses statistiques audio et vidéo afin de déterminer le type de flux (haute résolution ou audio uniquement) pris en charge par votre connexion.
Vous pouvez ensuite vous abonner au flux et utiliser la fonction Subscriber.AudioStatsUpdated et Subscriber.VideoStatsUpdated pour obtenir des statistiques audio et vidéo pour le flux que vous publiez.