Передача данных о состоянии видео
Чтобы улучшать качество поиска и просмотра видеороликов в поиске по видео, нам необходимо получать информацию о состоянии видео. Например, время начала или остановки видеоролика, время перемотки и т. д. Также нам важно получать сведения об ошибках, которые возникли при воспроизведении видео.
События, сообщающие о состоянии видео
Для передачи данных о состоянии видео используйте механизм postMessage — для каждого события, возникающего в плеере (например, начало воспроизведения видеоролика), в коде на JavaScript вызовите функцию window.parent.postMessage
. В качестве аргументов ей следует передать название события с параметрами этого события (например, позицию прогресс-бара).
Примечание
Обратите внимание, что функцию postMessage
необходимо вызывать для родительского объекта — window.parent
. Это связано с тем, что видео размещается не на основной странице результатов поиска Яндекса, а в отдельном фрейме (в элементе iframe
).
window.parent.postMessage({
event: <Название события>,
// дополнительные параметры события
}, '*');
Для отображения плеера в приложении поиска по видео для TV и в браузере необходимо передавать обязательные события и их параметры. Передача дополнительных событий сделает взаимодействие с плеером удобнее для пользователей. Наличие сигналов поможет лучше ранжировать видео.
Событие |
Описание |
Параметры события |
Обязательные |
||
|
Инициализация плеера. |
— |
|
Остановка воспроизведения. |
|
|
Просмотр ролика завершен (достигнут конец ролика). |
|
|
Начало воспроизведения или продолжение воспроизведения после паузы. |
|
|
Воспроизведение ролика (событие повторяется многократно). |
|
|
Ошибка воспроизведения, факт недоступности видео. |
|
|
Начало показа рекламы. |
См. Примеры* Примечание Допустимо отправлять информацию с параметрами рекламы отдельным событием |
|
Конец показа рекламы. |
|
|
Показ первого кадра видео. Примечание Если перед началом видео воспроизводится реклама, событие следует отправлять в момент показа первого кадра самого видео после завершения рекламного блока. |
|
Дополнительные |
||
|
Перемотка видео. |
|
|
Возобновление воспроизведения. |
Примечание Событие |
|
Включение, выключение звука или изменение громкости. |
Аналогично нативному событию volumechange у элемента |
|
Начало процесса буфферизации видео/части видео. |
|
|
Конец загрузки части видео. |
|
|
Пропуск рекламы, не заменяет |
|
|
Смена качества видео. |
|
|
Смена скорости воспроизведения. |
|
|
Переход плеера в полноэкранный режим или выход из полноэкранного режима. |
|
|
Плеер загрузился и готов к интерактивности (загружены данные, апи плеера). |
|
|
Факт внешнего перехода из плеера в рекламу, на сервис. |
|
|
Это событие должно отправляться при любой замене ролика внутри фрейма (элемента |
|
|
Произошла ошибка при попытке выйти или войти в полноэкранный режим. |
|
|
Список доступных значений качества. |
|
* Примеры данных для события adShown
Если рекламный блок начинает воспроизведение на тридцатой секунде видео и включает в себя два объявления, из которых первое имеет длительность 15 секунд и возможность пропуска, а второе длится 25 секунд и не может быть пропущено, то в событии adShown
должны присутствовать следующие данные:
{
count: 2,
time: 30,
ads: [
{
duration: 15.0,
skip: 1
},
{
duration: 25.3,
skip: 0
}
]
}
Если имеется блок с единственным рекламным объявлением, который воспроизводится в самом начале видео (preroll
), длится 45 секунд и не может быть перемотан:
{
count: 1,
time: 0,
ads: [
{
duration: 45.5,
skip: 0
}
]
}
Ниже рассмотрен пример передачи данных о видео в момент его запуска. Когда пользователь нажимает на плеере кнопку Play, вызывается функция window.parent.postMessage
с нужными параметрами.
// Отправка сообщения при старте проигрывания видео
window.parent.postMessage({
event: 'started',
duration: 30,
time: 5 // Если проигрывание возобновляется с 5 секунды
}, '*');
Сведения об ошибках
Для того чтобы мы смогли получать сведения об ошибках, возникающих при работе с видео, плеер должен передавать функции window.parent.postMessage
следующие коды ошибок:
Код ошибки |
Описание |
Недоступное видео |
|
101 |
Видео удалено. |
102 |
Видеоролик или учетная запись заблокирована. |
103 |
Видеоролик не существует либо URL не поддерживается. |
100 |
Прочие случаи недоступного видео. |
Ограничение доступа к видеоролику |
|
151 |
Недостаточно прав для просмотра видео. |
152 |
Видео запрещено к проигрыванию на других сайтах. |
153 |
Видео запрещено к проигрыванию в данном регионе. |
154 |
Ограничение доступа, требующее подтверждения от пользователя (например, ограничения по возрасту, авторизация). |
155 |
Ролик недоступен, потому что сервис посчитал запрос роботным. |
156 |
Ролик доступен только по подписке. |
150 |
Прочие ограничения просмотра видео. |
Прочее |
|
5 |
Сбой работы плеера (ошибки воспроизведения HTML-проигрывателя и др.). |
0 |
Прочие ошибки. |
Если видео, которое открывается в плеере, было удалено, отправка сообщения об ошибке может выглядеть следующим образом:
// Отправка сообщения об ошибке
window.parent.postMessage({
event: 'error',
time: 0,
code: '101'
}, '*');
Поддержка параметров в URL плеера
Чтобы сделать воспроизведение видео на устройствах Smart TV, а также в браузере удобнее для пользователей, поддержите в URL плеера следующие параметры:
Параметр |
Описание |
Возможные значения |
Обязательные |
||
|
Автозапуск воспроизведения. |
|
|
Управление отображением интерактивных элементов плеера на устройствах со Smart TV. |
Параметр управляет отображением всех элементов, нажимать на которые можно только указателем мыши. К ним относятся прогресс-бар, выпадающие списки сезонов и серий, кнопки выбора качества воспроизведения, меню управления проигрыванием и др. На телевизорах удобнее смотреть видео, если эти элементы скрыты автоматически. |
|
Загружать видео с выключенным звуком. |
|
|
Нужно ли отображать в плеере элементы управления (прогресс-бар, смена качества и пр.). |
|
|
Временная метка, с которой надо начать воспроизведение видео. |
В примере видео должно начать воспроизводиться с 10:00 (600 c = 10 мин). |
Управление плеером
Команды управления плеером отправляются в iframe
из внешнего окна с помощью механизма postMessage. Для приема сообщений внутри iframe
нужно подписаться на событие message
. Формат команды — JSON-объект с обязательным полем method
.
Команда |
Описание |
|
Начало или продолжение воспроизведения.
|
|
Пауза.
|
|
Перемотка на абсолютное значение времени.
|
|
Установка громкости.
|
|
Выключение звука.
|
|
Включение звука.
|
|
Установка качества воспроизведения.
|
|
Метод для смены видео внутри плеера без перерисовки всего
|
|
Метод для вызова начала буфферизации видео до его воспроизведения.
|
|
Метод для открытия полноэкранного режима.
|
|
Метод для выхода из полноэкранного режима.
|
Пример запуска видео по команде
window.addEventListener('message', function (event) {
if (event.data.method === 'play') {
document.getElementById('video').play();
}
});
Формат ответа
Для обратной связи о выполнении команд используйте события о состоянии видео.