# Player API

Методы: [events](#events) | [calls](#calls)

## events

*События плеера*

Boomstream Player генерирует события, которые вы можете перехватывать на странице с помощью JavaScript. Плеер генерирует следующие события:

* **loaded** — iframe плеера загружен и готов к получению действий.
* **play** — когда плеер начинает воспроизведение видео.
* **pause** — когда пользователь ставит видео на паузу.
* **stop** — когда плеер заканчивает воспроизведение видео.
* **time** — периодическое событие, отправляющее текущую позицию видео.
* **event** — JavaScript-событие.
* **progress** — когда пользователь или плеер изменяет точку на шкале прогресса.
* **fullScreen** — когда изменяется полноэкранный режим.

> **Примечание:** Вы можете передать параметр `use_fullscreen_mode=0`, чтобы отключить вход в полноэкранный режим (работают только события и переключение кнопки). Пример: `https://play.boomstream.com/VCcNtuiw?use_fullscreen_mode=0`

### Интеграция

Добавьте следующий JavaScript-код на страницу, где находится Boomstream Player:

```javascript
window.addEventListener('message', receiveMessage, false);
function receiveMessage(event) {
  if (event.origin !== "https://play.boomstream.com") {
    return;
  }
  // Ваш код здесь
}
```

Данные события будут находиться в объекте `event` в поле `data`.

**Возможные свойства поля:**

* **method** — имя события (loaded, play, pause, stop, time, event, fullScreen, progress).
* **code** — код видео.
* **time** — текущая позиция видео. Доступно для событий: loaded, play, pause, stop, time.
* **duration** — длительность видео. Доступно для событий: loaded, play, pause, stop, time.
* **event** — тип JavaScript-события из iframe (работает, когда method равно 'event' или 'fullScreen').
  * Если method равно 'event', может быть: `window.onfocus`, `window.onblur`
  * Если method равно 'fullScreen', может быть: `requestFullscreen`, `exitFullscreen`
  * Если method равно 'progress', может быть: `change`

## calls

*Вызовы действий*

Существует система обмена сообщениями JavaScript API (postMessage) для управления плеером Boomstream вне iframe (для использования внешних кнопок на сайте). Действия, которые можно передать в плеер:

* **play** — начать воспроизведение.
* **pause** — поставить на паузу.
* **seek** — перейти к указанному моменту времени (время указывается в процентах %).
* **mute** — отключить звук.
* **unmute** — включить звук.
* **volume** — установить громкость (громкость указывается в процентах).
* **useLastTime** — начать воспроизведение с последнего времени.
* **previous** — переключиться на предыдущее видео в плейлисте.
* **next** — переключиться на следующее видео в плейлисте.
* **fullScreen** — переключить полноэкранный режим.
* **toggleFullScreenButtonState** — переключить состояние кнопки полноэкранного режима без самого действия (варианты значения: 'requestFullscreen', 'exitFullscreen').

### Интеграция

Используйте этот HTML-код для отправки действий в плеер:

```html
<!DOCTYPE html>
<html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Пример плеера во фрейме</title>
        <style>
            .embed-container iframe {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
            }
            .embed-container {
                position: relative;
                padding-bottom: 56.25%;
                height: 0;
                overflow: hidden;
                max-width: 100%;
            }
        </style>
        <script src="https://play.boomstream.com/assets/javascripts/biframesdk.js"></script>
    </head>
    <body>
    <script>

        let player = new bIframeSDK('MEDIA_CODE');
        let seekTime = 10; // значение в процентах

        window.addEventListener('message', receiveMessage, false);

        function receiveMessage(event) {

            if (event.data && event.data.method == 'loaded' && event.data.code == 'MEDIA_CODE') {

                console.log(event);

                if (seekTime > event.data.time && event.data.duration) {
                    let seek = seekTime * 100 / event.data.duration; // Значение seek в процентах
                    player.mute(); // При старте по загрузке разрешено только с выключенным звуком
                    player.seek(seek);
                }
            }
        }

    </script>
    <button onclick="player.play()">play</button>
    <button onclick="player.pause()">pause</button>
    <button onclick="player.seek(10)">seek to 10 %</button>
    <button onclick="player.mute()">mute</button>
    <button onclick="player.unmute()">unmute</button>
    <button onclick="player.volume(50)">volume to 50 %</button>
    <button onclick="player.useLastTime()">useLastTime</button>
    <button onclick="player.previous()">previous</button>
    <button onclick="player.next()">next</button>
    <button onclick="player.fullScreen()">fullScreen</button>
    <button onclick="player.toggleFullScreenButtonState()">toggleFullScreenButtonState</button>
    <div style="margin-right: auto;margin-left: auto;width:900px;">
        <div class="embed-container">
            <iframe width="100%" height="355" src="https://play.boomstream.com/MEDIA_CODE" frameborder="0" scrolling="no" allow="autoplay; fullscreen" name="target"></iframe>
        </div>
    </div>
    </body>
</html>
```

Вы можете попробовать демо по ссылке: `https://play.boomstream.com/test/frame.html`

> **Важно:** Код iframe должен содержать параметр: `allow="autoplay; fullscreen"`

Для отправки действий в плеер вы можете использовать JavaScript API (postMessage). Примеры:

```javascript
let frame = document.querySelector("iframe");
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'play', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'pause', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'seek', data: '10'}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'mute', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'unmute', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'volume', data: '50'}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'useLastTime', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'previous', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'next', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'fullScreen', data: ''}, '*');

frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'toggleFullScreenButtonState', data: ''}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'toggleFullScreenButtonState', data: 'exitFullscreen'}, '*');
frame.contentWindow.postMessage({code: 'MEDIA_CODE', method: 'action', action: 'toggleFullScreenButtonState', data: 'requestFullscreen'}, '*');
```
