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:
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 (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:
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 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.
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 nullo. Il seguente codice disattiva la traccia dei sottotitoli.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
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; } }
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.