Medien-Tracks verwenden

Ein Medientrack kann ein Audio- oder Videostreamobjekt oder ein Textobjekt (Untertitel) sein.

Ein GCKMediaTrack-Objekt steht für einen Track. Sie besteht aus einer eindeutigen numerischen Kennzeichnung und anderen Attributen wie einer Content-ID und einem Titel. Eine GCKMediaTrack-Instanz kann so erstellt werden:

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];

Ein Medienelement kann mehrere Tracks haben. Zum Beispiel kann es mehrere Untertitel (jeweils für eine andere Sprache) oder mehrere alternative Audiostreams (für verschiedene Sprachen) haben. GCKMediaInformation ist die Klasse, die ein Medienelement darstellt. Wenn Sie eine Sammlung von GCKMediaTrack-Objekten mit einem Medienelement verknüpfen möchten, muss Ihre App das Attribut mediaTracks aktualisieren. Ihre App muss diese Verknüpfung herstellen, bevor sie die Medien wie im folgenden Code in den Empfänger lädt:

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];

Aktivieren Sie einen oder mehrere Tracks, die mit dem Medienelement verknüpft wurden (nach dem Laden des Mediums), indem Sie -[setActiveTrackIDs:] für GCKRemoteMediaClient aufrufen und die IDs der zu aktivierenden Tracks übergeben. Mit dem folgenden Code wird beispielsweise der oben erstellte Untertiteltrack aktiviert.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Wenn Sie einen Track des aktuellen Medienelements deaktivieren möchten, rufen Sie -[setActiveTrackIDs:] für GCKRemoteMediaClient mit einem leeren Array oder mit null auf. Mit dem folgenden Code wird der Untertiteltrack deaktiviert.

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Texttracks gestalten

Die Klasse GCKMediaTextTrackStyle kapselt die Stilinformationen eines Text-Tracks. Durch Aufrufen von -[GCKRemoteMediaClient setTextTrackStyle] kann ein Track-Stil auf das aktuell wiedergegebene Medienelement angewendet werden. Der im folgenden Code erstellte Spurstil ändert den Text bei einer Deckkraft von 50 % (80) rot (FF) und legt eine Serifenschrift fest.

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;

Sie können das zurückgegebene GCKRequest-Objekt zum Tracking dieser Anfrage verwenden.

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;
  }
}

Weitere Informationen finden Sie unter Statusaktualisierungen. Bei Apps sollten Nutzer den Stil von Textspuren entweder über die vom System vorgegebenen Einstellungen oder von der App selbst aktualisieren können. In iOS 7 und höher ist ein Standardstil angegeben, der über die statische Methode +[GCKMediaTextTrackStyle createDefault] abgerufen werden kann. Die folgenden Text-Track-Stilelemente können geändert werden:

  • Farbe und Deckkraft des Vordergrunds (Text)
  • Farbe und Transparenz des Hintergrunds
  • Rahmentyp
  • Rahmenfarbe
  • Schriftskala
  • Schriftfamilie
  • Schriftart

Statusupdates erhalten

Wenn mehrere Sender mit demselben Empfänger verbunden sind, ist es wichtig, dass jeder Sender über die Änderungen auf dem Empfänger informiert ist, auch wenn diese Änderungen von anderen Absendern initiiert wurden.

Damit der Absender Statusaktualisierungen vom Empfänger erhält, sollte Ihre Anwendung ein GCKRemoteMediaClientListener registrieren. Wenn sich der GCKMediaTextTrackStyle der aktuellen Medien ändert, werden alle verbundenen Absender sowohl über den -[remoteMediaClient:didUpdateMediaMetadata:]- als auch über den -[remoteMediaClient:didUpdateMediaStatus:]-Callback benachrichtigt. In diesem Fall überprüft das Receiver SDK nicht, ob sich der neue Stil vom vorherigen unterscheidet, und benachrichtigt alle verbundenen Absender. Wenn jedoch die Liste der aktiven Tracks aktualisiert wird, werden nur die -[remoteMediaClient:didUpdateMediaStatus:] in verbundenen Absendern benachrichtigt.

CORS-Anforderungen erfüllen

Für adaptives Mediastreaming sind für Google Cast CORS-Header erforderlich, aber auch für einfache MP4-Medienstreams ist CORS erforderlich, wenn sie Tracks enthalten. Wenn Sie Tracks für Medien aktivieren möchten, müssen Sie CORS sowohl für Ihre Track- als auch für Ihre Medienstreams aktivieren. Wenn also auf Ihrem Server keine CORS-Header für Ihre einfachen MP4-Medien zur Verfügung stehen und Sie dann eine einfache Untertitelspur hinzufügen, können Sie Ihre Medien erst streamen, wenn Sie Ihren Server so aktualisieren, dass er den entsprechenden CORS-Header enthält. Außerdem müssen Sie mindestens die folgenden Header zulassen: Content-Type, Accept-Encoding und Range. Die letzten beiden Header sind zusätzliche Header, die Sie möglicherweise zuvor nicht benötigt haben.