Os aplicativos remetentes do Google Cast controlam a reprodução no dispositivo receptor enviando mensagens no formato JSON para o aplicativo receptor. Da mesma forma, o destinatário envia mensagens de volta ao remetente, também em JSON. As mensagens podem ser comandos do remetente que mudam o estado do player, respostas a esses comandos do destinatário ou estruturas de dados que descrevem a mídia para o aplicativo do destinatário.
De acordo com os Termos de Serviço adicionais para desenvolvedores do SDK do Google Cast, um aplicativo de mídia do Cast precisa usar essas mensagens, conforme definido aqui, para controlar a reprodução de mídia no receptor. Isso oferece ao app de mídia uma experiência do usuário consistente em todas as plataformas e garante que um aplicativo Cast seja compatível com casos de uso novos e futuros. Essas estruturas também oferecem suporte a dados personalizados, quando apropriado, e um aplicativo pode definir as próprias mensagens para comandos não compatíveis com o SDK.
O namespace das mensagens de reprodução de mídia é definido como urn:x-cast:com.google.cast.media.
Observação:as mensagens e estruturas nesta especificação têm um tamanho máximo implícito determinado pelo tamanho máximo de uma mensagem de transporte. Não há limite para campos individuais. O tamanho máximo da mensagem de transporte é de 64 KBytes.
Estruturas de dados de namespace comuns
Um superconjunto de estruturas de dados usadas por todos os artefatos do namespace de mídia é definido em um namespace comum.
Imagem
É a descrição de uma imagem, incluindo uma pequena quantidade de metadados para permitir que o aplicativo remetente escolha as imagens, dependendo de como elas serão renderizadas.
A altura e a largura são opcionais em apenas um item em uma matriz de imagens. Por exemplo, se um único item for retornado, eles serão opcionais. Se dois itens forem retornados, um deles precisará especificar uma altura e uma largura, mas o remetente poderá escolher a opção "padrão" se não gostar daquela transmitida com parâmetros específicos.
| Nome | Tipo | Descrição |
|---|---|---|
| url | URI | URI da imagem |
| height | número inteiro | opcional : altura da imagem. |
| width | número inteiro | opcional : largura da imagem. |
Volume
O volume do fluxo de mídia. Usado para efeitos de fade-in/fade-out no stream de mídia. Observação: o volume do sistema é alterado usando as APIs do remetente. O volume de stream não pode ser usado com o controle deslizante ou os botões de volume para controlar o volume do dispositivo. Pelo menos um dos seguintes parâmetros precisa ser transmitido para mudar o volume da transmissão.
| Nome | Tipo | Descrição |
|---|---|---|
| level | double | opcional : nível de volume atual da transmissão como um valor entre 0,0 e 1,0, em que 1,0 é o volume máximo. |
| silenciada | booleano | opcional Indica se o dispositivo Cast está sem som, independente do nível de volume. |
Estruturas de dados do namespace de mídia
Essas mensagens descrevem o estado do player de mídia. O namespace é urn:x-cast:com.google.cast.media.
MediaInformation
Essa estrutura de dados descreve um fluxo de mídia.
| Nome | Tipo | Descrição |
|---|---|---|
| contentId | string | Identificador específico do serviço do conteúdo carregado no momento pelo player de mídia. Essa é uma string de formato livre e específica do aplicativo. Na maioria dos casos, esse será o URL da mídia, mas o remetente pode transmitir uma string que o destinatário pode interpretar corretamente. Comprimento máximo: 1.000 |
| streamType | enum (string) |
Descreve o tipo de artefato de mídia como um dos seguintes:
|
| contentType | string | Tipo de conteúdo MIME da mídia em reprodução. |
| metadata | objeto | opcional O objeto de metadados de mídia, um dos seguintes: |
| duration | double | opcional Duração do stream em reprodução no momento em segundos |
| customData | objeto | Opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente ou destinatário. |
GenericMediaMetadata
Descreve um artefato de mídia genérico.
| Nome | Tipo | Descrição |
|---|---|---|
| metadataType | número inteiro | 0 (o único valor) |
| title | string | opcional Título descritivo do conteúdo. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| subtitle | string | opcional Subtítulo descritivo do conteúdo. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| imagens | Imagem[] | opcional Matriz de URLs para uma imagem associada ao conteúdo. O valor inicial do campo pode ser fornecido pelo remetente na mensagem Load. Deve fornecer tamanhos recomendados |
| releaseDate | string (ISO 8601) | Opcional : data e hora ISO 8601 em que o conteúdo foi lançado. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
MovieMediaMetadata
Descreve um artefato de mídia de filme.
| Nome | Tipo | Descrição |
|---|---|---|
| metadataType | número inteiro | 1 (o único valor) |
| title | string | opcional Título descritivo do conteúdo. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| subtitle | string | opcional Subtítulo descritivo do conteúdo. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| Studio | string | Opcional : estúdio que lançou o conteúdo. O player pode recuperar o estúdio de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| imagens | Imagem[] | opcional Matriz de URLs para uma imagem associada ao conteúdo. O valor inicial do campo pode ser fornecido pelo remetente na mensagem Load. Deve fornecer tamanhos recomendados |
| releaseDate | string (ISO 8601) | Opcional : data e hora ISO 8601 em que o conteúdo foi lançado. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
TvShowMediaMetadata
Descreve um artefato de mídia de episódio de programa de TV.
| Nome | Tipo | Descrição |
|---|---|---|
| metadataType | número inteiro | 2 (o único valor) |
| seriesTitle | string | opcional Título descritivo da série de TV. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| subtitle | string | opcional Subtítulo descritivo do episódio de TV. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| temporada | número inteiro | opcional Número da temporada do programa de TV |
| episódio | número inteiro | opcional Número do episódio (na temporada) do programa de TV |
| imagens | Imagem[] | opcional Matriz de URLs para uma imagem associada ao conteúdo. O valor inicial do campo pode ser fornecido pelo remetente na mensagem Load. Deve fornecer tamanhos recomendados |
| originalAirDate | string (ISO 8601) | opcional Data e hora ISO 8601 em que este episódio foi lançado. O player pode recuperar independently originalAirDate usando content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
MusicTrackMediaMetadata
Descreve um artefato de mídia de música.
| Nome | Tipo | Descrição |
|---|---|---|
| metadataType | número inteiro | 3 (o único valor) |
| albumName | string | opcional : álbum ou coleção de onde essa faixa foi extraída. O player pode recuperar o albumName de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| title | string | opcional Nome da faixa (por exemplo, título da música). O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| albumArtist | string | opcional Nome do artista associado ao álbum que contém essa música. O player pode recuperar albumArtist de forma independente usando content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| artist | string | opcional Nome do artista associado à faixa de mídia. O player pode recuperar o artista de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| Composer | string | opcional Nome do compositor associado à faixa de mídia. O player pode recuperar o compositor de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| trackNumber | número inteiro | opcional Número da faixa no álbum |
| discNumber | número inteiro | opcional Número do volume (por exemplo, um disco) do álbum. |
| imagens | Imagem[] | opcional Matriz de URLs para uma imagem associada ao conteúdo. O valor inicial do campo pode ser fornecido pelo remetente na mensagem Load. Deve fornecer tamanhos recomendados |
| releaseDate | string (ISO 8601) | Opcional : data e hora ISO 8601 em que o conteúdo foi lançado. O player pode recuperar releaseDate de forma independente usando content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
PhotoMediaMetadata
Descreve um artefato de mídia fotográfica.
| Nome | Tipo | Descrição |
|---|---|---|
| metadataType | número inteiro | 4 (o único valor) |
| title | string | opcional Título da fotografia. O player pode recuperar o título de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| artist | string | opcional Nome do fotógrafo. O player pode recuperar o artista de forma independente usando o content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
| local | string | opcional Local verbal onde a fotografia foi tirada, por exemplo, "Madri, Espanha". O player pode recuperar a localização de forma independente usando o content_id ou ela pode ser fornecida pelo remetente na mensagem Load. |
| latitude | double | opcional : valor de latitude geográfica do local onde a fotografia foi tirada. O player pode recuperar a latitude de forma independente usando o content_id ou ela pode ser fornecida pelo remetente na mensagem Load. |
| longitude | double | opcional Valor de longitude geográfica do local onde a fotografia foi tirada. O player pode recuperar a longitude de forma independente usando o content_id ou ela pode ser fornecida pelo remetente na mensagem Load. |
| width | número inteiro | opcional Largura da fotografia em pixels. O player pode recuperar a largura de forma independente usando o content_id ou ela pode ser fornecida pelo remetente na mensagem Load. |
| height | número inteiro | opcional Altura em pixels da fotografia. O player pode recuperar a altura de forma independente usando o content_id ou ela pode ser fornecida pelo remetente na mensagem Load. |
| creationDateTime | string (ISO 8601) | Opcional : data e hora ISO 8601 em que a foto foi tirada. O player pode recuperar creationDateTime de forma independente usando content_id ou ele pode ser fornecido pelo remetente na mensagem Load. |
MediaStatus
Descreve o status atual do artefato de mídia em relação à sessão.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID exclusivo da reprodução desta sessão específica. Esse ID é definido pelo receptor no LOAD e pode ser usado para identificar uma instância específica de uma reprodução. Por exemplo, duas reproduções de "Wish you were here" na mesma sessão teriam um mediaSessionId exclusivo. |
| media | MediaInformation | opcional (para mensagens de status) Descrição completa do conteúdo que está sendo reproduzido. Só será retornado em uma mensagem de status se o MediaInformation tiver mudado. |
| playbackRate | float | Indica se o tempo de mídia está progredindo e em qual taxa. Isso é independente do estado do player, já que o tempo de mídia pode parar em qualquer estado. 1,0 é o tempo normal, 0,5 é câmera lenta |
| playerState | enum (string) | Descreve o estado do player como um dos seguintes:
|
| idleReason | enum (string) | Opcional : se o playerState for IDLE e o motivo for conhecido, essa propriedade será fornecida. Se o player estiver IDLE porque acabou de ser iniciado, essa propriedade não será fornecida. Se o player estiver em qualquer outro estado, essa propriedade não deverá ser fornecida. Os seguintes valores se aplicam:
|
| currentTime | double | A posição atual do player de mídia desde o início do conteúdo, em segundos. Se for um conteúdo de transmissão ao vivo, esse campo vai representar o tempo em segundos desde o início do evento que deve ser conhecido pelo player. |
| supportedMediaCommands | flags | Flags que descrevem quais comandos de mídia o player de mídia aceita:
As combinações são descritas como somas. Por exemplo, Pause+Seek+StreamVolume+Mute == 15. |
| volume | Volume | Volume de streams |
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |
Comandos do remetente para o destinatário
Esses comandos controlam o player de mídia. Todos os objetos customData nas mensagens abaixo precisam ser opcionais. Ou seja, o receptor precisa degradar corretamente se os dados não forem transmitidos. Isso permite que apps genéricos de controle remoto funcionem corretamente.
Carregar
Carrega novo conteúdo no player de mídia.
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | LOAD (somente valor) |
| media | MediaInformation | Metadados (incluindo contentId) da mídia a ser carregada |
| autoplay | booleano | opcional (o padrão é "true"). Se o parâmetro de reprodução automática for especificado, o player de mídia vai começar a reproduzir o conteúdo quando ele for carregado. Mesmo que a reprodução automática não seja especificada, a implementação do player de mídia pode começar a reprodução imediatamente. Se a reprodução for iniciada, o estado do player na resposta será definido como "BUFFERING". Caso contrário, será "PAUSED". |
| currentTime | double | opcional Segundos desde o início do conteúdo. Se o conteúdo for ao vivo e a posição não for especificada, a transmissão vai começar na posição ao vivo. |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Invalid Player State Load Failed Load Cancelled |
Pausar
Pausa a reprodução do conteúdo atual. Aciona uma notificação de evento STATUS para todos os aplicativos remetentes.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID da sessão de mídia a ser pausada |
| requestId | número inteiro | ID da solicitação, usado para correlacionar solicitação/resposta. |
| type | string | PAUSAR (único valor) |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Estado do player inválido |
Procurar
Define a posição atual no stream. Aciona uma notificação de evento STATUS para todos os aplicativos remetentes. Se a posição fornecida estiver fora do intervalo de posições válidas para o conteúdo atual, o player deverá escolher uma posição válida o mais próxima possível da posição solicitada.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID da sessão de mídia em que a posição do stream é definida. |
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | SEEK (somente valor) |
| resumeState | enum (string) | opcional Se não estiver definido, o status da reprodução não vai mudar. Os seguintes valores se aplicam:
|
| currentTime | double | opcional Segundos desde o início do conteúdo. Se o conteúdo for ao vivo e a posição não for especificada, a transmissão vai começar na posição ao vivo. |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Estado do player inválido |
Parar
Interrompe a reprodução do conteúdo atual. Aciona uma notificação de evento STATUS para todos os aplicativos remetentes. Depois desse comando, o conteúdo não será mais carregado, e o mediaSessionId será invalidado.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID da sessão de mídia do conteúdo a ser interrompido |
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | STOP (somente valor) |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Estado do player inválido |
Reproduzir
Inicia a reprodução do conteúdo carregado com a chamada "load". A reprodução continua da posição de tempo atual.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID da sessão de mídia para o conteúdo a ser reproduzido. |
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | PLAY (somente valor) |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Estado do player inválido |
Ver status
Recupera o status da mídia.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | opcional ID da sessão de mídia da mídia para a qual o status precisa ser retornado. Se nenhum for fornecido, o status de todos os IDs de sessão de mídia será fornecido. |
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | GET_STATUS (somente valor) |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Mensagem MediaStatus para o remetente que a solicitou | Nenhum | Nenhum | Nenhum |
SetVolume
Define o volume do stream de mídia. Usado para efeitos de fade-in/fade-out no stream de mídia. (Observação: o volume do receptor é alterado usando o remetente da Web setVolume.) O volume de stream não pode ser usado com o controle deslizante ou os botões de volume para controlar o volume do dispositivo. Uma mudança no volume do stream não aciona nenhuma interface no receptor.
| Nome | Tipo | Descrição |
|---|---|---|
| mediaSessionId | número inteiro | ID da sessão de mídia da mídia em que o volume do stream foi alterado. |
| requestId | número inteiro | ID da solicitação para correlacionar solicitação e resposta. |
| type | string | VOLUME (somente valor) |
| volume | Volume | Volume de streams |
| customData | objeto | opcional : blob de dados específico do aplicativo definido pelo aplicativo remetente. |
| Resposta | Gatilhos | Transmissões | Erros |
|---|---|---|---|
| Nenhum | Mudança de estado do receptor | Uma mensagem de mudança de status da mídia | Estado do player inválido |
Mensagens do destinatário para o remetente
O receptor envia dois tipos de mensagens:
- Erros: mensagens unicast enviadas quando há uma resposta de erro a uma solicitação do remetente.
- Status: transmitir mensagens.
- Consequência de uma ação iniciada pelo remetente. Contém o requestId da solicitação que causou a mudança.
- Espontânea: por exemplo, devido a uma mudança acionada pelo aplicativo receptor. O RequestId será 0.
Erro: estado do player inválido
Enviado quando a solicitação do remetente não pode ser atendida porque o player não está em um estado válido. Por exemplo, se o aplicativo ainda não tiver criado um elemento de mídia.
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID da solicitação que gerou esse erro. |
| type | string | INVALID_PLAYER_STATE (somente valor) |
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |
Erro: falha ao carregar
Enviado quando a solicitação de carregamento falha. O estado do player será IDLE.
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID da solicitação que gerou esse erro. |
| type | string | LOAD_FAILED (único valor) |
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |
Erro: carregamento cancelado
Enviado quando a solicitação de carregamento foi cancelada (uma segunda solicitação de carregamento foi recebida).
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID da solicitação que gerou esse erro. |
| type | string | LOAD_CANCELLED (somente valor) |
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |
Erro: solicitação inválida
Enviado quando a solicitação é inválida (um tipo de solicitação desconhecido, por exemplo).
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID da solicitação que gerou esse erro. |
| type | string | INVALID_REQUEST (somente valor) |
| motivo | Enum (string) | Valores:
|
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |
Status da mídia
Enviado após uma mudança de estado ou uma solicitação de status de mídia. Somente os objetos MediaStatus que foram alterados ou solicitados serão enviados.
| Nome | Tipo | Descrição |
|---|---|---|
| requestId | número inteiro | ID usado para correlacionar essa resposta de status com a solicitação que a originou ou 0 se a mensagem de status for espontânea (não acionada por uma solicitação do remetente). Os aplicativos remetentes geram IDs de solicitação exclusivos selecionando um número aleatório e aumentando-o continuamente (não usam 0). |
| type | string | MEDIA_STATUS (somente valor) |
| status | MediaStatus[] | Matriz de objetos de status de mídia. OBSERVAÇÃO: o elemento de mídia em MediaStatus só será retornado se tiver mudado. |
| customData | objeto | opcional Blob de dados específico do aplicativo definido pelo aplicativo receptor. |