# Возможные проблемы


Типичные сбои при встраивании и работе плеера. Если проблема скорее продуктовая (загрузка, доступы, аккаунт) — начните с [решения проблем](https://docs.kinescope.ru/diagnostika-i-podderzhka/reshenie-problem/) в разделе диагностики.

| Симптом | Тема |
| :--- | :--- |
| [Не загружается видео или зависает](#video-stall) | Воспроизведение |
| [DRM не работает в инкогнито на Android](#drm-incognito-android) | DRM |
| [Можно записать экран при включённой защите](#drm-screen-capture) | DRM |
| [DRM не работает в WebView на Android](#drm-webview-android) | DRM |
| [DRM не работает в Electron](#drm-electron) | DRM |
| [Не стартует play() с своей кнопки](#play-custom-button) | Автозапуск |
| [Ошибка NotAllowedError](#not-allowed-error) | Автозапуск |
| [Не работает автозапуск в Electron](#autoplay-electron) | Автозапуск |
| [Зависает страница с большим числом плееров](#many-players) | Производительность |
| [Не работает fullscreen во вложенном iframe](#fullscreen-nested-iframe) | Встраивание |
| [Не работает поворот экрана в PWA](#pwa-orientation) | Встраивание |

## Не загружается видео или зависает {#video-stall}

**Что происходит.** Плеер открывается, но видео не грузится или воспроизведение зависает.

**Почему.** Часто мешают сеть или фоновые вкладки, которые забирают ресурсы браузера.

**Что сделать.**

1. Проверьте скорость на [Скоростомере](https://speedtest.kinescope.io/).
2. Закройте все вкладки, кроме плеера, и перезагрузите страницу.

## DRM не работает в инкогнито на Android {#drm-incognito-android}

**Что происходит.** Видео с Widevine не воспроизводится в режиме инкогнито на Android.

**Почему.** С Chrome 62 поддержка Widevine в инкогнито на Android отключена: так пользователи не теряют платные лицензии при закрытии вкладок.

**Что сделать.** Смотрите видео с DRM в обычном режиме браузера.

Подробнее: [Media updates in Chrome 62](https://developer.chrome.com/blog/media-updates-in-chrome-62).

## Можно записать экран при включённой защите {#drm-screen-capture}

**Что происходит.** При включённом Widevine DRM всё равно можно записать экран с видео.

**Почему.** Часть CSS у родителя или iframe ломает защиту от захвата в браузере.

**Что сделать.** Проверьте известные случаи:

- У родительского элемента есть `border-radius` — задайте `overflow: initial` или `overflow: visible`.
- Firefox на macOS: на элемент плеера (или `video`) либо на предка со stacking context применён `transform`.
- На странице используются `backdrop-filter` или `filter`.
- У `<iframe>` плеера или родителя заданы `aspect-ratio` или `padding-top`.

Подробнее: [баг Chromium про filter](https://issues.chromium.org/issues/362007492).

## DRM не работает в WebView на Android {#drm-webview-android}

**Что происходит.** Защищённое видео не играет внутри Android WebView.

**Почему.** В WebView часто нет поддержки EME/Widevine или она отключена.

**Что сделать.** Проверьте поддержку на [shaka-player-demo](https://shaka-player-demo.appspot.com/support.html). Если значение `null`, поддержки нет — настраивайте WebView или используйте системный браузер.

Подробнее: [video.js #5563](https://github.com/videojs/video.js/issues/5563), [Widevine в Android WebView](https://stackoverflow.com/questions/47626857/how-to-play-widevine-drm-content-in-android-webview), [protected content в WebView](https://stackoverflow.com/questions/53143363/how-to-enable-protected-content-in-a-webview).

## DRM не работает в Electron {#drm-electron}

**Что происходит.** Widevine DRM не воспроизводится в приложении на Electron.

**Почему.** В Electron CDM нужно подключать и проверять отдельно от обычного Chrome.

**Что сделать.** Следуйте инструкции Electron по тестированию Widevine CDM.

Подробнее: [Testing Widevine CDM](https://www.electronjs.org/docs/latest/tutorial/testing-widevine-cdm).

## Не стартует play() с своей кнопки {#play-custom-button}

**Что происходит.** Пользователь нажимает вашу кнопку, вы вызываете API `play()`, но воспроизведение не начинается.

**Почему.** Браузер считает жест только если он попал в сам медиаэлемент / плеер — это [политика автозапуска](https://developer.chrome.com/blog/autoplay).

**Что сделать.** Нужно, чтобы пользователь нажал именно на плеер. Чтобы клик проходил сквозь ваши оверлеи, задайте им `pointer-events: none`.

## Ошибка NotAllowedError {#not-allowed-error}

**Что происходит.** В консоли или ответе API появляется `NotAllowedError` с текстом вроде «The request is not allowed by the user agent …» или «The request is not triggered by a user activation».

**Почему.** Вызывается системное API браузера, которое требует действия пользователя или должно идти как прямой результат нажатия/касания.

**Что сделать.** Вызывайте метод сразу из обработчика клика/тапа пользователя, без отложенных цепочек вне user gesture.

Подробнее: [User activation](https://developer.mozilla.org/en-US/docs/Web/Security/User_activation) на MDN.

## Не работает автозапуск в Electron {#autoplay-electron}

**Что происходит.** Автозапуск видео не срабатывает в Electron.

**Почему.** У Electron свои ограничения media autoplay, отличные от обычного браузера.

**Что сделать.** Проверьте политики автозапуска в настройках окна/webPreferences и известные обходные пути в обсуждениях ниже.

Подробнее: [MMM-ISS-Live #1](https://github.com/mykle1/MMM-ISS-Live/issues/1), [cordova-electron #102](https://github.com/apache/cordova-electron/issues/102).

## Зависает страница с большим числом плееров {#many-players}

**Что происходит.** На странице много встроенных плееров, вкладка тормозит или зависает.

**Почему.** Каждый плеер держит ресурсы; без ленивой загрузки нагрузка растёт линейно.

**Что сделать.** Используйте приёмы из раздела [Оптимизация](https://docs.kinescope.ru/dokumentaciya-pleera/optimizaciya/).

## Не работает fullscreen во вложенном iframe {#fullscreen-nested-iframe}

**Что происходит.** Полноэкранный режим не включается, если плеер лежит во iframe внутри другого iframe.

**Почему.** Если родительский `<iframe>` заполнен не через `src` (target формы или содержимое записано напрямую), атрибут `allow` может работать некорректно.

**Что сделать.** У `<iframe>` плеера уберите `allow` и оставьте только `allowfullscreen`. На iOS см. также [псевдо-полноэкранный режим](https://docs.kinescope.ru/instrukcii-dlya-razrabotchikov/iframe-psevdo-polnoekrannyy-rezhim-na-ios/).

## Не работает поворот экрана в PWA {#pwa-orientation}

**Что происходит.** В PWA в полноэкранном режиме плеера экран не поворачивается.

**Почему.** В `manifest.json` зафиксирована ориентация приложения.

**Что сделать.** Удалите из `manifest.json` свойство `orientation`. Затем слушайте смену полноэкранного режима и управляйте блокировкой поворота:

```js
player.on(player.Events.FullscreenChange, (event) => {
  if (event.data.isFullscreen) {
    screen.orientation.unlock()
  } else {
    screen.orientation.lock('portrait')
  }
})
```

## Что дальше?

- [Поддерживаемые платформы](https://docs.kinescope.ru/dokumentaciya-pleera/podderzhivaemye-platformy/)
- [Чат поддержки](https://t.me/kinescope_bot)

