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:
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)
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:
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()
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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
let textTrackStyle = GCKMediaTextTrackStyle.createDefault() textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080") textTrackStyle.fontFamily = "serif" styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle) styleChangeRequest?.delegate = self
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.
// MARK: - GCKRequestDelegate func requestDidComplete(_ request: GCKRequest) { if request == styleChangeRequest { print("Style update completed.") styleChangeRequest = nil } }
#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.