GenReS: плагин для Mozilla/Firefox: README

# GenReS 0.8

## Плагин для Mozilla/Firefox

### Для компиляции необходимо

gcc
gxx
gmake
mozilla-dev

### Сборка

make genres.so

### Установка

скопируйте genres.so в каталог плагинов ~/.mozilla/plugins/;
создайте каталог ~/.mozilla/genres/slaves/video/;
поместите туда один из скриптов из каталога slaves/video под именем соответствующим mimetype, например mpeg;
сделайте символические ссылки для обслуживания других mimetype;
перезапустите браузер.

### Технические подробности

Плагин использует 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 или не указано - бесконечно)
fps - частота кадров
src - другое имя для href
Динамически изменяемые переменные
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

#### Использовать потоки браузера при параметре SRC

Можно передавать данные в плеер через трубу вместо передачи URL.

#### Определение JS-функций из управляющего скрипта