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:
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 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:
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 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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
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 zum Tracking dieser Anfrage verwenden.
// 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 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.