Sous-titres en direct — SDK Vonage Video pour iOS (Swift)
Le SDK OpenTok pour iOS comprend des méthodes permettant aux clients iOS de publier et de recevoir des sous-titres au cours d'une session OpenTok.
Le sous-titrage en direct doit être activé au niveau de la session via le API REST.
Le sous-titrage en direct n'est possible que dans les cas suivants sessions acheminées.
Cette rubrique comprend les sections suivantes :
Publication de sous-titres en direct
Un éditeur OpenTok peut activer ou désactiver la diffusion de sous-titres en direct et en temps réel en configurant le
publishCaptions de l'objet OTPublisherKit :
publisher.publishCaptions = true
Si l'éditeur n'inclut pas de piste audio, la [PublisherKit publisher:didFailWithError:]
est envoyé, avec le message code de l'erreur fixée à OTPublisherMissingAudioTrack.
Le SDK iOS de Vonage ne permet pas à un éditeur de recevoir des événements pour ses propres sous-titres. Pour rendre les propres sous-titres de l'orateur, créez un abonné caché (au flux de l'éditeur) pour écouter les événements de sous-titres. (Voir la section suivante.)
S'abonner aux sous-titres en direct
Un abonné peut commencer ou arrêter de recevoir des sous-titres en réglant le paramètre subscribeToCaptions de l'objet OTSubscriberKit
de l'objet OTSubscriberKit :
subscriber.subscribeToCaptions = true
Vous pouvez appeler cette méthode, que l'éditeur du flux soit ou non en train de publier des des sous-titres en direct. L'abonné commencera à recevoir les données de sous-titrage dès que l'éditeur commencera à à publier des sous-titres.
Pour ne plus recevoir de sous-titres, réglez la propriété sur false:
subscriber.setSubscribeToCaptions = false
Les OTSubscriberKitCaptionsDelegate(_:subscriber:caption:isFinal:) est envoyé lorsqu'un
d'un flux reçoit des sous-titres :
// OTSubscriberKitDelegate callbacks:
func subscriber(_ subscriber: OTSubscriberKit, caption text: NSString, isFinal final: Bool) {
// Display caption text in UI.
}
Vous pouvez mettre en place un observateur clé-valeur pour l'élément hasCaptions d'un objet OTStream
pour savoir si les sous-titres sont activés ou désactivés dans le flux.
//add observer on a stream of interest
let hasCaptionsObservation: NSKeyValueObservation = subscriber.stream.observe(\.hasCaptions, options: [.old, .new]) { object, change in
guard let oldValue = change.oldValue else { return }
guard let newValue = change.newValue else { return }
print("KVO change for \(subscriber.stream.streamId) hasCaptions: \(newValue)")
//manipulate GUI element
}
Recevoir ses propres sous-titres en direct
La Video API Vonage ne permet pas à un éditeur de recevoir des événements concernant ses propres sous-titres. Pour afficher les sous-titres de l'intervenant lui-même, créez un abonné masqué (au flux de l'éditeur local) afin de détecter les événements de sous-titrage. N'affichez pas la vue de cet abonné dans l'interface utilisateur et ne vous abonnez pas à son flux audio (pour éviter l'écho). Vous pouvez ensuite ajouter le texte des sous-titres à l'interface utilisateur.
Par défaut, l'éditeur ne publie pas les légendes ; vous devez donc configurer le publishCaptions propriété de l'éditeur à true:
publisher = OTPublisher(delegate: self, settings: pubSettings!)
publisher?.publishCaptions = true
Abonnez-vous au flux dans le OTPublisherKitDelegate(publisher, streamCreated) méthode :
func publisher(_ publisher: OTPublisherKit, streamCreated stream: OTStream) {
// Add view
let pubView = self.publisher?.view
if(pubView != nil) // audio only publisher
{
ViewUtils.addViewFill(pubView!, rootView: self.publisherView!)
}
let subscriber = OTSubscriber(stream: stream, delegate: self)
subscriber.subscribeToAudio = false
subscriber.subscribeToVideo = true // typically should be false, but due to an existing bug in 2.25.3, it is set to true. Future versions will fix the issue.
subscriber.subscribeToCaptions = true
subscriber.captionsDelegate = self
do {
try self.session?.subscribe(subscriber)
} catch let error {
print("Error subscribing: \(error)")
}
selfPublisherStreamId = stream?.streamId
}
Comme indiqué ci-dessus, vous devez vous abonner à la vidéo pour bénéficier des sous-titres. (Ce problème sera corrigé dans une prochaine version.)
Cet exemple enregistre l'identifiant de flux de l'éditeur dans un selfPublisherStreamId variable, utilisée ici pour empêcher que sa vue ne soit ajoutée à l'interface utilisateur :
func subscriberDidConnect(toStream subscriberKit: OTSubscriberKit) {
if subscriber.stream.streamId == selfPublisherStreamId {
return // Don't show the self subscriber view.
}
// Show other subscribers in the UI
if let subsView = subscriber?.view {
subsView.frame = CGRect(x: 0, y: kWidgetHeight, width: kWidgetWidth, height: kWidgetHeight)
view.addSubview(subsView)
}
}
L'abonné dispose du texte transcrit (correspondant à votre flux publié) dans le délégué suivant :
func onSubscriberCaptionText(_ subscriber: OpaquePointer!, caption_text: String!) {
// Adjust UI to show captions.
DispatchQueue.main.async {
if let s = self.views[subscriber] {
s.updateCaptionText(caption_text)
}
}
}