Utiliser des pistes multimédias

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:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
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)
<ph type="x-smartling-placeholder">
</ph>
Objective-C
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:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
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()
<ph type="x-smartling-placeholder">
</ph>
Objective-C
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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
<ph type="x-smartling-placeholder">
</ph>
Objective-C
[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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
<ph type="x-smartling-placeholder">
</ph>
Objective-C
[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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
<ph type="x-smartling-placeholder">
</ph>
Objective-C
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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
<ph type="x-smartling-placeholder">
</ph>
Objective-C
#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.