Utilizzo delle tracce multimediali

Una traccia multimediale può essere un oggetto flusso audio o video oppure un oggetto di testo (sottotitolo o didascalia).

Un oggetto GCKMediaTrack rappresenta una traccia. È composto da un identificatore numerico univoco e da altri attributi, come un ID contenuto e un titolo. Un'istanza GCKMediaTrack può essere creata nel seguente modo:

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)
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 elemento multimediale può avere più tracce; ad esempio, può avere più sottotitoli (ognuno per una lingua diversa) o più flussi audio alternativi (per lingue diverse). GCKMediaInformation è la classe che rappresenta un elemento multimediale. Per associare una raccolta di oggetti GCKMediaTrack a un elemento multimediale, la tua app deve aggiornare la proprietà mediaTracks. La tua app deve effettuare questa associazione prima di caricare i contenuti multimediali sul ricevitore, come nel seguente codice:

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()
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];

Attiva una o più tracce associate all'elemento multimediale (dopo il caricamento del contenuto multimediale) chiamando -[setActiveTrackIDs:] su GCKRemoteMediaClient e passando gli ID delle tracce da attivare. Ad esempio, il seguente codice attiva la traccia dei sottotitoli codificati creata sopra.

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

Per disattivare una traccia nell'elemento multimediale corrente, chiama -[setActiveTrackIDs:] su GCKRemoteMediaClient con un array vuoto o nil. Il codice seguente disattiva la traccia dei sottotitoli codificati.

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

Personalizzare lo stile delle tracce di testo

La classe GCKMediaTextTrackStyle incapsula le informazioni di stile di una traccia di testo. Uno stile di traccia può essere applicato all'elemento multimediale in riproduzione chiamando -[GCKRemoteMediaClient setTextTrackStyle]. Lo stile della traccia creato nel codice riportato di seguito imposta il testo in rosso (FF) con un'opacità del 50% (80) e un carattere serif.

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
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;

Puoi utilizzare l'oggetto GCKRequest restituito per monitorare questa richiesta.

Swift
// MARK: - GCKRequestDelegate

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

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

Per saperne di più, consulta la sezione Aggiornamenti di stato riportata di seguito. Le app devono consentire agli utenti di aggiornare lo stile delle tracce di testo, utilizzando le impostazioni fornite dal sistema o dall'app stessa. Viene fornito uno stile predefinito, che può essere recuperato tramite il metodo statico +[GCKMediaTextTrackStyle createDefault]. È possibile modificare i seguenti elementi di stile delle tracce di testo:

  • Colore e opacità del primo piano (testo)
  • Colore dello sfondo e opacità
  • Tipo di bordo
  • Colore bordo
  • Scala del carattere
  • Famiglia di caratteri
  • Stile carattere

Ricevere aggiornamenti sullo stato

Quando più mittenti sono collegati allo stesso destinatario, è importante che ogni mittente sia a conoscenza delle modifiche apportate al destinatario anche se queste sono state avviate da altri mittenti.

Per assicurarti che il mittente riceva aggiornamenti sullo stato dal destinatario, la tua app deve registrare un GCKRemoteMediaClientListener. Se il GCKMediaTextTrackStyle del media attuale cambia, tutti i mittenti connessi riceveranno una notifica tramite i callback -[remoteMediaClient:didUpdateMediaMetadata:] e -[remoteMediaClient:didUpdateMediaStatus:]. In questo caso, l'SDK Receiver non verifica se il nuovo stile è diverso da quello precedente e invia comunque una notifica a tutti i mittenti connessi. Se, tuttavia, l'elenco delle tracce attive viene aggiornato, solo -[remoteMediaClient:didUpdateMediaStatus:] nei mittenti connessi verrà avvisato.

Soddisfare i requisiti CORS

Per lo streaming multimediale adattivo, Google Cast richiede la presenza di intestazioni CORS, ma anche i semplici stream multimediali mp4 richiedono CORS se includono tracce. Se vuoi attivare le tracce per qualsiasi contenuto multimediale, devi abilitare CORS sia per gli stream delle tracce sia per gli stream dei contenuti multimediali. Pertanto, se non hai intestazioni CORS disponibili per i tuoi semplici contenuti multimediali mp4 sul server e poi aggiungi una semplice traccia di sottotitoli codificati, non potrai riprodurre in streaming i tuoi contenuti multimediali a meno che tu non aggiorni il server in modo da includere l'intestazione CORS appropriata. Inoltre, devi consentire almeno le seguenti intestazioni: Content-Type, Accept-Encoding e Range. Tieni presente che le ultime due intestazioni sono intestazioni aggiuntive che potresti non aver utilizzato in precedenza.