Korzystanie ze ścieżek multimedialnych

Ś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:

Swift
.
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)
.
Objective-C
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:

Swift
.
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()
.
Objective-C
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.

Swift
.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
.
Objective-C
[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.

Swift
.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
.
Objective-C
[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ą.

Swift
.
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
.
Objective-C
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.

Swift
.
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
.
Objective-C
#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.