Utilizzo delle tracce multimediali

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

Un GCKMediaTrack rappresenta una traccia. È composto da un identificatore numerico univoco e altri quali Content ID e il titolo. Un'istanza GCKMediaTrack può essere creato come segue:

Swift
di Gemini Advanced.
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)
Obiettivo-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ù stream audio alternativi (per lingue diverse). GCKMediaInformation è la classe che rappresenta un elemento multimediale. Per associare una raccolta di GCKMediaTrack oggetti con un elemento multimediale, l'app dovrebbe aggiornare mediaTracks proprietà. L'app deve creare questa associazione prima di caricarsi il contenuto multimediale al destinatario, come nel seguente codice:

Swift
di Gemini Advanced.
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()
Obiettivo-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 tag contenuti multimediali caricati) richiamando -[setActiveTrackIDs:] GCKRemoteMediaClient e passando gli ID delle tracce da attivare. Ad esempio, attiva la traccia di sottotitoli creata sopra.

Swift
di Gemini Advanced.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Obiettivo-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

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

Swift
di Gemini Advanced.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Obiettivo-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Stili delle tracce di testo

La GCKMediaTextTrackStyle include le informazioni di stile di una traccia di testo. Uno stile di traccia può essere applicata all'elemento multimediale attualmente in riproduzione richiamando -[GCKRemoteMediaClient setTextTrackStyle] Lo stile della traccia creato nel codice seguente diventa rosso per il testo (FF) con un'opacità del 50% (80) e imposta un carattere Serif.

Swift
di Gemini Advanced.
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Obiettivo-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 il valore restituito Oggetto GCKRequest per il monitoraggio della richiesta.

Swift
di Gemini Advanced.
// MARK: - GCKRequestDelegate

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

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

Consulta gli Aggiornamenti di stato di seguito per ulteriori informazioni. Le app devono consentire agli utenti di aggiornare lo stile del testo tramite le impostazioni fornite dal sistema o dall'app stessa. È disponibile uno stile predefinito (in iOS 7 e versioni successive), che è possibile recuperare tramite il metodo statico +[GCKMediaTextTrackStyle createDefault]. Puoi modificare i seguenti elementi dello stile della traccia di testo:

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

Ricevi aggiornamenti sullo stato

Quando più mittenti sono connessi allo stesso destinatario, è importante affinché ciascun mittente sia a conoscenza dei cambiamenti per il destinatario, anche se modifiche sono state avviate da altri mittenti.

Per assicurarti che il mittente riceva gli aggiornamenti sullo stato dal destinatario, la tua app deve registra un GCKRemoteMediaClientListener Se GCKMediaTextTrackStyle delle modifiche dei contenuti multimediali correnti, tutti i mittenti collegati riceveranno una notifica tramite -[remoteMediaClient:didUpdateMediaMetadata:] e -[remoteMediaClient:didUpdateMediaStatus:] richiamate. In questo caso, L'SDK ricevitore non verifica se il nuovo stile è diverso dalla precedente e avvisa tutti i mittenti collegati indipendentemente. Se, invece, l'elenco dei canali attivi viene aggiornato, solo Verrà eseguita la migrazione di -[remoteMediaClient:didUpdateMediaStatus:] dei mittenti connessi notificato.

Soddisfa i requisiti CORS

Per lo streaming di contenuti multimediali adattivi, Google Cast richiede la presenza di intestazioni CORS, ma anche i semplici stream multimediali mp4 richiedono CORS se includono tracce. Se Se vuoi attivare Track per tutti i contenuti multimediali, devi attivare CORS per entrambi i canali e i tuoi stream multimediali. Pertanto, se non disponi di intestazioni CORS per i tuoi semplici contenuti mp4 sul server e poi aggiungi un semplice sottotitolo non potrai trasmettere in streaming i tuoi contenuti multimediali se non aggiorni il server per 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 bisogno in precedenza.