Como usar faixas de mídia

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:

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

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:

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

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.

Swift
.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[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.

Swift
.
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[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.

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;

É possível usar o Objeto GCKRequest para para rastrear essa solicitação.

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

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.