Difference between revisions of "GenReS(плагин)"

From ElphelWiki
Jump to: navigation, search
m (Back-end программы)
(запятые расставлены)
 
(13 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
{{ru|en=GenReS|cn=GenReS_cn}}
 
{{ru|en=GenReS|cn=GenReS_cn}}
 +
 +
GenReS - универсальный плагин для браузеров, основанных на Mozilla.
 +
Он позволяет использовать внешние программы для отображения HTML-тэгов EMBED и OBJECT,
 +
либо запускать их в полном окне браузера.
 +
 +
Плагин вызывает скрипты-посредники, которые запускают нужные программы-просмотрщики и позволяют управлять ими и контролировать состояние из JavaScript.
 +
Наборы функций и вызываемых программ могут быть изменены и дополнены путём изменения существующих и создания новых
 +
управляющих скриптов.
 +
 +
Существующий набор скриптов позволяет демонстрировать электронные документы с помощью [http://www.openoffice.org OpenOffice.org], видео, аудио и статические изображения, используюя программы display из [http://www.imagemagick.org/ ImageMagick], [http://www.MPlayerHQ.hu/ mplayer, mencoder] и [[Camera software#ElphelOgm|ElphelOgm]].
 +
Изображения и видео можно масштабировать, зеркально отражать, и вращать.
 +
Для звуковых и видео файлов и потоков работают функции приостановки, продолжения, пошагового просмотра, позицирования,
 +
записи в виде набора файлов, а также другие описанные ниже.
 +
 +
== Конфигурирование ==
 +
 +
Конфигурационные файлы "~/.mozilla/genres/genres.conf" или "/etc/genres.conf" содержат основные настройки. Дополнительные настройки для для программ mplayer, mencoder и ElphelOgm содержатся в файле "~/.mozilla/genres/mplayer.conf", который используется управляющим скриптом mplayer.pl. Файлы могут содержать комментарии начинающиеся с # как в shell.
 +
 +
=== Настройки в genres.conf ===
 +
 +
;mozillastreams={1|0} : использовать или нет потоки (и кэш) браузера для протоколов, которые он поддерживает (http, https и ftp);
 +
;debuglevel={1|0} :  включить/выключить вывод отладочной информации;
 +
;background={-1|0|1} : цвет объекта во аремя загрузки:      0 - чёрный, 1 - белый, -1 - по-умолчанию (серый).
 +
 +
=== Настройки в mplayer.conf ===
 +
 +
;out_file_once=шаблон : шаблон для имени фудио/видеофайла;
 +
;out_file_jpegs=шаблон : то же для сохранения видео по кадрам в виде отдельных картинок (saveformat=jpeg);
 +
;out_file=шаблон : шаблон для имени файла для тэгов с параметром save=auto;
 +
;out_file_jpegs_auto=шаблон : шаблон для комбинации saveformat=jpeg save=auto;
 +
;vo={x11, xv} :  видео-драйверы (см. man mplayer о параметре -vo);
 +
;ao={arts, esd, alsa, oss} : аудио-драйверы (см. man mplayer о параметре -ao);
 +
;not_ask={1|0} : больше не спрашивать имя файла для сохранения для тэгов с параметром save=auto;
 +
;not_ask_jpegs={1|0} : то же для save=auto и saveformat=jpeg;
 +
;frames=число : максимальное количество кадров в одном файле при записи для разбития на несколько файлов.
  
 
== Cтатические параметры тегов ==
 
== Cтатические параметры тегов ==
Line 7: Line 42:
 
;loop : повтор проигрывания (0 или не указано - бесконечно)
 
;loop : повтор проигрывания (0 или не указано - бесконечно)
 
;fps : частота кадров
 
;fps : частота кадров
;frameskip : пропуск n кадров из каждых n+1
+
;frameskip : пропуск n кадров из каждых n+1 (только для rtp/mjpeg через ElphelOgm)
 +
;framedelay : количество полных кадров удерживаемых в буфере (только для rtp/mjpeg через ElphelOgm)
 
;rotate : угол поворота изображения по часовой стрелке в градусах (0|90|180|270)
 
;rotate : угол поворота изображения по часовой стрелке в градусах (0|90|180|270)
 
;mirror : зеркальносимметричное отображение относительно вертикальной оси (true|false)
 
;mirror : зеркальносимметричное отображение относительно вертикальной оси (true|false)
 
;flip : то же относительно горизонтали (true|false); установка flip и mirror одновременно эквивалентна rotate=180
 
;flip : то же относительно горизонтали (true|false); установка flip и mirror одновременно эквивалентна rotate=180
 +
;saveformat=jpeg|ogm|avi : формат для записи видео (jpeg, ogm - только для rtp/mjpeg через ElphelOgm)
  
 
== Динамически изменяемые переменные (можно указывать и как параметры тегов) ==
 
== Динамически изменяемые переменные (можно указывать и как параметры тегов) ==
Line 22: Line 59:
 
;run=1 : запустить плеер если он прекратил работу (по ошибке или концу файла);
 
;run=1 : запустить плеер если он прекратил работу (по ошибке или концу файла);
 
;run=0 : завершить плеер;
 
;run=0 : завершить плеер;
;save : запустить mencoder вместо mplayer;
+
;save : запустить запись вместо показа;
 
:;save=ask : всегда спрашивать имя файла для записи;
 
:;save=ask : всегда спрашивать имя файла для записи;
 
:;save=auto : не спрашивать если пользователь укажет в диалоге.
 
:;save=auto : не спрашивать если пользователь укажет в диалоге.
Line 32: Line 69:
 
;frame : сообщение плеера/рекордера о последнем кадре
 
;frame : сообщение плеера/рекордера о последнем кадре
 
;error : последнее сообщение об ошибке
 
;error : последнее сообщение об ошибке
 +
 +
информация о статических картинках (от display)
 +
 +
;imgtype : формат (JPEG, TIFF и т.д.)
 +
;imgsize : размер картинки (например 800x600)
 +
;filelength : длина файла (например 89kb)
  
 
Возможны другие но они пока не используются.
 
Возможны другие но они пока не используются.
Line 53: Line 96:
 
В настоящий момент задействованы:
 
В настоящий момент задействованы:
  
* mplayer (компилировать с live555)
+
* mplayer (компилировать с live555);
* mencoder из пакета mplayer
+
* mencoder из пакета mplayer;
* ElphelOgm - для получения mjpeg видео по чистому multicast или unicast rtp.  
+
* ElphelOgm - для получения mjpeg видео по чистому multicast или unicast rtp;
 +
* display из пакета ImageMagick - для показа статических картинок;
 +
* ooffice (OpenOffice.org) для показа документов.
  
 
Чтобы задействовать ElphelOgm, должен быть установлен mime-type начинающийся с video/m
 
Чтобы задействовать ElphelOgm, должен быть установлен mime-type начинающийся с video/m
Line 63: Line 108:
 
;port -: multicast port  
 
;port -: multicast port  
  
Unicast тоже можно принимать, для этого указывается адрес и порт получателя, и сервер также должен быть сконфигурирован чтобы постоянно слать
+
Unicast тоже можно принимать, для этого указывается адрес и порт получателя, и сервер также должен быть сконфигурирован чтобы постоянно слать udp видеопоток на этот адрес и порт. Динамическое изменение URL не поддерживается для RTP.
udp видеопоток на этот адрес и порт. Динамическое изменение URL не поддерживается для RTP.
 
 
Вместо этого используйте последовательность команд: obj.run=0; obj.src=...; obj.run=1;
 
Вместо этого используйте последовательность команд: obj.run=0; obj.src=...; obj.run=1;
 +
 +
{| border="2" cellpadding="6" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;"
 +
|+ '''Поддерживаемые MIME-типы и вызываемые программы'''
 +
!MIME-тип!!Протокол||Приложение
 +
|-
 +
|
 +
application/x-display
 +
image/tiff
 +
image/x-tiff
 +
image/x-tif
 +
image/sun-raster
 +
image/x-sun-raster
 +
image/x-rgb
 +
image/x-portable-pixmap
 +
image/x-portable-graymap
 +
image/x-portable-bitmap
 +
image/x-portable-anymap
 +
application/photoshop
 +
application/x-photoshop
 +
image/x-xcf
 +
image/xcf
 +
application/x-gimp
 +
application/gimp
 +
|http https ftp file||display
 +
|-
 +
|
 +
video/ogg video/x-ogg application/x-elphel-ogm
 +
video/x-theora video/theora
 +
video/mpeg video/mjpeg
 +
video/x-mpeg video/x-mpeg2
 +
video/quicktime video/x-quicktime application/x-quicktimeplayer
 +
video/msvideo video/x-msvideo
 +
application/x-drm-v2
 +
application/x-mplayer2
 +
video/x-ms-asf
 +
video/x-ms-wm
 +
video/x-ms-wmv
 +
video/x-ms-wvx
 +
video/sgi-movie
 +
video/x-sgi-movie
 +
video/dl
 +
video/x-dl
 +
video/sgi-movie
 +
video/x-sgi-movie
 +
video/anim
 +
video/x-anim
 +
video/fli
 +
video/x-fli
 +
 +
audio/mp3 audio/x-mp3
 +
audio/mpeg2 audio/x-mpeg2
 +
audio/mpeg3 audio/x-mpeg3
 +
audio/mpeg audio/x-mpeg
 +
application/ogg application/x-ogg
 +
audio/ogg audio/x-ogg
 +
audio/x-ms-wax
 +
audio/wav audio/x-wav
 +
audio/x-pn-wav audio/x-pn-windows-acm
 +
 +
|http https ftp file||mplayer mencoder
 +
|-
 +
|
 +
application/x-elphel-ogm
 +
video/mjpeg
 +
|rtp||mplayer ElphelOgm
 +
|-
 +
|
 +
application/vnd.oasis.opendocument.chart
 +
application/vnd.oasis.opendocument.database
 +
application/vnd.oasis.opendocument.formula
 +
application/vnd.oasis.opendocument.graphics
 +
application/vnd.oasis.opendocument.graphics-template
 +
application/vnd.oasis.opendocument.image
 +
application/vnd.oasis.opendocument.presentation
 +
application/vnd.oasis.opendocument.presentation-template
 +
application/vnd.oasis.opendocument.spreadsheet
 +
application/vnd.oasis.opendocument.spreadsheet-template
 +
application/vnd.oasis.opendocument.text
 +
application/vnd.oasis.opendocument.text-master
 +
application/vnd.oasis.opendocument.text-template
 +
application/vnd.oasis.opendocument.text-web
 +
 +
application/vnd.sun.xml.calc
 +
application/vnd.sun.xml.draw application/vnd.sun.xml.impress
 +
application/vnd.sun.xml.math
 +
application/vnd.sun.xml.writer
 +
application/vnd.sun.xml.draw.template application/vnd.sun.xml.calc.template application/vnd.sun.xml.impress.template
 +
application/vnd.sun.xml.writer.template
 +
application/vnd.sun.xml.writer.global
 +
 +
text/rtf application/rtf
 +
application/x-msword
 +
application/msword
 +
application/vnd.ms-excel
 +
application/vnd.ms-powerpoint
 +
application/mspowerpoint
 +
|http ftp file||ooffice
 +
|}
  
 
== Диагностика ошибок установки ==
 
== Диагностика ошибок установки ==
Line 88: Line 230:
  
 
--[[User:Khlut|Sergey Khlutchin]] 15:49, 11 February 2006 (CST)
 
--[[User:Khlut|Sergey Khlutchin]] 15:49, 11 February 2006 (CST)
 +
 +
== Создание управляющих скриптов ==
 +
 +
Для каждого тэга плагин запускает отдельный процесс-посредник. Обмен данными осуществляется через трубы (стандартные для юникса неименованные каналы). Для процесса-посредника каналы присоединены к стандартным вводу и выводу. Стандартный вывод ошибок совпадает со стандартным выводом.
 +
Файловый дескриптор №3 открыт для ввода (так же через трубу) данных из файла, на который указывает параметр тэга SRC. (Этот параметр распознаётся браузером.) Если он содержит URL с поддерживаемым протоколом и включен параметр [[#Настройки в genres.conf|mozillastreams]], файл будет передаваться через эту трубу.
 +
Данные через стандартные ввод/вывод передаются в виде текстовых строк по одной команде в строке.
 +
{| border="2" cellpadding="6" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;"
 +
|+ '''Команды от плагина скрипту'''
 +
|имя=значение
 +
|переменной тэга было присвоено значение
 +
(фактически в javascript остаётся старое значение до ответа скрипта);
 +
|-
 +
|.
 +
|конец блока начальных значений параметров тэга;
 +
|-
 +
|PRINTEMBED
 +
|требуется напечатать страницу содержащую тэг, в ответ следует передать данные в формате postscript;
 +
|-
 +
|PRINTFULL
 +
|запрос печати для объекта в полном окне, все операции должен выполнить сам скрипт (включая диалоги);
 +
|-
 +
|EOF
 +
|конец файла переданного через дескриптор №3 (труба не закрывается для возможности повторной передачи по запросу).
 +
|}
 +
{| border="2" cellpadding="6" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;"
 +
|+ '''Команды от скрипта плагину'''
 +
|имя=значение
 +
|присвоить значение параметру тэга, после чего будет вызвана функция (если определена) '''onимя()''';
 +
|-
 +
|OPEN
 +
|послать с начала файл (через дескриптор №3), на который указывает параметр SRC;
 +
|-
 +
|CLOSE
 +
|закрыть трубу со стороны плагина (скрипт больше не сможет пользоваться дескриптором №3);
 +
|-
 +
|AUTOCLOSE
 +
|автоматически закрывать трубу при окончании файла данных;
 +
|-
 +
|DESTROY
 +
|закрыть поток файла данных браузера;
 +
|-
 +
|{javascript}
 +
|выполнить скрипт в контексте объекта тэга.
 +
|}

Latest revision as of 01:03, 26 June 2008

in English | autotranslate | по-русски | 中文版

GenReS - универсальный плагин для браузеров, основанных на Mozilla. Он позволяет использовать внешние программы для отображения HTML-тэгов EMBED и OBJECT, либо запускать их в полном окне браузера.

Плагин вызывает скрипты-посредники, которые запускают нужные программы-просмотрщики и позволяют управлять ими и контролировать состояние из JavaScript. Наборы функций и вызываемых программ могут быть изменены и дополнены путём изменения существующих и создания новых управляющих скриптов.

Существующий набор скриптов позволяет демонстрировать электронные документы с помощью OpenOffice.org, видео, аудио и статические изображения, используюя программы display из ImageMagick, mplayer, mencoder и ElphelOgm. Изображения и видео можно масштабировать, зеркально отражать, и вращать. Для звуковых и видео файлов и потоков работают функции приостановки, продолжения, пошагового просмотра, позицирования, записи в виде набора файлов, а также другие описанные ниже.

Конфигурирование

Конфигурационные файлы "~/.mozilla/genres/genres.conf" или "/etc/genres.conf" содержат основные настройки. Дополнительные настройки для для программ mplayer, mencoder и ElphelOgm содержатся в файле "~/.mozilla/genres/mplayer.conf", который используется управляющим скриптом mplayer.pl. Файлы могут содержать комментарии начинающиеся с # как в shell.

Настройки в genres.conf

mozillastreams={1|0} 
использовать или нет потоки (и кэш) браузера для протоколов, которые он поддерживает (http, https и ftp);
debuglevel={1|0} 
включить/выключить вывод отладочной информации;
background={-1|0|1} 
цвет объекта во аремя загрузки: 0 - чёрный, 1 - белый, -1 - по-умолчанию (серый).

Настройки в mplayer.conf

out_file_once=шаблон 
шаблон для имени фудио/видеофайла;
out_file_jpegs=шаблон 
то же для сохранения видео по кадрам в виде отдельных картинок (saveformat=jpeg);
out_file=шаблон 
шаблон для имени файла для тэгов с параметром save=auto;
out_file_jpegs_auto=шаблон 
шаблон для комбинации saveformat=jpeg save=auto;
vo={x11, xv} 
видео-драйверы (см. man mplayer о параметре -vo);
ao={arts, esd, alsa, oss} 
аудио-драйверы (см. man mplayer о параметре -ao);
not_ask={1|0} 
больше не спрашивать имя файла для сохранения для тэгов с параметром save=auto;
not_ask_jpegs={1|0} 
то же для save=auto и saveformat=jpeg;
frames=число 
максимальное количество кадров в одном файле при записи для разбития на несколько файлов.

Cтатические параметры тегов

lowres 
параметр прореживания для ускоренного DCT [0-3], 0-полное разрешение, 3-1/8
width 
ширина окна
loop 
повтор проигрывания (0 или не указано - бесконечно)
fps 
частота кадров
frameskip 
пропуск n кадров из каждых n+1 (только для rtp/mjpeg через ElphelOgm)
framedelay 
количество полных кадров удерживаемых в буфере (только для rtp/mjpeg через ElphelOgm)
rotate 
угол поворота изображения по часовой стрелке в градусах (0|90|180|270)
mirror 
зеркальносимметричное отображение относительно вертикальной оси (true|false)
flip 
то же относительно горизонтали (true|false); установка flip и mirror одновременно эквивалентна rotate=180
saveformat=jpeg|ogm|avi 
формат для записи видео (jpeg, ogm - только для rtp/mjpeg через ElphelOgm)

Динамически изменяемые переменные (можно указывать и как параметры тегов)

href 
url файла или потока;
src 
пока просто другое имя для href;
pause=1 или play=0 
приостановить проигрывание;
pause=0 или play=1 
продолжить проигрывание;
filepos=sec 
переместиться на указанное время от начала в секундах или в процентах, может не работать, если mplayer по этому файлу не перемещается;
framestep=что-нибудь 
показать следующий кадр и остановиться (пошаговый просмотр);
run=1 
запустить плеер если он прекратил работу (по ошибке или концу файла);
run=0 
завершить плеер;
save 
запустить запись вместо показа;
save=ask 
всегда спрашивать имя файла для записи;
save=auto 
не спрашивать если пользователь укажет в диалоге.

Переменные статуса

Это то что выдаёт mplayer или mencoder, в настоящий момент стороки просто разделяются на две части по первому из символов '=' или ':'. То что слева - имя переменной (пробелы и нелатинские буквы удаляются), справа - значение.

frame 
сообщение плеера/рекордера о последнем кадре
error 
последнее сообщение об ошибке

информация о статических картинках (от display)

imgtype 
формат (JPEG, TIFF и т.д.)
imgsize 
размер картинки (например 800x600)
filelength 
длина файла (например 89kb)

Возможны другие но они пока не используются.

run 
особая переменная - состояние плеера 0 - незапущен, 1 - запущен, для режима записи становится в 0 когда пользователь отказался указать файл;
pause, play 
аналогично - состояние приостановки проигрывания, в том числе и по framestep.

Callback функции

По приходу данных от плеера они передаются в переменные объекта и становятся доступны из javascript. При этом если задана соответствующая функция с именем "on<имя переменной>", она будет вызвана.

onrun
вызывается по запуску и остановке видеоплеера или процесса записи
onerror
по приходу сообщения об ошибке
onframe
при очередном кадре
onmousedown и др стандартные callback функции
уже предоставлены браузером и не нуждаются в какой-то обработке внутри плагина

Back-end программы

В настоящий момент задействованы:

  • mplayer (компилировать с live555);
  • mencoder из пакета mplayer;
  • ElphelOgm - для получения mjpeg видео по чистому multicast или unicast rtp;
  • display из пакета ImageMagick - для показа статических картинок;
  • ooffice (OpenOffice.org) для показа документов.

Чтобы задействовать ElphelOgm, должен быть установлен mime-type начинающийся с video/m и URL должен быть вида: rtp://ip:port/ , где:

ip -
multicast ip потока
port -
multicast port

Unicast тоже можно принимать, для этого указывается адрес и порт получателя, и сервер также должен быть сконфигурирован чтобы постоянно слать udp видеопоток на этот адрес и порт. Динамическое изменение URL не поддерживается для RTP. Вместо этого используйте последовательность команд: obj.run=0; obj.src=...; obj.run=1;

Поддерживаемые MIME-типы и вызываемые программы
MIME-тип Протокол Приложение

application/x-display image/tiff image/x-tiff image/x-tif image/sun-raster image/x-sun-raster image/x-rgb image/x-portable-pixmap image/x-portable-graymap image/x-portable-bitmap image/x-portable-anymap application/photoshop application/x-photoshop image/x-xcf image/xcf application/x-gimp application/gimp

http https ftp file display

video/ogg video/x-ogg application/x-elphel-ogm video/x-theora video/theora video/mpeg video/mjpeg video/x-mpeg video/x-mpeg2 video/quicktime video/x-quicktime application/x-quicktimeplayer video/msvideo video/x-msvideo application/x-drm-v2 application/x-mplayer2 video/x-ms-asf video/x-ms-wm video/x-ms-wmv video/x-ms-wvx video/sgi-movie video/x-sgi-movie video/dl video/x-dl video/sgi-movie video/x-sgi-movie video/anim video/x-anim video/fli video/x-fli

audio/mp3 audio/x-mp3 audio/mpeg2 audio/x-mpeg2 audio/mpeg3 audio/x-mpeg3 audio/mpeg audio/x-mpeg application/ogg application/x-ogg audio/ogg audio/x-ogg audio/x-ms-wax audio/wav audio/x-wav audio/x-pn-wav audio/x-pn-windows-acm

http https ftp file mplayer mencoder

application/x-elphel-ogm video/mjpeg

rtp mplayer ElphelOgm

application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.database application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.graphics-template application/vnd.oasis.opendocument.image application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.presentation-template application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.spreadsheet-template application/vnd.oasis.opendocument.text application/vnd.oasis.opendocument.text-master application/vnd.oasis.opendocument.text-template application/vnd.oasis.opendocument.text-web

application/vnd.sun.xml.calc application/vnd.sun.xml.draw application/vnd.sun.xml.impress application/vnd.sun.xml.math application/vnd.sun.xml.writer application/vnd.sun.xml.draw.template application/vnd.sun.xml.calc.template application/vnd.sun.xml.impress.template application/vnd.sun.xml.writer.template application/vnd.sun.xml.writer.global

text/rtf application/rtf application/x-msword application/msword application/vnd.ms-excel application/vnd.ms-powerpoint application/mspowerpoint

http ftp file ooffice

Диагностика ошибок установки

Запустите скрипт mplayer.pl из командной строки. Он находится в /usr/lib/genres. Если все необходимые perl модули установлены, он должен напечатать несколько строк вида: "переменная=значение" и ожидать ввода. Если вместо этого вы получите сообщение "Can't locate Gtk2.pm in @INC" значит необходимо установить этот модуль из вашего дистрибутива или с CPAN. Другие ссылки: проект gtk2-perl, gtk2-perl на CPAN, gtk2-perl на freshmeat.

Введите параметры как они представлены в HTML теге, но только по одному на строке и в конце добавьте run=1. Например:

type=video/mjpeg
url=rtp://232.168.0.9:20000/
run=1

Если MPlayer запустился, то эта часть работает, попробуйте посмотреть страницу примера входящую в состав пакета genres с помощью браузера mozilla или firefox. Если вместо окна с видео вы видите серый прямоугольник, значит возможно надо исправить URL на доступный.

Проверьте список установленных плагинов: about:plugins если GenReS отсутствует, возможно genres.so лежит не втом месте.

Плагин выдаёт много отладочной информации. Для её сбора запустите firefox из командной строки с перенаправлением вывода в файл. Mozilla надо запускать с ключом -debug:

mozilla -debug >& moz.log

Если причина не ясна, сожмите файл с помощью Gzip или bzip2 и отправьте мне на изучение.

--Sergey Khlutchin 15:49, 11 February 2006 (CST)

Создание управляющих скриптов

Для каждого тэга плагин запускает отдельный процесс-посредник. Обмен данными осуществляется через трубы (стандартные для юникса неименованные каналы). Для процесса-посредника каналы присоединены к стандартным вводу и выводу. Стандартный вывод ошибок совпадает со стандартным выводом. Файловый дескриптор №3 открыт для ввода (так же через трубу) данных из файла, на который указывает параметр тэга SRC. (Этот параметр распознаётся браузером.) Если он содержит URL с поддерживаемым протоколом и включен параметр mozillastreams, файл будет передаваться через эту трубу. Данные через стандартные ввод/вывод передаются в виде текстовых строк по одной команде в строке.

Команды от плагина скрипту
имя=значение переменной тэга было присвоено значение

(фактически в javascript остаётся старое значение до ответа скрипта);

. конец блока начальных значений параметров тэга;
PRINTEMBED требуется напечатать страницу содержащую тэг, в ответ следует передать данные в формате postscript;
PRINTFULL запрос печати для объекта в полном окне, все операции должен выполнить сам скрипт (включая диалоги);
EOF конец файла переданного через дескриптор №3 (труба не закрывается для возможности повторной передачи по запросу).
Команды от скрипта плагину
имя=значение присвоить значение параметру тэга, после чего будет вызвана функция (если определена) onимя();
OPEN послать с начала файл (через дескриптор №3), на который указывает параметр SRC;
CLOSE закрыть трубу со стороны плагина (скрипт больше не сможет пользоваться дескриптором №3);
AUTOCLOSE автоматически закрывать трубу при окончании файла данных;
DESTROY закрыть поток файла данных браузера;
{javascript} выполнить скрипт в контексте объекта тэга.