Une piste multimédia peut être un objet de flux audio ou vidéo, ou un objet texte (sous-titres ou sous-titre).
Un GCKMediaTrack
représente une piste. Il se compose d'un identifiant numérique unique et d'autres
comme un ID de contenu et un titre. Une instance GCKMediaTrack
peut être
créée comme suit:
let captionsTrack = GCKMediaTrack.init(identifier: 1, contentIdentifier: "https://some-url/caption_en.vtt", contentType: "text/vtt", type: GCKMediaTrackType.text, textSubtype: GCKMediaTextTrackSubtype.captions, name: "English Captions", languageCode: "en", customData: nil)
GCKMediaTrack *captionsTrack = [[GCKMediaTrack alloc] initWithIdentifier:1 contentIdentifier:@"https://some-url/caption_en.vtt" contentType:@"text/vtt" type:GCKMediaTrackTypeText textSubtype:GCKMediaTextTrackSubtypeCaptions name:@"English Captions" languageCode:@"en" customData:nil];
Un élément multimédia peut avoir plusieurs pistes. Par exemple, elle peut avoir plusieurs
des sous-titres (chacun correspondant à une langue différente) ou plusieurs autres flux audio
(pour différentes langues).
GCKMediaInformation
est la classe qui représente un élément multimédia. Pour associer une collection
Objets GCKMediaTrack
avec un élément multimédia, votre application doit mettre à jour
mediaTracks
. Votre application doit effectuer cette association avant le chargement
le contenu multimédia au récepteur, comme dans le code suivant:
let tracks = [captionsTrack] let url = URL.init(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4") guard let mediaURL = url else { print("invalid mediaURL") return } let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL) mediaInfoBuilder.streamType = GCKMediaStreamType.none; mediaInfoBuilder.contentType = "video/mp4" mediaInfoBuilder.metadata = metadata; mediaInfoBuilder.mediaTracks = tracks; mediaInformation = mediaInfoBuilder.build()
NSArray *tracks = @[captionsTrack]; GCKMediaInformationBuilder *mediaInfoBuilder = [[GCKMediaInformationBuilder alloc] initWithContentURL: [NSURL URLWithString:@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]]; mediaInfoBuilder.streamType = GCKMediaStreamTypeNone; mediaInfoBuilder.contentType = @"video/mp4"; mediaInfoBuilder.metadata = metadata; mediaInfoBuilder.mediaTracks = tracks; self.mediaInformation = [mediaInfoBuilder build];
Activez une ou plusieurs pistes associées à l'élément multimédia (après la
le contenu multimédia est chargé) en appelant -[setActiveTrackIDs:]
sur
GCKRemoteMediaClient
et en transmettant les identifiants
des pistes à activer. Par exemple :
active la piste de sous-titres créée ci-dessus.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Pour désactiver une piste sur l'élément multimédia en cours, appelez
-[setActiveTrackIDs:]
activé
GCKRemoteMediaClient
par un tableau vide ou "nil". Le code suivant désactive la piste de sous-titres.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Appliquer un style aux pistes de texte
La
GCKMediaTextTrackStyle
encapsule les informations de style d'une piste de texte. Un style de piste peut être
appliqué à l'élément multimédia en cours de lecture en appelant
-[GCKRemoteMediaClient
setTextTrackStyle]
Le style de suivi créé dans le code ci-dessous devient rouge (FF) avec une opacité de 50 %.
(80) et définit une police Serif.
let textTrackStyle = GCKMediaTextTrackStyle.createDefault() textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080") textTrackStyle.fontFamily = "serif" styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle) styleChangeRequest?.delegate = self
GCKMediaTextTrackStyle *textTrackStyle = [GCKMediaTextTrackStyle createDefault]; [textTrackStyle setForegroundColor:[[GCKColor alloc] initWithCSSString:@"#FF000080"]]; [textTrackStyle setFontFamily:@"serif"]; self.styleChangeRequest = [self.sessionManager.currentSession.remoteMediaClient setTextTrackStyle:textTrackStyle]; self.styleChangeRequest.delegate = self;
Vous pouvez utiliser la valeur renvoyée
Objet GCKRequest
pour
suivre cette demande.
// MARK: - GCKRequestDelegate func requestDidComplete(_ request: GCKRequest) { if request == styleChangeRequest { print("Style update completed.") styleChangeRequest = nil } }
#pragma mark - GCKRequestDelegate - (void)requestDidComplete:(GCKRequest *)request { if (request == self.styleChangeRequest) { NSLog(@"Style update completed."); self.styleChangeRequest = nil; } }
Consultez les informations sur l'état.
ci-dessous pour en savoir plus. Les applications doivent permettre aux utilisateurs de modifier le style du texte
en utilisant les paramètres fournis par le système ou l'application elle-même.
Un style par défaut est fourni (dans iOS 7 et versions ultérieures), et peut être récupéré
via la méthode statique +[GCKMediaTextTrackStyle
createDefault]
.
Les éléments de style de piste de texte suivants peuvent être modifiés:
- Couleur et opacité du premier plan (texte)
- Couleur et opacité de l'arrière-plan
- Type de contour
- Couleur du contour
- Échelle de police
- Famille de polices
- Style de police
Recevoir des informations sur l'état d'avancement
Lorsque plusieurs expéditeurs sont connectés au même destinataire, pour informer chaque expéditeur des modifications apportées au destinataire, même si celles-ci des modifications ont été effectuées par d'autres expéditeurs.
Pour que le destinataire reçoive les mises à jour d'état, votre application doit :
enregistrer un
GCKRemoteMediaClientListener
Si le
GCKMediaTextTrackStyle
des modifications en cours, tous les expéditeurs connectés seront avertis
via les
-[remoteMediaClient:didUpdateMediaMetadata:]
et les
Rappels -[remoteMediaClient:didUpdateMediaStatus:]
. Dans ce cas,
Le SDK récepteur ne vérifie pas si le nouveau style est différent du
et informe tous les expéditeurs connectés. Toutefois, si
la liste des canaux actifs est mise à jour, seul le
-[remoteMediaClient:didUpdateMediaStatus:]
des expéditeurs connectés sera
notifiée.
Respect des exigences CORS
Pour le streaming multimédia adaptatif, Google Cast requiert la présence d'en-têtes CORS. mais même les simples flux MP4 nécessitent CORS s'ils incluent des pistes. Si vous si vous souhaitez activer les titres pour tous les contenus multimédias, vous devez activer CORS pour vos deux canaux et vos flux multimédias. Si aucun en-tête CORS n'est disponible, pour votre contenu MP4 simple sur votre serveur, puis ajoutez un simple sous-titre piste, vous ne pourrez pas diffuser votre contenu multimédia à moins de mettre à jour votre serveur pour inclure l'en-tête CORS approprié. De plus, vous devez autoriser au moins les en-têtes suivants: Content-Type, Accept-Encoding et Range. Notez que les deux derniers en-têtes sont des en-têtes supplémentaires dont vous n'avez peut-être pas besoin auparavant.