Utiliser des pistes multimédias

Une piste multimédia peut être un objet de flux audio ou vidéo, ou un objet texte (sous-titre ou légende).

Un objet GCKMediaTrack représente une piste. Elle se compose d'un identifiant numérique unique et d'autres attributs tels qu'un identifiant de contenu et un titre. Une instance GCKMediaTrack peut être créée comme suit:

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)
Goal-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, il peut avoir plusieurs sous-titres (chacun pour une langue différente) ou plusieurs flux audio alternatifs (pour différentes langues). GCKMediaInformation est la classe qui représente un élément multimédia. Pour associer une collection d'objets GCKMediaTrack à un élément multimédia, votre application doit mettre à jour sa propriété mediaTracks. Votre application doit effectuer cette association avant de charger le contenu multimédia dans le récepteur, comme dans le code suivant:

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()
Goal-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 le chargement du contenu multimédia) en appelant -[setActiveTrackIDs:] sur GCKRemoteMediaClient et en transmettant les ID des pistes à activer. Par exemple, le code suivant active la piste de sous-titres créée ci-dessus.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Goal-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Pour désactiver une piste sur l'élément multimédia actuel, appelez -[setActiveTrackIDs:] sur GCKRemoteMediaClient avec un tableau vide ou "nil". Le code suivant désactive la piste de sous-titres.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Goal-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Appliquer un style aux pistes de texte

La classe GCKMediaTextTrackStyle encapsule les informations de style d'une piste de texte. Vous pouvez appliquer un style de piste à l'élément multimédia en cours de lecture en appelant -[GCKRemoteMediaClient setTextTrackStyle]. Le style de piste créé dans le code ci-dessous active le texte en rouge (FF) avec une opacité de 50 % (80) et définit une police à empattement.

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Goal-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 l'objet GCKRequest renvoyé pour suivre cette requête.

Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
Goal-C
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
  if (request == self.styleChangeRequest) {
    NSLog(@"Style update completed.");
    self.styleChangeRequest = nil;
  }
}

Pour en savoir plus, consultez la section Mises à jour de l'état ci-dessous. Les applications doivent permettre aux utilisateurs de modifier le style des pistes de texte à l'aide des paramètres fournis par le système ou par l'application elle-même. Un style par défaut est fourni (dans iOS 7 et versions ultérieures), que vous pouvez récupérer 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 de la réparation

Lorsque plusieurs expéditeurs sont connectés au même destinataire, il est important que chacun d'eux soit informé des modifications apportées au destinataire, même si celles-ci ont été effectuées par d'autres expéditeurs.

Pour vous assurer que l'expéditeur reçoit les mises à jour d'état du destinataire, votre application doit enregistrer un GCKRemoteMediaClientListener. Si le GCKMediaTextTrackStyle de l'élément multimédia actuel change, tous les expéditeurs connectés seront informés via les rappels -[remoteMediaClient:didUpdateMediaMetadata:] et -[remoteMediaClient:didUpdateMediaStatus:]. Dans ce cas, le SDK du récepteur ne vérifie pas si le nouveau style est différent du précédent et informe tous les expéditeurs connectés. Toutefois, si la liste des canaux actifs est mise à jour, seuls les -[remoteMediaClient:didUpdateMediaStatus:] des expéditeurs connectés seront avertis.

Répondre aux exigences CORS

Pour le streaming multimédia adaptatif, Google Cast nécessite la présence d'en-têtes CORS, mais même les flux multimédias mp4 simples nécessitent CORS s'ils incluent des pistes. Si vous souhaitez activer les pistes pour tous les contenus multimédias, vous devez activer le CORS pour vos flux de suivi et vos flux multimédias. Ainsi, si vous ne disposez pas d'en-têtes CORS pour votre fichier multimédia MP4 simple sur votre serveur et que vous ajoutez ensuite une piste de sous-titres simple, vous ne pourrez diffuser votre contenu multimédia que si vous mettez à jour votre serveur pour inclure l'en-tête CORS approprié. En outre, 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.