Utilizzo delle tracce multimediali

Una traccia multimediale può essere un oggetto di stream audio o video oppure un oggetto di testo (sottotitoli o sottotitoli codificati).

Un oggetto GCKMediaTrack rappresenta una rotta. È composto da un identificatore numerico univoco e altri attributi, come l'ID contenuti e il titolo. Un'istanza GCKMediaTrack può essere creata come segue:

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 (ciascuno per una lingua diversa) o più stream 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 sua proprietà mediaTracks. L'app deve creare questa associazione prima di caricare i contenuti multimediali sul destinatario, come indicato nel codice seguente:

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 dell'elemento multimediale) chiamando -[setActiveTrackIDs:] su GCKRemoteMediaClient e trasmettendo gli ID delle tracce da attivare. Ad esempio, il codice seguente attiva la traccia di sottotitoli creata in precedenza.

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 nullo. Il seguente codice disattiva la traccia dei sottotitoli.

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

Applicare uno stile alle tracce di testo

La classe GCKMediaTextTrackStyle racchiude informazioni sullo stile di una traccia di testo. Per applicare uno stile della traccia all'elemento multimediale attualmente in riproduzione, chiama -[GCKRemoteMediaClient setTextTrackStyle]. Lo stile della traccia creato nel codice riportato di seguito diventa rosso (FF) del testo con un'opacità del 50% (80) e imposta 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;
  }
}

Consulta la sezione Aggiornamenti dello stato di seguito per ulteriori informazioni. Le app devono consentire agli utenti di aggiornare lo stile delle tracce di testo utilizzando le impostazioni fornite dal sistema o dall'app stessa. È disponibile uno stile predefinito (in iOS 7 e versioni successive), che può essere recuperato tramite il metodo statico +[GCKMediaTextTrackStyle createDefault]. I seguenti elementi di stile delle tracce di testo possono essere modificati:

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

Ricevi aggiornamenti sullo stato

Quando più mittenti sono connessi allo stesso destinatario, è importante che ciascun mittente sia a conoscenza delle modifiche sul destinatario anche se tali modifiche sono state avviate da altri mittenti.

Per assicurarti che il mittente riceva gli aggiornamenti di stato dal destinatario, la tua app deve registrare un GCKRemoteMediaClientListener. Se il valore GCKMediaTextTrackStyle dei contenuti multimediali correnti cambia, tutti i mittenti connessi riceveranno una notifica tramite i callback -[remoteMediaClient:didUpdateMediaMetadata:] e -[remoteMediaClient:didUpdateMediaStatus:]. In questo caso, l'SDK del destinatario non verifica se il nuovo stile è diverso da quello precedente e avvisa comunque tutti i mittenti connessi. Se, tuttavia, l'elenco dei canali attivi viene aggiornato, solo il -[remoteMediaClient:didUpdateMediaStatus:] nei mittenti connessi riceverà una notifica.

Soddisfa i requisiti CORS

Per lo streaming multimediale adattivo, Google Cast richiede la presenza di intestazioni CORS, ma anche gli stream multimediali mp4 semplici richiedono la tecnologia CORS se includono Track. Se desideri abilitare le tracce per qualsiasi supporto multimediale, devi abilitare CORS sia per i flussi di tracce che per quelli multimediali. Pertanto, se sul server non sono disponibili intestazioni CORS per i contenuti mp4 semplici e poi aggiungi una semplice traccia di sottotitoli, non potrai trasmettere in streaming i tuoi contenuti multimediali a meno che 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 potrebbero non essere state necessarie in precedenza.