Ścieżka multimediów może być obiektem strumienia audio lub wideo albo obiektem tekstowym (napisem).
Obiekt GCKMediaTrack
reprezentuje ścieżkę. Składa się z unikalnego identyfikatora liczbowego i innych atrybutów, np. identyfikatora treści i tytułu. Instancję GCKMediaTrack
można utworzyć w następujący sposób:
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];
Element multimedialny może mieć wiele ścieżek, na przykład może mieć wiele napisów (każdy w innym języku) lub wiele alternatywnych strumieni audio (dla różnych języków).
GCKMediaInformation
to klasa reprezentująca element multimedialny. Aby powiązać kolekcję obiektów GCKMediaTrack
z elementem multimedialnym, aplikacja powinna zaktualizować swoją właściwość mediaTracks
. Aplikacja musi utworzyć to powiązanie, zanim wczyta multimedia do odbiornika, jak w tym kodzie:
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];
Aktywuj co najmniej jedną ścieżkę powiązaną z elementem multimedialnym (po wczytaniu multimediów), wywołując metodę -[setActiveTrackIDs:]
na urządzeniu GCKRemoteMediaClient
i przekazując identyfikatory ścieżek do aktywacji. Poniższy kod aktywuje na przykład utworzoną powyżej ścieżkę z napisami.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Aby dezaktywować ścieżkę w bieżącym elemencie multimedialnym, wywołaj -[setActiveTrackIDs:]
na GCKRemoteMediaClient
z pustą tablicą lub wartością nil. Poniższy kod wyłącza ścieżkę z napisami.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Stylizowanie ścieżek tekstowych
Klasa GCKMediaTextTrackStyle
zawiera informacje o stylu ścieżki tekstowej. Styl ścieżki można zastosować do aktualnie odtwarzanego elementu multimedialnego, wywołując metodę -[GCKRemoteMediaClient
setTextTrackStyle]
.
Styl ścieżki utworzony w kodzie poniżej zmienia kolor tekstu na czerwony (FF) przy przezroczystości 50% (80) i ustawia czcionkę szeryfową.
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;
Do śledzenia tego żądania możesz użyć zwróconego obiektu GCKRequest
.
// 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; } }
Więcej informacji znajdziesz w sekcji Aktualizacje stanu poniżej. Aplikacje powinny umożliwiać użytkownikom aktualizowanie stylu ścieżek tekstowych za pomocą ustawień systemu lub samej aplikacji.
Dostępny jest domyślny styl (na iOS 7 i nowszych), który można pobrać za pomocą metody statycznej +[GCKMediaTextTrackStyle
createDefault]
.
Można zmienić następujące elementy stylu ścieżki tekstowej:
- Kolor i przezroczystość pierwszego planu (tekstu)
- kolor i przezroczystość tła;
- Typ krawędzi
- Kolor krawędzi
- Skala czcionki
- Rodzina czcionek
- Styl czcionki
Odbieraj aktualizacje stanu
Jeśli wielu nadawców jest połączonych z tym samym odbiorcą, każdy z nich powinien wiedzieć o zmianach u odbiorcy, nawet jeśli te zmiany zostały zainicjowane przez innych nadawców.
Aby mieć pewność, że nadawca otrzymywał aktualizacje stanu od odbiorcy, Twoja aplikacja powinna zarejestrować GCKRemoteMediaClientListener
.
Jeśli GCKMediaTextTrackStyle
bieżących multimediów zmieni się, wszyscy połączeni nadawcy zostaną powiadomieni zarówno przez wywołania zwrotne -[remoteMediaClient:didUpdateMediaMetadata:]
, jak i -[remoteMediaClient:didUpdateMediaStatus:]
. W takim przypadku pakiet SDK odbiorcy nie sprawdza, czy nowy styl jest inny niż poprzedni, i powiadamia o tym wszystkich połączonych nadawców. Jeśli jednak lista aktywnych ścieżek zostanie zaktualizowana, powiadomienia otrzymają tylko -[remoteMediaClient:didUpdateMediaStatus:]
u połączonych nadawców.
Spełniają wymagania CORS
Do adaptacyjnego streamingu multimediów Google Cast wymaga nagłówków CORS, ale nawet proste strumienie mp4 wymagają CORS, jeśli zawierają ścieżki. Jeśli chcesz włączyć ścieżki w przypadku jakichkolwiek multimediów, musisz włączyć CORS zarówno w przypadku strumieni ścieżek, jak i strumieni multimediów. Jeśli więc nie masz na serwerze nagłówków CORS dla prostych multimediów w formacie mp4, a potem dodasz prostą ścieżkę napisów, przesyłanie strumieniowe multimediów nie będzie możliwe, chyba że zaktualizujesz serwer, dodając odpowiedni nagłówek CORS. Dodatkowo musisz zezwolić na przynajmniej te nagłówki: Content-Type, Accept-Encoding i Range. Pamiętaj, że ostatnie 2 nagłówki to dodatkowe nagłówki, które wcześniej mogły nie być potrzebne.