Как добавить свой плеер

Документ актуален для InstantVideo 1.X

Каталог плееров в InstantVideo расположен по пути /components/video/players/. В данной директории каждый плеер находится в своей одноименной папке с управляющим файлом player.php.

В корне директории /components/video/players/  находится файл player.class.php - это базовый класс для всех плееров, классы самих плееров наследуются от него.

Для добавления своего плеера необходимо:

Создать папку с именем плеера, например "uppod", т.е. полный путь будет выглядеть как " /components/video/players/uppod/".

В эту директорию скопировать все необходимые файлы добавляемого плеера - js и/или swf, причем важно, swf файл плеера должен иметь название player.swf.

Создать файл player.php, в котором необходимо написать класс с названием, идентичным названию директории плеера и унаследовать его от класса player, например:

class uppod extends player {
    protected function __construct() {
        $this->player_path = self::$players_path.__CLASS__;
    }
}

Обратите внимание на конструктор класса, в нем нужно определить в свойство объекта класса параметр $player_path, в большинстве случаев можно оставить как в примере.

Далее необходимо написать (переопределить) protected метод setFlashvars(), который заполнит свойство flashvars массивом параметров для flash файла плеера и вернет сам объект. Обратите внимание, пути к файлам постер-картинок и файлам для воспроизведения должны быть абсолютными, с полным именем домена.

class uppod extends player {
    protected function __construct() {
        $this->player_path = self::$players_path.__CLASS__;
    }
    protected function setFlashvars() {
        $flashvars['comment'] = htmlspecialchars($this->m['title']);
        $flashvars['file']    = htmlspecialchars($this->m['path']);
        $flashvars['poster']  = htmlspecialchars(HOST.'/upload/video/thumbs/medium/'.$this->m['img']);
        if($this->model->config['autoplay']){
            $flashvars['auto'] = 'play';
        }
        $this->flashvars = $flashvars;
        return $this;
    }
}

Отметим, что в свойстве объекта доступен массив переданного плееру видеоролика - $this->m. В большинстве случаев подход, описанный выше достаточен для работоспособности плеера. Базовый класс плееров всю остальную работу по формированию кода flash плеера выполнит сам.

Приведенный выше пример рассчитан на то, что ваш плеер может формироваться через swfobject.

Дополнительные параметры и нюансы

Система автоматически сформирует код плеера для воспроизведения и учтет все нюансы, если ваш плеер может формироваться через swfobject. Однако в частных случаях, например с плеером Jwplayer, описанный выше подход не будет работать.

В таких случаях можно в классе плеера переопределять необходимые методы (возвращают строковые переменные):

  • getPlayer() — формирует полный код ролика для инициализации посредством js;
  • getPlayerToShare() — формирует код ролика при помощи html тегов object и embed.

Назначение остальных переопределяемых методов и свойств объекта:

  • свойство объекта $supported_providers — это массив всех доступных провайдеров, ролики которых могут воспроизводиться в "наших" плеерах;
  • свойство объекта $m — массив данных, переданного плееру ролика;
  • свойство объекта $is_swf_link — флаг, определяющий, может ли плеер отдавать ссылку на swf файл с параметрами для воспроизведения, по умолчанию true;
  • свойство объекта $params — массив параметров для тегов object и embed;
  • свойство объекта $provider — объект класса провайдера;
  • свойство объекта $model — объект класса модели системы;
  • метод swfPlayerUrl() — возвращает полную ссылку на файл плеера с параметрами для воспроизведения;
  • метод setPlayerOpenGraphVideoTag() — устанавливает метатеги og:video и og:video:type;

Здесь описана наиболее полная структура плееров для InstantVideo, если у вас остались вопросы, пиши нам, поможем разобраться. И, разумеется, всегда можно посмотреть код текущих плееров на живом примере.