EO|RU|EN
GenReS 0.9
Плагин для Mozilla/Firefox
Для компиляции необходимо
gcc
gxx
gmake
mozilla-dev
Для полной функциональности необходимо
perl
gtk2-perl
MPlayer
ElphelOgm
Сборка
make genres.so
Установка
В системные каталоги:
make install
В домашний каталог:
make local-install
После чего для активизации плагина перезапустите браузер или введите адрес "about:plugins"
(документы использующие плагин должны быть закрыты).
Для архитектуры i386 доступны скомпилированные пакеты для Дебиана в разделе файлов.
Технические подробности
Плагин использует XEmbed окно и никак не обрабатывает события от
клавиатуры и мыши, они просто идут напрямую в браузер, всё что нужно
можно делать через javascript, используя стандартные возможности,
которые
уже есть в mozilla для элементов html документов.
Использование NPObject позволяет иметь неограниченное число переменных
и функций объекта EMBED не сообщая о них заранее.
В зависимости от mime-type запускается скрипт
"~/.mozilla/genres/<mime-type>".
Плагин передаёт данные от браузера в управляющий скрипт, скрипт их
интерпретирует, запускает проигрыватель и передаёт ему данные.
Данные от проигрывателя через скрипт передаются обратно плагину.
Данные между плагином и скриптом передаются в формате:
переменная=значение\n .
На текущий момент во внешнюю программу передаются все параметры
тега embed, идентификатор окна для встраивания и URL документа для
преобразования относительных ссылок в абсолютные.
Когда всё готово для отображения в скрипт посылается run=1.
По команде run=0 скрипт должен остановить проигрыватель и завершиться
.
Управляющий скрипт для mplayer написан на perl и как альтернатива на
shell (урезанный вариант).
Perl-скрипт требует threads(нити) (могут быть выключены в некоторых
дистрибутивах linux).
До run=1 скрипт получает значения всех параметров тега embed
сейчас он понимает:
Cтатические параметры
href - url файла или потока
lowres - параметр прореживания для ускоренного DCT (0-3)
width - ширина окна
loop - повтор проигрывания (0 или не указано - бесконечно)
frameskip - пропуск n кадров из каждых n+1
fps - частота кадров
rotate=0|90|180|270 - угол поворота изображения по часовой стрелке в градусах
mirror=true|false - зеркальносимметричное отображение относительно вертикальной оси
flip=true|false - то же относительно горизонтали; установка flip и mirror одновременно эквивалентна rotate=180
Динамически изменяемые переменные
pause=1 или play=0 - приостановить
проигрывание
pause=0 или play=1 - продолжить проигрывание
run=1 - запустить плеер если он прекратил работу (по ошибке или концу файла)
run=0 - завершить плеер
save - запустить mencoder вместо mplayer
save=ask - всегда спрашивать имя файла для записи
save=auto - не спрашивать если пользователь укажет в первый раз
href|src - смена файла для проигрывания
По приходу данных от плеера они передаются в переменные объекта и
становятся доступны из javascript. При этом если задана соответствующая
функция с именем "on<имя переменной>", она будет вызвана.
В каталоге example есть html-документ, демонстрирующий возможности
плагина, показывающий видео 2048х1536 с
прокруткой скроллбарами и тасканием за саму картинку.
К нему надо файл с видео 'default.avi' или заменить URL на какой нибудь
другой.
Список принимаемых mime-типов браузер запрашивает только в первый
запуск после установки плагина, поэтому при изменении состава
каталога управляющих скриптов нужно переустановить скрипт (удалить
genres.so, перезапустить браузер, восстановить genres.so, снова
перезапустить браузер).
TODO
Определение JS-функций из управляющего скрипта