Cómo usar pistas multimedia

Una pista multimedia puede ser un objeto de transmisión de video o audio, o un objeto de texto (subtítulos o leyenda).

Un objeto GCKMediaTrack el objeto representa un recorrido. Consiste en un identificador numérico único y otras atributos, como Content ID y title. Una instancia GCKMediaTrack puede ser se crea de la siguiente manera:

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

Un elemento multimedia puede tener varias pistas. por ejemplo, puede tener múltiples subtítulos (cada uno para un idioma diferente) o varias transmisiones de audio alternativas (para diferentes idiomas). GCKMediaInformation es la clase que representa un elemento multimedia. Para asociar un conjunto de Objetos GCKMediaTrack con un elemento multimedia, tu app deberá actualizar su mediaTracks. La app debe establecer esta asociación antes de cargarse el contenido multimedia al receptor, como en el siguiente código:

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

Activa una o más pistas asociadas con el elemento multimedia (después de se carga el contenido multimedia) llamando a -[setActiveTrackIDs:] en GCKRemoteMediaClient y pasa los IDs de los segmentos que se activarán. Por ejemplo, el siguiente código activa la pista de subtítulos que creaste anteriormente.

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

Para desactivar una pista en el elemento multimedia actual, llama a -[setActiveTrackIDs:] activado GCKRemoteMediaClient con un array vacío o nil. Con el siguiente código, se inhabilita la pista de subtítulos.

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

Aplica estilo a las pistas de texto

El GCKMediaTextTrackStyle encapsula la información de estilo de una pista de texto. El estilo de seguimiento puede ser al elemento multimedia que se está reproduciendo llamando -[GCKRemoteMediaClient setTextTrackStyle] El estilo de pista creado en el siguiente código cambia el color al rojo (FF) al 50% de opacidad (80) y establece una fuente Serif.

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;

Puedes usar los valores de objeto GCKRequest para el seguimiento de esta solicitud.

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

Consulta las Actualizaciones de estado. a continuación para obtener más información. Las apps deben permitir que los usuarios actualicen el estilo del texto mediante la configuración proporcionada por el sistema o por la app. Se proporciona un estilo predeterminado (en iOS 7 y versiones posteriores) que se puede recuperar a través del método estático +[GCKMediaTextTrackStyle createDefault]. Se pueden cambiar los siguientes elementos de estilo de pista de texto:

  • Color y opacidad en primer plano (texto)
  • Color de fondo y opacidad
  • Tipo de borde
  • Color de borde
  • Escala de fuente
  • Familia de fuentes
  • Estilo de fuente

Recibe actualizaciones de estado

Cuando se conectan varios remitentes al mismo receptor, es importante para que cada remitente esté al tanto de los cambios en el receptor, los cambios se iniciaron desde otros remitentes.

Para garantizar que el remitente reciba actualizaciones de estado del destinatario, tu app debe registrar un GCKRemoteMediaClientListener Si el botón GCKMediaTextTrackStyle de los cambios multimedia actuales, se notificará a todos los remitentes conectados a través de -[remoteMediaClient:didUpdateMediaMetadata:] y las Devoluciones de llamada de -[remoteMediaClient:didUpdateMediaStatus:]. En este caso, el El SDK de la app receptora no verifica si el estilo nuevo es diferente del anterior y notifica a todos los remitentes conectados independientemente. Sin embargo, si se actualiza la lista de segmentos activos, solo se Se realizará la siguiente acción: -[remoteMediaClient:didUpdateMediaStatus:] de remitentes conectados notificaciones.

Cumple con los requisitos de CORS

Para la transmisión multimedia adaptable, Google Cast requiere la presencia de encabezados CORS, pero incluso las transmisiones de medios mp4 simples requieren CORS si incluyen pistas. Si Si quieres habilitar las pistas para cualquier contenido multimedia, debes habilitar CORS para ambas pistas. y tus transmisiones de medios. Entonces, si no tienes encabezados de CORS disponibles, para tus archivos multimedia mp4 simples en tu servidor, y agregas un subtítulo simple no podrás transmitir tu contenido multimedia, a menos que actualices tu servidor incluir el encabezado CORS adecuado. Además, debes permitir al menos los siguientes encabezados: Content-Type, Accept-Encoding y Range. Ten en cuenta que Los últimos dos encabezados son encabezados adicionales que quizás no hayas necesitado anteriormente.