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:
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];
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:
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];
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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
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;
Sie können das zurückgegebene GCKRequest-Objekt verwenden, um diese Anfrage nachzuverfolgen.
// 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; } }
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.