Medien-Tracks verwenden

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

GCKMediaTrack steht für einen Track. Sie besteht aus einer eindeutigen numerischen Kennung und anderen wie Content-ID und Titel. Eine GCKMediaTrack-Instanz kann wie folgt erstellt:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
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)
<ph type="x-smartling-placeholder">
</ph>
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 mehrere Untertitel (jeweils für eine andere Sprache) oder mehrere alternative Audiostreams (für verschiedene Sprachen). GCKMediaInformation ist die Klasse, die ein Medienelement darstellt. Um eine Sammlung von GCKMediaTrack Objekte mit einem Medienelement handelt, sollte Ihre App die mediaTracks. Ihre App muss diese Verknüpfung herstellen, bevor sie geladen wird die Medien an den Empfänger zu senden, wie im folgenden Code:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
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()
<ph type="x-smartling-placeholder">
</ph>
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 waren (nach dem Medien geladen werden, durch Aufrufen von -[setActiveTrackIDs:] am GCKRemoteMediaClient und die IDs der zu aktivierenden Titel übergeben. Beispiel: aktiviert den oben erstellten Untertiteltrack.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
<ph type="x-smartling-placeholder">
</ph>
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

Um einen Track im aktuellen Medienelement zu deaktivieren, rufst du auf. -[setActiveTrackIDs:] an GCKRemoteMediaClient mit einem leeren Array oder null. Der folgende Code deaktiviert den Untertiteltrack.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
<ph type="x-smartling-placeholder">
</ph>
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

Texttracks bearbeiten

Die GCKMediaTextTrackStyle kapselt die Stilinformationen eines Text-Tracks ein. Ein Track-Stil kann wird auf das aktuell wiedergegebene Medienelement angewendet, indem -[GCKRemoteMediaClient setTextTrackStyle] Der im folgenden Code erstellte Track-Stil wird Text rot (FF) mit 50% Deckkraft. (80) und legt eine Serifenschrift fest.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
<ph type="x-smartling-placeholder">
</ph>
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 den zurückgegebenen Objekt GCKRequest für Anfrage verfolgen.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Swift
// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
  if request == styleChangeRequest {
    print("Style update completed.")
    styleChangeRequest = nil
  }
}
<ph type="x-smartling-placeholder">
</ph>
Objective-C
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
  if (request == self.styleChangeRequest) {
    NSLog(@"Style update completed.");
    self.styleChangeRequest = nil;
  }
}

Siehe Statusupdates unten finden Sie weitere Informationen. Apps sollten es Nutzern ermöglichen, den Stil für Text zu aktualisieren entweder mithilfe der Systemeinstellungen oder der App selbst. In iOS 7 und höher steht ein Standardstil zur Verfügung, der abgerufen werden kann. mithilfe der statischen Methode +[GCKMediaTextTrackStyle createDefault]. Die folgenden Stilelemente für Texttracks können geändert werden:

  • Farbe und Deckkraft des Vordergrunds (Text)
  • Farbe und Transparenz des Hintergrunds
  • Rahmentyp
  • Rahmenfarbe
  • Schriftgröße
  • Schriftfamilie
  • Schriftart

Statusupdates erhalten

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

Damit Ihr Absender Statusupdates vom Empfänger erhält, sollte Ihre App registrieren GCKRemoteMediaClientListener Wenn die GCKMediaTextTrackStyle werden alle verbundenen Absender benachrichtigt über die -[remoteMediaClient:didUpdateMediaMetadata:] und die -[remoteMediaClient:didUpdateMediaStatus:]-Callbacks In diesem Fall Das Receiver SDK überprüft nicht, ob sich der neue Stil vom zurück und benachrichtigt alle verbundenen Absender trotzdem. Wenn jedoch wird die Liste der aktiven Tracks aktualisiert, -[remoteMediaClient:didUpdateMediaStatus:] in verbundenen Absendern wird benachrichtigt.

CORS-Anforderungen erfüllen

Für adaptives Medienstreaming erfordert Google Cast das Vorhandensein von CORS-Headern, aber auch für einfache MP4-Medien-Streams ist CORS erforderlich, wenn sie Titel enthalten. Wenn Sie Um Tracks für beliebige Medien zu aktivieren, müssen Sie CORS für beide Tracks aktivieren. und Ihre Mediastreams. Wenn keine CORS-Header verfügbar sind, für Ihre einfachen MP4-Medien auf Ihrem Server. Sie fügen dann eine einfache Unterüberschrift müssen Sie Ihren Server aktualisieren, um Ihre Medien zu streamen. um den entsprechenden CORS-Header einzufügen. Darüber hinaus müssen Sie mindestens folgenden Headern: Content-Type, Accept-Encoding und Range. Das Feld Letzte beiden Header sind zusätzliche Header, die Sie zuvor möglicherweise nicht benötigt hatten.