Publier : Principes de base
Ce guide couvre les étapes essentielles de la publication d'un flux : création d'un éditeur, démarrage du flux dans une session, arrêt en toute sécurité et destruction des ressources lorsque vous avez terminé.
Un objet éditeur est utilisé pour capturer un flux audio-vidéo à partir du microphone et de la caméra du système pour l'utiliser dans une session vidéo Vonage.
Vous pouvez également utiliser un éditeur pour publier un partage d'écran flux vidéo.
Initialisation d'un objet éditeur
Les OT.initPublisher() initialise et renvoie un objet éditeur. L'objet Publisher représente la vue d'une vidéo que vous publiez :
var publisher;
var targetElement = 'publisherContainer';
publisher = OT.initPublisher(targetElement, null, function(error) {
if (error) {
// The client cannot publish.
// You may want to notify the user.
} else {
console.log('Publisher initialized.');
}
});
Les OT.initPublisher() prend trois paramètres :
targetElement- (Facultatif) Définit l'élément DOM que la vidéo de l'éditeur remplace.properties- (Facultatif) Un ensemble de propriétés qui personnalisent l'éditeur. Les propriétéspropertiescomprend également des options permettant de spécifier un périphérique d'entrée audio et vidéo utilisé par l'éditeur. Le paramètrepropertiescomprend également des options permettant de personnaliser l'apparence de la vue dans la page HTML (voir Personnaliser l'interface utilisateur) et choisir de publier ou non des fichiers audio et vidéo (voir Publication d'audio ou de vidéo uniquementPour plus d'options de l'éditeur, voir la documentation de l'optionpropertiesde l'OT.initPublisher() méthode.completionHandler- (Facultatif) Un gestionnaire d'achèvement qui spécifie si l'éditeur a été instancié avec succès ou avec une erreur.
Vous pouvez transmettre cet objet Publisher à la fonction Session.publish() pour publier un flux dans une session.
Avant d'appeler Session.publish()Vous pouvez utiliser cet objet Publisher pour tester le microphone et la caméra attachés au Publisher.
Les insertMode de la propriété properties du paramètre OT.initPublisher() spécifie comment l'objet Publisher sera inséré dans le DOM HTML, par rapport à l'objet targetElement paramètre. Ce paramètre peut prendre l'une des valeurs suivantes :
"replace"- L'objet Publisher remplace le contenu de l'élément targetElement. Il s'agit de la valeur par défaut."after"- L'objet Publisher est un nouvel élément inséré après l'élément cible dans le DOM HTML. (Le Publisher et le targetElement ont tous deux le même élément parent)."before"- L'objet Publisher est un nouvel élément inséré avant l'élément cible dans le DOM HTML. (Le Publisher et le targetElement ont tous deux le même élément parent)."append"- L'objet Publisher est un nouvel élément ajouté en tant qu'enfant de l'élément cible. S'il existe d'autres éléments enfants, l'objet Publisher est ajouté en tant que dernier élément enfant de l'élément cible.
Par exemple, le code suivant ajoute un nouvel objet Publisher en tant qu'enfant d'un objet publisherContainer Élément DOM :
// Try setting insertMode to other values: "replace", "after", or "before":
var publisherProperties = {insertMode: "append"};
var publisher = OT.initPublisher('publisherContainer', publisherProperties, function (error) {
if (error) {
console.log(error);
} else {
console.log("Publisher initialized.");
}
});
Pour un éditeur de base, utilisez la fonction Publisher.Builder pour instancier un objet Publisher. Indiquez le contexte de l'application Android pour l'éditeur :
mPublisher = new Publisher.Builder(context)
.build();
Ajoutez un objet d'écoute pour les événements de base liés à la publication en appelant la fonction setPublisherListener(PublisherKit.PublisherListener listener) de l'objet Publisher :
mPublisher.setPublisherListener(this);
Implémentez les méthodes de l'interface PublisherKit.PublisherListener dans l'objet que vous spécifiez comme objet d'écoute d'événement. Ces méthodes sont appelées lorsque des événements liés à la publication se produisent.
Les getView() de l'objet Publisher renvoie la vue de la vidéo que vous publiez. Ajoutez-la en tant que sous-vue d'un objet android.view.ViewGroup pour l'afficher dans l'application :
mPublisherViewContainer.addView(mPublisher.getView());
Transmettre l'objet Publisher à la fonction Session.publish() pour publier un flux dans une session.
Vous pouvez appeler d'autres méthodes de l'objet Publisher.Builder pour définir des paramètres personnalisés pour l'éditeur :
mPublisher = new Publisher.Builder(context)
.name("Bob")
.audioTrack(true)
.frameRate(CameraCaptureFrameRate.FPS_7)
.resolution(CameraCaptureResolution.LOW)
.videoTrack(false)
.capturer(mCapturer)
.renderer(mRenderer)
.build();
Notez que dans les sessions qui utilisent le routeur vidéo de Vonage (sessions avec l'option 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.
Utilisation d'un capteur vidéo personnalisé
Vous pouvez utiliser un capteur vidéo personnalisé pour publier un flux avec une source vidéo personnalisée. Vous pouvez également utiliser le capteur vidéo personnalisé pour publier un flux de partage d'écran.
Vous pouvez également utiliser une source audio personnalisée pour le flux publié - voir Utilisation d'un pilote audio personnalisé.
Utiliser le OTPublisher pour créer un éditeur. L'objet view de l'objet contient la vue de la vidéo que vous publiez :
Implémentez les méthodes du protocole OTPublisherDelegate dans l'objet que vous spécifiez comme objet délégué. Ces méthodes sont appelées lorsque des événements liés à la publication se produisent.
Transmettre l'objet Publisher à la fonction OTSession publish(_:error:) pour publier un flux dans une session.
Vous pouvez définir d'autres propriétés de l'objet OTPublisherSettings pour définir des paramètres personnalisés pour l'éditeur :
Notez que dans les sessions qui utilisent le routeur vidéo de Vonage (sessions avec l'option 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 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.
Vous pouvez également utiliser une source audio personnalisée pour le flux publié - voir Utilisation d'un pilote audio personnalisé.
Utiliser le OTPublisher pour créer un éditeur. L'objet view de l'objet contient la vue de la vidéo que vous publiez :
Implémentez les méthodes du protocole OTPublisherDelegate dans l'objet que vous spécifiez comme objet délégué. Ces méthodes sont appelées lorsque des événements liés à la publication se produisent.
Transmettre l'objet Publisher à la fonction [OTSession publish:error] pour publier un flux dans une session.
Vous pouvez définir d'autres propriétés de l'objet OTPublisherSettings pour définir des paramètres personnalisés pour l'éditeur :
Notez que dans les sessions qui utilisent le routeur vidéo de Vonage (sessions avec l'option 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 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 l'outil de capture vidéo personnalisé pour publier un flux de partage d'écran - voir Partage d'écran.
Vous pouvez également utiliser une source audio personnalisée pour le flux publié - voir Utilisation d'un pilote audio personnalisé.
Vous pouvez créer un éditeur de base en appelant la fonction Publisher() en transmettant l'instance de l'application Windows :
Transmettre l'objet Publisher à la fonction Session.publish() pour publier un flux dans une session.
Par défaut, l'éditeur utilise le capteur vidéo par défaut, qui utilise le microphone et la caméra par défaut du système comme source audio et vidéo pour le flux publié. Ceci est défini par le VideoCapturer dans le SDK vidéo de Vonage.
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(640x480 pixels), etHigh(1280x720 pixels), etHigh 1080p(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, qui est défini par la classe VideoRenderer dans le SDK Windows Video de Vonage. Vous pouvez également spécifier un moteur de rendu pour la 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 :
Remarque : Dans les sessions qui utilisent le routeur vidéo de Vonage (sessions avec l'option 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 l'outil de capture 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).
Commencez par créer une structure de type otc_publisher_callbacks:
Utiliser le user_data membre de la otc_publisher_callbacks pour définir les données que vous souhaitez référencer dans les fonctions de rappel. Dans cet exemple, il s'agit d'un pointeur sur un tableau de caractères. Mais il pourrait s'agir d'un pointeur sur une instance d'un autre type contenant des informations significatives.
Les autres membres de la otc_publisher_callbacks sont des fonctions de rappel qui sont invoquées lorsque des événements liés au flux publié se produisent :
on_stream_created- Appelé lorsque l'éditeur commence à diffuser des informations dans la session.on_render_frame- Appelé chaque fois que l'éditeur est prêt à rendre une nouvelle image vidéo dans le flux.on_stream_destroyed- Appelé lorsque le flux de l'éditeur est détruit.on_error- Appelé lorsqu'une erreur se produit lors de la publication du flux.
Tous les rappels ne seront pas effectués sur l'application ou le thread principal, mais sur un thread interne. L'application doit renvoyer le rappel le plus rapidement possible afin d'éviter de bloquer le thread interne.
Voir otc_publisher_callbacks dans la référence OpenTok Linux SDK pour plus de détails sur chacune des fonctions de rappel.
Appeler le otc_publisher_new() pour créer un otc_publisher qui représente l'éditeur OpenTok :
Les otc_publisher_new() prend trois arguments :
name- Un nom (facultatif) identifiant l'éditeur du flux.capturer- Utilisez ce paramètre si vous souhaitez fournir un capteur vidéo personnalisé. S'il est défini surNULLl'éditeur utilise la caméra du système par défaut comme source vidéo.
Voir Utilisation d'un capteur vidéo personnalisé pour voir comment mettre en œuvre un capteur vidéo personnalisé.
callbacks- Leotc_publisher_callbacksstructure de rappel de l'éditeur, décrite ci-dessus.
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é.
Publication d'un flux
Une fois que vous avez un objet Publisher et un sessionl'étape suivante consiste à le transmettre à l'objet session pour commencer la diffusion en continu.
Pour publier un flux, ajoutez un composant OTPublisher en tant qu'enfant de l'objet OTSession :
<OTSession
applicationId="your-application-id"
sessionId="the session ID"
token="the token">
<OTPublisher/>
</OTSession>
L'éditeur démarre la diffusion en continu lorsque le client se connecte à la session. L'objet OTPublisher envoie une commande streamCreated lorsqu'il commence à diffuser des informations dans la session. Il envoie un error s'il y a un événement error l'édition. Fixer un eventHandlers du composant OTPublisher, et définir la propriété streamCreated et error de cet objet à des fonctions de rappel :
<OTPublisher
eventHandlers={{
streamCreated: () => {
console.log('The publisher started streaming.');
},
error: event => {
console.log('Publisher error:', event);
},
}}/>
Transmettre l'objet de l'éditeur à la fonction publish() d'un objet Session pour publier un flux dans la session :
publisher = OT.initPublisher('replacementElementId');
session.publish(publisher, function(error) {
if (error) {
console.log(error);
} else {
console.log('Publishing a stream.');
}
});
Le second paramètre est une fonction de gestion de l'achèvement à laquelle est transmis un objet d'erreur si la publication échoue. Dans le cas contraire, la fonction de gestion de l'achèvement est appelée sans qu'aucune erreur ne soit transmise.
Ce code suppose que session est un objet Session et que le client s'est connecté à la session. Pour plus d'informations, voir Rejoindre une session.
L'objet Publish envoie un streamCreated lorsqu'il commence à diffuser des informations dans la session :
var publisher = OT.initPublisher();
session.publish(publisher, function(error) {
if (error) {
console.log(error);
} else {
console.log('Publishing a stream.');
}
});
publisher.on('streamCreated', function (event) {
console.log('The publisher started streaming.');
});
L'objet Publisher possède une fonction element qui correspond à l'élément HTML DOM qui le contient.
Vous pouvez définir le débit maximum d'un flux publié. La définition du maximum peut aider à réduire la consommation de bande passante lorsqu'un utilisateur se se connecte à partir d'une connexion payante. Voir cette documentation.
Transmettre l'objet de l'éditeur à la fonction publish(PublisherKit publisher) d'un objet Session pour publier le flux dans la session :
mSession.publish(mPublisher);
Ce code suppose que mSession est un objet Session et que le client s'est connecté à la session. Pour plus d'informations, voir Rejoindre une session.
Les PublisherKit.PublisherListener.onStreamCreated(PublisherKit publisher, Stream stream) est appelée lorsque l'éditeur commence à diffuser des informations dans la session :
@Override
public void onStreamCreated(publisher, stream) {
// The publisher started streaming.
}
Vous pouvez définir le débit maximum d'un flux publié. La définition du maximum peut aider à réduire la consommation de bande passante lorsqu'un utilisateur se se connecte à partir d'une connexion payante. Voir cette documentation.
Transmettre l'objet de l'éditeur à la fonction OTSession publish(_:error:) d'un objet OTSession pour publier le flux dans la session :
Ce code suppose que session est un objet Session et que le client s'est connecté à la session. Pour plus d'informations, voir Rejoindre une session.
Les OTPublisherDelegate publisher(_:streamCreated:) est envoyé lorsque l'éditeur commence à diffuser des informations dans la session.
Transmettre l'objet de l'éditeur à la fonction [OTSession publish:error] d'un objet OTSession pour publier le flux dans la session :
Ce code suppose que session est un objet Session et que le client s'est connecté à la session. Pour plus d'informations, voir Création d'une session.
Les [OTPublisherDelegate publisher:streamCreated:] est envoyé lorsque l'éditeur commence à diffuser des informations dans la session.
Vous pouvez définir le débit maximum d'un flux publié. La définition du maximum peut aider à réduire la consommation de bande passante lorsqu'un utilisateur se se connecte à partir d'une connexion payante. Voir cette documentation.
Transmettre l'objet de l'éditeur à la fonction Publish(publisher) d'un objet Session pour publier le flux dans la session :
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 :
Vous pouvez définir le débit maximum d'un flux publié. La définition du maximum peut aider à réduire la consommation de bande passante lorsqu'un utilisateur se se connecte à partir d'une connexion payante. Voir cette documentation.
Lorsque l'application se connecte à une session, l'élément on_connected() de la fonction de rappel du otc_session_callbacks est appelée (voir Rejoindre une session). En réponse à cela, vous pouvez appeler la fonction otc_session_publish() pour publier un flux dans la session OpenTok :
Les otc_session_publish() prend deux arguments :
- Le pointeur sur le
otc_sessionstructure. - Les
otc_publisherstructure.
Il renvoie OTC_SUCCESS lorsqu'il réussit à publier un flux dans la session. Dans le cas contraire, il renvoie une erreur, et la fonction otc_error est appelé.
Vous pouvez définir le débit maximum d'un flux publié. La définition du maximum peut aider à réduire la consommation de bande passante lorsqu'un utilisateur se se connecte à partir d'une connexion payante. Voir cette documentation.
Définir une préférence de dégradation de l'éditeur
Lorsque la bande passante ou l'unité centrale sont limitées, le moteur vidéo peut réduire la fréquence d'images et/ou la résolution de la vidéo de l'éditeur pour s'adapter à ces limitations.
La préférence de dégradation est un paramètre de configuration qui permet de modifier ce comportement.
Les développeurs sont chargés de définir et d'appliquer les préférences de dégradation en fonction de leur cas d'utilisation et de leurs exigences.
Il s'agit d'une préférence, ce qui signifie que le moteur vidéo essaiera de suivre la préférence sélectionnée, mais il n'y a aucune garantie quant au résultat.
Cette préférence peut se comporter différemment lors de l'utilisation de vidéo évolutiveoù le moteur vidéo peut décider de supprimer des couches au lieu de dégrader la résolution.
Indice de contenu et la préférence de dégradation ont des objectifs différents mais liés : L'indication de contenu décrit le type de contenu transmis, tandis que la préférence de dégradation contrôle la stratégie d'encodage. Lorsque vous définissez une indication de contenu, le moteur vidéo détermine automatiquement la préférence de dégradation appropriée (par exemple, "texte" sélectionne automatiquement le maintien de la résolution). Une préférence de dégradation explicitement définie remplacera cette sélection automatique.
Setting the degradation preference
Pour définir la préférence de dégradation de l'éditeur, utilisez publisher.setDegradationPreference avec l'une des options disponibles dans DegradationPreference:
publisher.setDegradationPreference(DegradationPreference.DegradationPreferenceMaintainResolution);
Le texte suivant DegradationPreference sont disponibles :
DegradationPreferenceNotSet: Valeur par défaut. Le moteur vidéo décidera de la préférence de dégradation optimale.DegradationPreferenceMaintainFrameRateAndResolution: Le moteur vidéo essaiera de maintenir la fréquence d'images stable et de ne pas réduire la résolution.DegradationPreferenceMaintainFrameRate: Le moteur vidéo s'efforce de maintenir la fréquence d'images constante, mais peut réduire la résolution si nécessaire.DegradationPreferenceMaintainResolution: Le moteur vidéo ne réduit pas la résolution mais peut réduire la fréquence d'images si nécessaire.DegradationPreferenceBalanced: Le moteur vidéo tente de trouver un équilibre entre la réduction de la résolution et de la fréquence d'images lorsque cela est nécessaire.
Getting the current degradation preference
Pour récupérer la préférence de dégradation de l'éditeur actuellement configurée, utilisez publisher.getDegradationPreference:
DegradationPreference preference = publisher.getDegradationPreference();
Setting the degradation preference
Pour définir la préférence de dégradation de l'éditeur, définissez publisher.degradationPreference à l'une des options disponibles dans la rubrique OTDegradationPreference:
Le texte suivant OTDegradationPreference sont disponibles :
notSet: Valeur par défaut. Le moteur vidéo décidera de la préférence de dégradation optimale.maintainFrameRateAndResolution: Le moteur vidéo essaiera de maintenir la fréquence d'images stable et de ne pas réduire la résolution.maintainFrameRate: Le moteur vidéo s'efforce de maintenir la fréquence d'images constante, mais peut réduire la résolution si nécessaire.maintainResolution: Le moteur vidéo ne réduit pas la résolution mais peut réduire la fréquence d'images si nécessaire.balanced: Le moteur vidéo tente de trouver un équilibre entre la réduction de la résolution et de la fréquence d'images lorsque cela est nécessaire.
Getting the current degradation preference
Pour récupérer la préférence de dégradation de l'éditeur actuellement configurée, lisez publisher.degradationPreference propriété :
Setting the degradation preference
Pour définir la préférence de dégradation de l'éditeur, définissez publisher.degradationPreference à l'une des options disponibles dans la rubrique OTDegradationPreference:
Le texte suivant OTDegradationPreference sont disponibles :
OTDegradationPreferenceNotSet: Valeur par défaut. Le moteur vidéo décidera de la préférence de dégradation optimale.OTDegradationPreferenceMaintainFrameRateAndResolution: Le moteur vidéo essaiera de maintenir la fréquence d'images stable et de ne pas réduire la résolution.OTDegradationPreferenceMaintainFrameRate: Le moteur vidéo s'efforce de maintenir la fréquence d'images constante, mais peut réduire la résolution si nécessaire.OTDegradationPreferenceMaintainResolution: Le moteur vidéo ne réduit pas la résolution mais peut réduire la fréquence d'images si nécessaire.OTDegradationPreferenceBalanced: Le moteur vidéo tente de trouver un équilibre entre la réduction de la résolution et de la fréquence d'images lorsque cela est nécessaire.
Getting the current degradation preference
Pour récupérer la préférence de dégradation de l'éditeur actuellement configurée, lisez publisher.degradationPreference propriété :
Setting the degradation preference
Pour définir la préférence de dégradation de l'éditeur, définissez publisher.DegradationPreference à l'une des options disponibles dans la rubrique DegradationPreference:
Le texte suivant DegradationPreference sont disponibles :
NotSet: Valeur par défaut. Le moteur vidéo décidera de la préférence de dégradation optimale.MaintainFrameRateAndResolution: Le moteur vidéo essaiera de maintenir la fréquence d'images stable et de ne pas réduire la résolution.MaintainFrameRate: Le moteur vidéo s'efforce de maintenir la fréquence d'images constante, mais peut réduire la résolution si nécessaire.MaintainResolution: Le moteur vidéo ne réduit pas la résolution mais peut réduire la fréquence d'images si nécessaire.Balanced: Le moteur vidéo tente de trouver un équilibre entre la réduction de la résolution et de la fréquence d'images lorsque cela est nécessaire.
Getting the current degradation preference
Pour récupérer la préférence de dégradation de l'éditeur actuellement configurée, lisez publisher.DegradationPreference propriété :
Setting the degradation preference
Pour définir la préférence de dégradation de l'éditeur, utilisez otc_publisher_set_degradation_preference avec l'une des options disponibles dans otc_degradation_preference:
Le texte suivant otc_degradation_preference sont disponibles :
OTC_DEGRADATION_PREFERENCE_NOT_SET: Valeur par défaut. Le moteur vidéo décidera de la préférence de dégradation optimale.OTC_DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION: Le moteur vidéo essaiera de maintenir la fréquence d'images stable et de ne pas réduire la résolution.OTC_DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE: Le moteur vidéo s'efforce de maintenir la fréquence d'images constante, mais peut réduire la résolution si nécessaire.OTC_DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION: Le moteur vidéo ne réduit pas la résolution mais peut réduire la fréquence d'images si nécessaire.OTC_DEGRADATION_PREFERENCE_BALANCED: Le moteur vidéo tente de trouver un équilibre entre la réduction de la résolution et de la fréquence d'images lorsque cela est nécessaire.
Getting the current degradation preference
Pour récupérer la préférence de dégradation de l'éditeur actuellement configurée, utilisez otc_publisher_get_degradation_preference:
Empêcher un éditeur de diffuser en continu
Contrôlez qui peut publier et empêchez un éditeur de diffuser en continu vers une session lorsque cela est nécessaire.
Vous pouvez empêcher l'éditeur de diffuser des flux vers la session en le démontant (en le supprimant du composant OTSession parent). Par exemple, le code suivant arrête la publication d'un flux après 30 secondes :
import React, {Component} from 'react';
import {View} from 'react-native';
import {OTSession, OTPublisher} from 'opentok-react-native';
class App extends Component {
constructor(props) {
super(props);
this.apiKey = 'your-api-key';
this.sessionId = 'valid-session-id';
this.token = 'valid-token';
this.publisherOptions = {
publishCaptions: true,
publishVideo: true,
publishAudio: false,
};
this.state = {
publishing: true,
};
this.publisherEventHandlers = {
streamCreated: event => {
setTimeout(
function () {
console.log(10);
this.setState({publishing: false});
}.bind(this),
10000,
);
},
};
}
render() {
return (
<View>
<OTSession
applicationId={this.apiKey}
sessionId={this.sessionId}
token={this.token}
{this.state.publishing ? (
<OTPublisher
eventHandlers={this.publisherEventHandlers}
ref={instance => {
this.publisher = instance;
}}
/>
) : null}
</OTSession>
</View>
);
}
}
export default App;
Notez que vous pouvez arrêter individuellement l'envoi de vidéo ou d'audio (tout en continuant à publier).
Détection de la sortie d'une session d'un flux publié
L'objet OTPublisher envoie un streamDestroyed lorsqu'il cesse d'alimenter la session :
<OTPublisher
eventHandlers={{
streamDestroyed: function() {
console.log('The publisher stopped streaming.');
},
}}
/>
Pour arrêter un éditeur, appelez le unpublish() de l'objet Session :
session.unpublish(publisher);
Notez que vous pouvez arrêter individuellement l'envoi de vidéo ou d'audio (tout en continuant à publier).
Pour plus d'informations, voir Réglage de l'audio et de la vidéo.
Détection de la sortie d'une session d'un flux publié
L'objet Publisher envoie un streamDestroyed lorsqu'il cesse d'alimenter la session :
var publisher = OT.initPublisher();
session.publish(publisher);
publisher.on("streamDestroyed", function (event) {
console.log("The publisher stopped streaming. Reason: "
+ event.reason);
});
Les streamDestroyed est défini par la classe StreamEvent. L'événement comprend un reason qui explique pourquoi le flux s'est terminé. Ces raisons comprennent "clientDisconnected", "forceDisconnected", "forceUnpublished"ou "networkDisconnected". Pour plus de détails, voir Événement de flux.
Par défaut, lorsqu'un éditeur envoie la commande streamDestroyed l'éditeur est détruit et supprimé du DOM HTML. Vous pouvez empêcher ce comportement par défaut en appelant la fonction preventDefault() de l'objet StreamEvent :
publisher.on("streamDestroyed", function (event) {
event.preventDefault();
console.log("The publisher stopped streaming.");
});
Il se peut que vous souhaitiez empêcher le comportement par défaut et conserver l'objet Publisher si vous souhaitez réutiliser l'objet Publisher pour publier à nouveau dans la session.
L'éditeur envoie également un destroyed lorsque l'objet a été supprimé du DOM HTML. En réponse à cet événement, vous pouvez choisir d'ajuster (ou de supprimer) les éléments du DOM liés à l'éditeur qui a été supprimé.
Pour arrêter un éditeur, appelez le unpublish(PublisherKit publisher) de l'objet Session :
mSession.unpublish(mPublisher);
Les PublisherKit.PublisherListener.onStreamDestroyed(PublisherKit publisher, Stream stream) est appelée lorsque l'éditeur cesse d'alimenter la session :
@Override
public void onStreamDestroyed(publisher, stream) {
// The publisher stopped streaming.
}
Pour arrêter un éditeur, appelez le OTSession unpublish(_:error:) de l'objet OTSession :
Les OTPublisherDelegate publisher(_:streamDestroyed:) est envoyé lorsque l'éditeur cesse d'alimenter la session. Lorsque ce message est envoyé, la vue de l'éditeur est supprimée de sa vue secondaire :
Pour arrêter un éditeur, appelez le [OTSession unpublish:error:] de l'objet OTSession :
Les [OTPublisherDelegate publisher:streamDestroyed:] est envoyé lorsque l'éditeur cesse d'alimenter la session. Lorsque ce message est envoyé, la vue de l'éditeur est supprimée de sa vue secondaire :
Pour arrêter un éditeur, appelez le Unpublish(publisher) de l'objet Session :
Les Publisher envoie le StreamCreated lorsque l'éditeur commence à diffuser des informations dans la session :
Appeler le otc_session_unpublish() en passant la fonction otc_session et otc_publisher des structures :
Suppression d'un éditeur (nettoyage)
Vous pouvez supprimer un éditeur en appelant son destroy() méthode. Appeler destroy() supprime l'objet Publisher et le retire du DOM HTML :
publisher.destroy();