Ścieżka multimediów może być obiektem strumienia audio lub wideo bądź obiektem tekstowym (napisy lub podpis).
GCKMediaTrack
reprezentuje ścieżkę. Składa się z unikalnego identyfikatora liczbowego
takich jak identyfikator treści i tytuł. Instancja GCKMediaTrack
może być
utworzony 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
napisy (każdy w innym języku) lub kilka alternatywnych strumieni audio.
(dla różnych języków).
GCKMediaInformation
to klasa reprezentująca element multimedialny. Aby powiązać kolekcję
GCKMediaTrack
obiektów
z elementem multimedialnym, aplikacja powinna zaktualizować
właściwość mediaTracks
. Aplikacja musi utworzyć to powiązanie, zanim zostanie wczytana
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 1 ścieżkę powiązaną z elementem multimedialnym (po fragmencie
wczytano multimedia), wywołując funkcję -[setActiveTrackIDs:]
w
GCKRemoteMediaClient
.
i przekazywanie identyfikatorów ścieżek do aktywacji. Na przykład:
aktywuje 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:]
włączona
GCKRemoteMediaClient
.
z pustą tablicą lub nil. Poniższy kod wyłącza ścieżkę z napisami.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Zmienianie stylu ścieżek tekstowych
GCKMediaTextTrackStyle
klasa zawiera informacje o stylu ścieżki tekstowej. Styl ścieżki może być
zastosowano do obecnie odtwarzanego elementu multimedialnego, przez wywołanie
-[GCKRemoteMediaClient
setTextTrackStyle]
Styl ścieżki utworzony w poniższym kodzie zmienia kolor na czerwony (FF) z 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;
Za pomocą zwróconego
GCKRequest
obiekt dla
do śledzenia tego żądania.
// 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; } }
Sprawdź aktualizacje stanu.
poniżej. Aplikacje powinny pozwalać użytkownikom na zmienianie stylu tekstu
za pomocą ustawień w systemie lub w samej aplikacji.
Dostępny jest styl domyślny (w iOS 7 i nowszych), który można pobrać
za pomocą metody statycznej +[GCKMediaTextTrackStyle
createDefault]
.
Można zmieniać 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
Otrzymywanie aktualizacji stanu
Gdy wielu nadawców jest połączonych z tym samym odbiornikiem, ważne jest, aby każdy nadawca wiedział o zmianach u odbiorcy, nawet jeśli zmiany zostały zainicjowane od innych nadawców.
Aby mieć pewność, że nadawca otrzymuje aktualizacje stanu od odbiorcy, aplikacja powinna
zarejestruj
GCKRemoteMediaClientListener
Jeśli
GCKMediaTextTrackStyle
o bieżących zmianach w multimediach, wszyscy połączeni nadawcy otrzymają powiadomienie
zarówno za pomocą
-[remoteMediaClient:didUpdateMediaMetadata:]
oraz
Wywołania zwrotne: -[remoteMediaClient:didUpdateMediaStatus:]
. W tym przypadku parametr
Pakiet SDK odbiorcy nie sprawdza, czy nowy styl różni się od stylu
poprzedni i powiadamia o nich wszystkich połączonych nadawców. Jeśli jednak
lista aktywnych ścieżek zostanie zaktualizowana,
-[remoteMediaClient:didUpdateMediaStatus:]
w połączonych nadawcach będzie
powiadomienia.
Spełnij wymagania CORS
Aby korzystać z adaptacyjnego strumieniowego przesyłania multimediów, Google Cast wymaga obecności nagłówków CORS, ale nawet proste strumienie MP4 wymagają CORS, jeśli zawierają utwory. Jeśli Jeśli chcesz włączyć ścieżki dla dowolnych multimediów, musisz włączyć CORS dla obu strumienie i multimedia. Jeśli więc nie masz dostępnych nagłówków CORS do prostego formatu mp4 na serwerze, a następnie dodać proste napisy śledź, nie będzie można przesyłać strumieniowo multimediów, dopóki nie zaktualizujesz serwera , aby uwzględnić odpowiedni nagłówek CORS. Dodatkowo musisz zezwolić na co najmniej następujące nagłówki: Content-Type, Accept-Encoding i Range. Pamiętaj, że parametr ostatnie dwa nagłówki to dodatkowe nagłówki, które wcześniej mogły nie być potrzebne.