Uma faixa de mídia pode ser um objeto de stream de áudio ou vídeo ou um objeto de texto (subtítulo ou legenda).
Uma GCKMediaTrack
representa uma trilha. Ele consiste em um identificador numérico único e outros
atributos, como ID do conteúdo e título. Uma instância GCKMediaTrack
pode ser
criado da seguinte forma:
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, pode ter várias
legendas (cada um para um idioma diferente) ou vários streams de áudio alternativos
(para idiomas diferentes).
GCKMediaInformation
é a classe que representa um item de mídia. Para associar uma coleção de
Objetos GCKMediaTrack
com um item de mídia, seu app deve atualizar
propriedade mediaTracks
. O app precisa fazer esta associação antes do carregamento
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];
Ativa uma ou mais faixas que foram associadas ao item de mídia (após o
mídia é carregada) chamando -[setActiveTrackIDs:]
no
GCKRemoteMediaClient
e passando os IDs das faixas a serem ativadas. Por exemplo, os seguintes
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:]
ativado
GCKRemoteMediaClient
com uma matriz vazia ou nulo. O código a seguir desativa a faixa de legendas.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];
Estilizar faixas de texto
A
GCKMediaTextTrackStyle
encapsula as informações de estilo de uma faixa de texto. Um estilo de faixa pode ser
aplicada ao item de mídia em reprodução no momento, chamando
-[GCKRemoteMediaClient
setTextTrackStyle]
O estilo de faixa criado no código abaixo fica com o texto vermelho (FF) com 50% de opacidade
(80) e define uma fonte 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;
É possível usar o
Objeto GCKRequest
para
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; } }
Consulte as atualizações de status.
abaixo para mais informações. Os apps precisam permitir que os usuários atualizem o estilo de texto.
faixas, seja usando as configurações fornecidas pelo sistema ou pelo próprio aplicativo.
Há um estilo padrão fornecido (no iOS 7 e posterior), que pode ser recuperado
usando o método estático +[GCKMediaTextTrackStyle
createDefault]
.
Os seguintes elementos de estilo da faixa de texto podem ser alterados:
- Cor e opacidade do primeiro plano (texto)
- Cor e opacidade de segundo plano
- Tipo de borda
- Cor da borda
- Escala da fonte
- Família de fontes
- Estilo da fonte
Receber atualizações de status
Quando vários remetentes estão conectados ao mesmo destinatário, é importante que cada remetente esteja ciente das alterações no destinatário, mesmo que mudanças foram iniciadas por outros remetentes.
Para garantir que o remetente receba atualizações de status do destinatário, o app precisa
registrar um
GCKRemoteMediaClientListener
Se o
GCKMediaTextTrackStyle
das alterações de mídia atuais, todos os remetentes conectados serão notificados
por meio do
-[remoteMediaClient:didUpdateMediaMetadata:]
e o
Callbacks -[remoteMediaClient:didUpdateMediaStatus:]
. Nesse caso, o
O SDK do receptor não verifica se o novo estilo é diferente do
a anterior e notifica todos os remetentes conectados. Se, no entanto,
a lista de faixas ativas será atualizada,
-[remoteMediaClient:didUpdateMediaStatus:]
dos remetentes conectados serão
notificado.
Atender aos requisitos do CORS
Para o streaming de mídia adaptável, o Google Cast exige a presença de cabeçalhos CORS, mas até mesmo fluxos de mídia mp4 simples exigirão CORS se incluírem faixas. Se você quiser ativar as trilhas para qualquer mídia, ative o CORS para a faixa streams e de mídia. Portanto, se você não tiver cabeçalhos CORS disponíveis para sua mídia mp4 simples no servidor. Depois, você adiciona um subtítulo não será possível transmitir a mídia, a menos que você atualize o servidor incluir o cabeçalho CORS apropriado. Além disso, é preciso permitir pelo menos os seguintes cabeçalhos: Content-Type, Accept-Encoding e Range. Observe que o os dois últimos cabeçalhos são cabeçalhos adicionais que você pode não ter necessário anteriormente.