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-функций из управляющего скрипта