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:
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];
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:
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];
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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[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.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[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.
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;
Puedes usar los valores de
objeto GCKRequest
para
el seguimiento de esta solicitud.
// 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; } }
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.