Medien-Tracks verwenden

Ein Mediatrack kann ein Audio- oder Videostream-Objekt oder ein Textobjekt (Untertitel) sein.

Ein GCKMediaTrack-Objekt stellt einen Track dar. Sie besteht aus einer eindeutigen numerischen Kennung und anderen Attributen wie einer Inhalts-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 Media-Element kann mehrere Tracks haben, z. B. mehrere Untertitel (jeweils für eine andere Sprache) oder mehrere alternative Audio-Streams (für verschiedene Sprachen). GCKMediaInformation ist die Klasse, die ein Media-Element darstellt. Wenn Sie eine Sammlung von GCKMediaTrack-Objekten mit einem Media-Element verknüpfen möchten, muss Ihre App die mediaTracks-Property aktualisieren. Ihre App muss diese Zuordnung vor dem Laden der Medien auf den Empfänger vornehmen, wie im folgenden Code:

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 dem Media-Element zugeordnet sind (nachdem die Media geladen wurden), indem Sie -[setActiveTrackIDs:] für GCKRemoteMediaClient aufrufen und die IDs der zu aktivierenden Tracks übergeben. Mit dem folgenden Code wird beispielsweise der oben erstellte Untertitel-Track aktiviert.

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

Wenn Sie einen Track für das aktuelle Media-Element deaktivieren möchten, rufen Sie -[setActiveTrackIDs:] für GCKRemoteMediaClient mit einem leeren Array oder „nil“ auf. Mit dem folgenden Code wird der Untertitel-Track deaktiviert.

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

Titelspuren formatieren

Die Klasse GCKMediaTextTrackStyle kapselt die Stilinformationen eines Text-Tracks. Ein Titelstil kann auf das aktuell wiedergegebene Media-Element angewendet werden, indem -[GCKRemoteMediaClient setTextTrackStyle] aufgerufen wird. Mit dem im Code unten erstellten Track-Stil wird Text mit 50% Deckkraft (80) rot (FF) dargestellt und eine Serifenschrift festgelegt.

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 verwenden, um diese Anfrage nachzuverfolgen.

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 unten unter Statusaktualisierungen. Apps sollten Nutzern ermöglichen, den Stil für Text-Tracks zu aktualisieren, entweder über die vom System bereitgestellten Einstellungen oder über die App selbst. Es gibt einen Standardstil, der über die statische Methode +[GCKMediaTextTrackStyle createDefault] abgerufen werden kann. Die folgenden Stilelemente für Text-Tracks können geändert werden:

  • Vordergrundfarbe (Text) und ‑deckkraft
  • Farbe und Transparenz des Hintergrunds
  • Rahmentyp
  • Rahmenfarbe
  • Schriftskala
  • Schriftfamilie
  • Schriftart

Statusaktualisierungen erhalten

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

Damit der Absender Statusaktualisierungen vom Empfänger erhält, muss Ihre App einen GCKRemoteMediaClientListener registrieren. Wenn sich die GCKMediaTextTrackStyle der aktuellen Medien ändert, werden alle verbundenen Absender über die Callbacks -[remoteMediaClient:didUpdateMediaMetadata:] und -[remoteMediaClient:didUpdateMediaStatus:] benachrichtigt. In diesem Fall prüft das Receiver SDK nicht, ob sich der neue Stil vom vorherigen unterscheidet, und benachrichtigt alle verbundenen Sender. Wenn die Liste der aktiven Titel aktualisiert wird, werden jedoch nur die -[remoteMediaClient:didUpdateMediaStatus:] in verbundenen Sendern benachrichtigt.

CORS-Anforderungen erfüllen

Für adaptives Media-Streaming sind in Google Cast CORS-Header erforderlich. Aber auch einfache MP4-Media-Streams benötigen CORS, 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 Media-Streams aktivieren. Wenn Sie also keine CORS-Header für Ihre einfachen MP4-Medien auf Ihrem Server haben und dann einen einfachen Untertitel-Track hinzufügen, können Sie Ihre Medien nicht streamen, es sei denn, Sie aktualisieren Ihren Server, um den entsprechenden CORS-Header einzufügen. 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 bisher nicht benötigt haben.