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:
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ù 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:
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 tag
contenuti multimediali caricati) richiamando -[setActiveTrackIDs:]
GCKRemoteMediaClient
e passando gli ID delle tracce da attivare. Ad esempio,
attiva la traccia di sottotitoli creata sopra.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
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 il valore restituito
Oggetto GCKRequest
per
il monitoraggio della 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; } }
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.