Приложения-отправители Google Cast управляют воспроизведением на устройстве-получателе, отправляя сообщения в формате JSON в приложение-получатель. Аналогично, получатель отправляет сообщения обратно отправителю, также в формате JSON. Сообщения могут быть командами отправителя, которые изменяют состояние проигрывателя, ответами на эти команды получателя или структурами данных, которые описывают медиа для приложения-получателя.
В соответствии с Дополнительными условиями использования Google Cast SDK для разработчиков приложение Cast Media должно использовать эти сообщения, как определено здесь, для управления воспроизведением мультимедиа на приемнике. Это обеспечивает единообразный пользовательский интерфейс мультимедийного приложения на разных платформах и гарантирует, что приложение Cast будет поддерживать новые и будущие варианты использования. Эти структуры также поддерживают пользовательские данные, где это необходимо, и приложение может определять свои собственные сообщения для команд, не поддерживаемых SDK.
Пространство имен для сообщений воспроизведения мультимедиа определяется как urn:x-cast:com.google.cast.media .
Примечание. Сообщения и структуры в этой спецификации имеют неявный максимальный размер, определяемый максимальным размером транспортного сообщения, ограничений для отдельных полей нет. Максимальный размер транспортного сообщения в настоящее время составляет 64 КБ.
Общие структуры данных пространства имен
Надмножество структур данных, используемых всеми артефактами пространства имен мультимедиа, определяется в общем пространстве имен.
Изображение
Это описание изображения, включающее небольшой объем метаданных, позволяющий приложению-отправителю выбирать изображения в зависимости от того, как оно будет их отображать.
Высота и ширина являются необязательными только для одного элемента массива изображений. Например, если возвращен один элемент, они не являются обязательными; если возвращено два элемента, один элемент должен указать высоту и ширину, но отправитель может выбрать вариант «по умолчанию», если ему не нравится вариант, переданный с определенными параметрами.
Имя | Тип | Описание |
---|---|---|
URL | URI | URI для изображения |
высота | целое число | опционально Высота изображения |
ширина | целое число | опционально Ширина изображения |
Объем
Громкость медиапотока. Используется для эффектов постепенного появления/затухания медиапотока. (Примечание: громкость системы изменяется с помощью API-интерфейсов отправителя.) Громкость потока нельзя использовать вместе с ползунком громкости или кнопками громкости для управления громкостью устройства. Для изменения громкости потока необходимо передать хотя бы один из следующих параметров.
Имя | Тип | Описание |
---|---|---|
уровень | двойной | необязательно Текущий уровень громкости потока в виде значения от 0,0 до 1,0, где 1,0 — максимальная громкость. |
приглушенный | логическое значение | необязательно. Отключен ли звук на устройстве Cast, независимо от уровня громкости. |
Структуры данных пространства имен мультимедиа
Эти сообщения описывают состояние медиаплеера. Пространство имен — urn:x-cast:com.google.cast.media .
СМИИнформация
Эта структура данных описывает медиапоток.
Имя | Тип | Описание |
---|---|---|
идентификатор контента | нить | Специфический для службы идентификатор контента, загружаемого в данный момент медиаплеером. Это строка произвольной формы, специфичная для приложения. В большинстве случаев это будет URL-адрес носителя, но отправитель может передать строку, которую получатель сможет правильно интерпретировать. Максимальная длина: 1 тыс. |
тип потока | перечисление (нить) | Описывает тип медиа-артефакта как один из следующих:
|
Тип содержимого | нить | Тип содержимого MIME воспроизводимого мультимедиа |
метаданные | объект | необязательный Объект медиа-метаданных, один из следующих: |
продолжительность | двойной | необязательно Продолжительность текущего воспроизводимого потока в секундах |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный либо приложением-отправителем, либо приложением-получателем |
GenericMediaMetadata
Описывает общий медиа-артефакт.
Имя | Тип | Описание |
---|---|---|
тип метаданных | целое число | 0 (единственное значение) |
заголовок | нить | необязательно Описательное название контента. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
субтитры | нить | необязательный Описательный подзаголовок контента. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
изображений | Изображение [] | необязательный Массив URL-адресов изображения, связанного с содержимым. Начальное значение поля может быть предоставлено отправителем в сообщении загрузки . Должны быть указаны рекомендуемые размеры |
Дата выпуска | строка (ISO 8601) | необязательная дата и время выпуска этого контента в формате ISO 8601. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
КиноМедиаМетаданные
Описывает медиа-артефакт фильма.
Имя | Тип | Описание |
---|---|---|
тип метаданных | целое число | 1 (единственное значение) |
заголовок | нить | необязательно Описательное название контента. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
субтитры | нить | необязательный Описательный подзаголовок контента. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
студия | нить | необязательная студия, выпустившая контент. Игрок может самостоятельно получить студию, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
изображений | Изображение [] | необязательный Массив URL-адресов изображения, связанного с содержимым. Начальное значение поля может быть предоставлено отправителем в сообщении загрузки . Должны быть указаны рекомендуемые размеры |
Дата выпуска | строка (ISO 8601) | необязательная дата и время выпуска этого контента в формате ISO 8601. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
ТВШоуМедиаМетаданные
Описывает медиа-артефакт эпизода телешоу.
Имя | Тип | Описание |
---|---|---|
тип метаданных | целое число | 2 (единственное значение) |
серияНазвание | нить | необязательно Описательное название сериала. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
субтитры | нить | необязательный Описательный субтитр телесериала. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
время года | целое число | необязательный номер сезона телешоу |
эпизод | целое число | необязательный номер серии (в сезоне) телешоу |
изображений | Изображение [] | необязательный Массив URL-адресов изображения, связанного с содержимым. Начальное значение поля может быть предоставлено отправителем в сообщении загрузки . Должны быть указаны рекомендуемые размеры |
оригиналAirDate | строка (ISO 8601) | необязательная дата и время выхода этого эпизода в формате ISO 8601. Игрок может самостоятельно получить originalAirDate, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
МузыкаТрекМедиаМетаданные
Описывает медиаартефакт музыкальной дорожки.
Имя | Тип | Описание |
---|---|---|
тип метаданных | целое число | 3 (единственное значение) |
имя альбома | нить | необязательный альбом или коллекция, из которой взят этот трек. Плеер может самостоятельно получить имя альбома, используя content_id, или оно может быть указано отправителем в сообщении загрузки . |
заголовок | нить | необязательно Название трека (например, название песни). Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
альбомИсполнитель | нить | необязательно Имя исполнителя, связанного с альбомом с этим треком. Плеер может самостоятельно получить albumArtist, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
художник | нить | необязательно Имя исполнителя, связанное с медиа-треком. Игрок может самостоятельно получить исполнителя, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
композитор | нить | необязательно Имя композитора, связанного с медиа-треком. Игрок может самостоятельно получить композитор, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
номер дорожки | целое число | опционально Номер трека в альбоме |
номер диска | целое число | опционально Номер тома (например, диска) альбома |
изображений | Изображение [] | необязательный Массив URL-адресов изображения, связанного с содержимым. Начальное значение поля может быть предоставлено отправителем в сообщении загрузки . Должны быть указаны рекомендуемые размеры |
Дата выпуска | строка (ISO 8601) | необязательная дата и время выпуска этого контента в формате ISO 8601. Игрок может самостоятельно получить ReleaseDate, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
ФотоМедиаМетаданные
Описывает фотографический медиа-артефакт.
Имя | Тип | Описание |
---|---|---|
тип метаданных | целое число | 4 (единственное значение) |
заголовок | нить | необязательно Название фотографии. Игрок может самостоятельно получить заголовок, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
художник | нить | необязательно Имя фотографа. Игрок может самостоятельно получить исполнителя, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
расположение | нить | необязательное устное место, где была сделана фотография; например, «Мадрид, Испания». Игрок может самостоятельно получить местоположение, используя content_id, или оно может быть указано отправителем в сообщении загрузки . |
широта | двойной | необязательное значение географической широты места, где была сделана фотография. Игрок может самостоятельно получить широту, используя content_id, или ее может указать отправитель в сообщении загрузки . |
долгота | двойной | необязательное значение географической долготы места, где была сделана фотография. Игрок может самостоятельно получить долготу, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
ширина | целое число | необязательно Ширина фотографии в пикселях. Игрок может самостоятельно получить ширину, используя content_id, или она может быть указана отправителем в сообщении загрузки . |
высота | целое число | необязательно Высота фотографии в пикселях. Игрок может самостоятельно получить высоту, используя content_id, или она может быть указана отправителем в сообщении загрузки . |
СозданиеДатаВремя | строка (ISO 8601) | необязательная дата и время съемки этой фотографии в формате ISO 8601. Игрок может самостоятельно получить CreationDateTime, используя content_id, или он может быть указан отправителем в сообщении загрузки . |
Медиастатус
Описывает текущий статус медиа-артефакта относительно сеанса.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Уникальный идентификатор воспроизведения данного конкретного сеанса. Этот идентификатор устанавливается получателем при загрузке и может использоваться для идентификации конкретного экземпляра воспроизведения. Например, каждое из двух воспроизведений «Wish you be here» в рамках одного сеанса будет иметь уникальный mediaSessionId. |
СМИ | СМИИнформация | необязательно (для сообщений о состоянии) Полное описание воспроизводимого контента. Возвращается в сообщениях о состоянии только в том случае, если MediaInformation изменилась. |
скорость воспроизведения | плавать | Указывает, движется ли время мультимедиа и с какой скоростью. Это не зависит от состояния проигрывателя, поскольку время мультимедиа может остановиться в любом состоянии. 1,0 — обычное время, 0,5 — замедленное движение. |
состояние игрока | перечисление (строка) | Описывает состояние игрока как одно из следующих:
|
праздныйПричина | перечисление (строка) | необязательно. Если playerState имеет значение IDLE и причина, по которой оно стало IDLE, известна, это свойство предоставляется. Если проигрыватель находится в режиме ожидания, поскольку он только что запустился, это свойство не будет предоставлено; если игрок находится в любом другом состоянии, это свойство не должно предоставляться. Применяются следующие значения:
|
Текущее время | двойной | Текущая позиция медиаплеера с момента начала контента в секундах. Если это контент прямой трансляции, то это поле представляет время в секундах от начала события, которое должно быть известно игроку. |
поддерживаются MediaCommands | флаги | Флаги, описывающие, какие медиа-команды поддерживает медиаплеер:
Комбинации описываются как суммирования; например, Пауза+Искать+StreamVolume+Mute == 15. |
объем | Объем | Объем потока |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |
Команды от отправителя к получателю
Эти команды управляют медиаплеером. Все объекты customData в сообщениях ниже должны быть необязательными (т. е. приемник должен должным образом ухудшаться, если данные не передаются). Это позволит стандартным приложениям удаленного управления работать правильно.
Нагрузка
Загружает новый контент в медиаплеер.
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | НАГРУЗКА (только значение) |
СМИ | СМИИнформация | Метаданные (включая contentId) носителя для загрузки |
Автовоспроизведение | логическое значение | необязательно (по умолчанию — true). Если указан параметр autoplay, медиаплеер начнет воспроизведение контента при его загрузке. Даже если автовоспроизведение не указано, реализация медиаплеера может начать воспроизведение немедленно. Если воспроизведение началось, состояние плеера в ответе должно быть установлено на БУФЕРИЗАЦИЯ, в противном случае оно должно быть установлено на ПАУЗУ. |
Текущее время | двойной | необязательные секунды с начала контента. Если контент является живым контентом и позиция не указана, поток начнется с позиции прямой трансляции. |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока Загрузка не удалась Загрузка отменена |
Пауза
Приостанавливает воспроизведение текущего контента. Запускает уведомление о событии STATUS для всех приложений-отправителей.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Идентификатор медиа-сеанса, который необходимо приостановить |
идентификатор запроса | целое число | Идентификатор запроса, который будет использоваться для корреляции запроса/ответа. |
тип | нить | ПАУЗА (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока |
Искать
Устанавливает текущую позицию в потоке. Запускает уведомление о событии STATUS для всех приложений-отправителей. Если предоставленная позиция находится за пределами диапазона допустимых позиций для текущего контента, игроку следует выбрать допустимую позицию, как можно более близкую к запрошенной позиции.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Идентификатор медиа-сессии, в которой установлена позиция потока |
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | ПОИСК (только значение) |
резюмеСостояние | перечисление (строка) | необязательно. Если этот параметр не установлен, статус воспроизведения не изменится; применяются следующие значения:
|
Текущее время | двойной | необязательные секунды с начала контента. Если контент является живым контентом и позиция не указана, поток начнется с позиции прямой трансляции. |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока |
Останавливаться
Останавливает воспроизведение текущего контента. Запускает уведомление о событии STATUS для всех приложений-отправителей. После этой команды контент больше не будет загружаться, а mediaSessionId станет недействительным.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Идентификатор медиа-сеанса для контента, который нужно остановить |
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | СТОП (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока |
Играть
Начинает воспроизведение содержимого, загруженного с помощью вызова загрузки, воспроизведение продолжается с текущей временной позиции.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Идентификатор медиа-сеанса для воспроизводимого контента |
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | ИГРАТЬ (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока |
Получить статус
Получает статус носителя.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | необязательный идентификатор сеанса мультимедиа, для которого должен быть возвращен статус мультимедиа. Если ничего не указано, будет предоставлен статус для всех идентификаторов сеансов мультимедиа. |
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | GET_STATUS (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Сообщение MediaStatus отправителю, который его запросил. | Никто | Никто | Никто |
SetVolume
Устанавливает громкость медиапотока. Используется для эффектов постепенного появления/затухания медиапотока. (Примечание: громкость приемника изменяется с помощью веб-отправителя setVolume .) Громкость потока нельзя использовать вместе с ползунком громкости или кнопками громкости для управления громкостью устройства. Изменение громкости потока не вызовет срабатывания какого-либо пользовательского интерфейса на приемнике.
Имя | Тип | Описание |
---|---|---|
mediaSessionId | целое число | Идентификатор медиасеанса носителя, для которого изменен объем потока |
идентификатор запроса | целое число | Идентификатор запроса, чтобы соотнести запрос и ответ |
тип | нить | ОБЪЕМ (только значение) |
объем | Объем | Объем потока |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-отправителем |
Ответ | Триггеры | Трансляции | Ошибки |
---|---|---|---|
Никто | Изменение состояния приемника | Сообщение об изменении статуса носителя | Неверное состояние игрока |
Сообщения от получателя к отправителю
Получатель отправляет два типа сообщений:
- Ошибки: одноадресные сообщения, отправляемые при ошибке ответа на запрос отправителя.
- Статус: Трансляция сообщений.
- Последствие действия, инициированного отправителем. Будет содержать requestId запроса, вызвавшего изменение.
- Спонтанно: например, из-за изменения, вызванного приложением-получателем. RequestId будет равен 0.
Ошибка: неверное состояние игрока.
Отправляется, когда запрос отправителя не может быть выполнен, поскольку плеер не находится в допустимом состоянии. Например, если приложение еще не создало медиа-элемент.
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор запроса, вызвавшего эту ошибку |
тип | нить | INVALID_PLAYER_STATE (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |
Ошибка: не удалось загрузить
Отправляется, когда запрос на загрузку не выполнен. Состояние игрока будет IDLE.
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор запроса, вызвавшего эту ошибку |
тип | нить | LOAD_FAILED (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |
Ошибка: загрузка отменена
Отправляется, когда запрос на загрузку был отменен (получен второй запрос на загрузку).
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор запроса, вызвавшего эту ошибку |
тип | нить | LOAD_CANCELLED (только значение) |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |
Ошибка: неверный запрос
Отправляется, когда запрос недействителен (например, неизвестный тип запроса).
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор запроса, вызвавшего эту ошибку |
тип | нить | INVALID_REQUEST (только значение) |
причина | Перечисление (строка) | Ценности:
|
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |
Статус СМИ
Отправляется после изменения состояния или после запроса статуса носителя. Будут отправлены только те объекты MediaStatus, которые были изменены или запрошены.
Имя | Тип | Описание |
---|---|---|
идентификатор запроса | целое число | Идентификатор, используемый для корреляции этого ответа о состоянии с запросом, который его создал, или 0, если сообщение о состоянии является спонтанным (не инициируется запросом отправителя). Приложения-отправители будут генерировать уникальные идентификаторы запросов, выбирая случайное число и постоянно его увеличивая (они не будут использовать 0). |
тип | нить | MEDIA_STATUS (только значение) |
положение дел | Медиастатус [] | Массив объектов статуса носителя. ПРИМЕЧАНИЕ. Медиа-элемент в MediaStatus будет возвращен только в том случае, если он изменился. |
пользовательские данные | объект | необязательный блок данных, специфичный для приложения, определенный приложением-получателем |