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