Uma faixa de mídia pode ser um objeto de stream de áudio ou vídeo ou um objeto de texto (legenda ou descrição).
Um objeto GCKMediaTrack
representa uma faixa. Ele consiste em um identificador numérico exclusivo e outros atributos, como um ID e um título de conteúdo. Uma instância GCKMediaTrack pode ser
criada da seguinte maneira:
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];
Um item de mídia pode ter várias faixas. Por exemplo, ele pode ter várias legendas (cada uma para um idioma diferente) ou vários fluxos de áudio alternativos (para idiomas diferentes).
GCKMediaInformation
é a classe que representa um item de mídia. Para associar uma coleção de
objetos GCKMediaTrack
a um item de mídia, seu app precisa atualizar a propriedade
mediaTracks. O app precisa fazer essa associação antes de carregar a mídia para o receptor, como no código a seguir:
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];
Ative uma ou mais faixas associadas ao item de mídia (depois que a mídia for carregada) chamando -[setActiveTrackIDs:] em GCKRemoteMediaClient e transmitindo os IDs das faixas a serem ativadas. Por exemplo, o código a seguir
ativa a faixa de legendas criada acima.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];
Para desativar uma faixa no item de mídia atual, chame
-[setActiveTrackIDs:] em
GCKRemoteMediaClient
com uma matriz vazia ou nula. O código a seguir desativa a faixa de legendas.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Estilizar faixas de texto
A classe
GCKMediaTextTrackStyle
encapsula as informações de estilo de uma faixa de texto. Um estilo de faixa pode ser
aplicado ao item de mídia em reprodução chamando
-[GCKRemoteMediaClient
setTextTrackStyle].
O estilo de faixa criado no código abaixo deixa o texto vermelho (FF) com 50% de opacidade (80) e define uma fonte serifada.
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;
Você pode usar o objeto GCKRequest retornado para rastrear essa solicitação.
// 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; } }
Confira Atualizações de status
abaixo para mais informações. Os apps precisam permitir que os usuários atualizem o estilo das faixas de texto usando as configurações fornecidas pelo sistema ou pelo próprio app.
Há um estilo padrão fornecido, que pode ser recuperado
pelo método estático +[GCKMediaTextTrackStyle
createDefault].
É possível mudar os seguintes elementos de estilo da faixa de texto:
- Cor e opacidade do primeiro plano (texto)
- Cor e opacidade de segundo plano
- Tipo de borda
- Cor da borda
- Ajuste da fonte
- Família de fontes
- Estilo da fonte
Receber atualizações de status
Quando vários remetentes estão conectados ao mesmo receptor, é importante que cada um deles esteja ciente das mudanças no receptor, mesmo que elas tenham sido iniciadas por outros remetentes.
Para garantir que o remetente receba atualizações de status do destinatário, seu app precisa
registrar um
GCKRemoteMediaClientListener.
Se o
GCKMediaTextTrackStyle
da mídia atual mudar, todos os remetentes conectados serão notificados
pelos callbacks
-[remoteMediaClient:didUpdateMediaMetadata:] e
-[remoteMediaClient:didUpdateMediaStatus:]. Nesse caso, o
SDK do receptor não verifica se o novo estilo é diferente do
anterior e notifica todos os remetentes conectados, independente disso. No entanto, se a lista de faixas ativas for atualizada, apenas o -[remoteMediaClient:didUpdateMediaStatus:] nos remetentes conectados será notificado.
Atender aos requisitos do CORS
Para streaming de mídia adaptável, o Google Cast exige a presença de cabeçalhos CORS, mas até mesmo streams de mídia mp4 simples exigem CORS se incluírem faixas. Se você quiser ativar faixas para qualquer mídia, habilite o CORS para os fluxos de faixas e de mídia. Portanto, se você não tiver cabeçalhos CORS disponíveis para sua mídia mp4 simples no servidor e adicionar uma faixa de legenda simples, não será possível transmitir a mídia, a menos que você atualize o servidor para incluir o cabeçalho CORS adequado. Além disso, é necessário permitir pelo menos os seguintes cabeçalhos: "Content-Type", "Accept-Encoding" e "Range". Os dois últimos cabeçalhos são adicionais e talvez não tenham sido necessários antes.