LINUX.ORG.RU

FreshPlayerPlugin — PepperFlash в Firefox

 , , , , ppapi


55

41

Flash плеер всё заменяют и заменяют, но никак не заменят полностью. Новые и сверхновые фичи браузеров это замечательно, но Flash бывает всё ещё нужен. К сожалению, доступная NPAPI браузерам версия застыла на 11.2, а новые версии выходят только в составе Chrome. Поэтому я делаю адаптер, который сможет быть посредником между PPAPI плагином и NPAPI браузером. Это такая штука, которая позволит использовать свежий Flash в Firefox, Opera и других браузерах, в которых работают плагины.

https://github.com/i-rinat/freshplayerplugin

★★★★★

Последнее исправление: i-rinat (всего исправлений: 6)

Ответ на: комментарий от Gonzo

А у меня почему-то с «enable_3d = 1» пропадают контролы с видео :(

Я в ветке gles-emul прикрутил транслятор шейдеров из ANGLE. Попробуй — оно на nVidia работает? Ещё было хорошо на вот этой игрушке потестить, она активно 3d использует.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

в ветке gles-emul

Влил в основную.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Оно работает, но контролов нет все равно при включенном 3D.

P.S. Игрушка жесть: тормоза жуткие и заикания звука :(

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

Игрушка жесть: тормоза жуткие и заикания звука

А у тебя случайно не включены трассировочные сообщения? У меня на встроенном intel HD 4000 все 60 fps, причём загружено только 20% GPU.

Может, 3d и вовсе не работает, а всё рисуется на процессоре.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

Что это и с чем его едят?

Если при конфигурации указать -DTRACE_ALL=1, в stdout будет записываться каждый вызов API, с параметрами. В флешках с 3d там легко может быть 1-2 мегабайта в секунду. Во время каждой записи захватывается блокировка, так что флешка начинает подтормаживать.

У меня отлично бегает OpenArena/Quake III с 125 fps :}

Имеется в виду, что в переходнике 3d не работает. Например, не получилось контекст с нужными параметрами создать.

i-rinat ★★★★★
() автор топика
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

ну да))

я поэтому и меняю ее на значение false если надо протестировать чего, так видно весь выхлоп вместе.

vitalikp
()

Добавил поддержку захвата видео с вебкамеры. Пока что только /dev/video0.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Про пермишшны не забыли? :-) У пепперфлеша же вроде графической конфигурялки нету, как у адобовского, тут можно как-то настройки задавать?

MiniRoboDancer ★☆
()
Ответ на: комментарий от MiniRoboDancer

пермишшны

Flash сам спрашивает разрешения, причём в некоторых случаях — каждый раз, без возможности разрешить раз и навсегда. Замучался при отладке эти мелкие кнопки клацать. Через браузер спрашивать, чтобы строка сверху вылезала, вряд ли получится, такого API я не нашёл. Разве что сразу через JS API поток запрашивать.

тут можно как-то настройки задавать?

Вот тут можно: http://www.macromedia.com/support/documentation/ru/flashplayer/help/settings_...

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от BeerSeller

Правда баг и в стандартном flash
надо копать.... Только где.

BeerSeller ★★★★
()

Часто стал падать сам плагин. Вместо видео просто такое сообщение. Как отловить лучше? Откатился на версию 0.2.3, так как помню, что тогда у меня все работало вообще без вопросов, плюс не надо править конфиг и все эти «enable3d». Посижу пока так.

Gonzo ★★★★★
()

Вернул версию 0.2.4, удалил папку freshwrapper-data, в конфиге выставил только «enable_3d = 0», не трогал больше ничего (обычно правил еще «enable_hw_video_decode=0» и «enable_stagevideo_auto=0») и пока не падает, уже час смотрю разные сайты с флешевым видео.

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

Часто стал падать сам плагин.

Падает внезапно или сначала зависает?

Как отловить лучше?

Запускать браузер из терминала, предварительно сделав там ulimit -c unlimited

Я обычно настраиваю систему так, чтобы корки всегда создавались, без необходимости запуска ulimit вручную.
В файл /etc/sysctl.d/coredumps.conf записать

kernel.core_pattern=/tmp/core_%E_%t_sig=%s_pid=%p
В файл /etc/security/limits.d/always_create_coredump.conf записать:
*   -    core  unlimited

Скорее всего, нужно перезагрузиться. Возможно, пересоздать initrd, этого точно не помню. После таких настроек core файлы всегда будут создаваться в /tmp под именами, зависящими от имени программы, времени завершения, причине завершения и pid.

А дальше как обычно:

gdb /usr/lib/firefox/plugin-container /tmp/core_что-то-там
и в нём thread apply all bt.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Падает внезапно или сначала зависает?

Вместо видео - сообщение, что плагин крэшнулся (картинку я выше показал).

Я все делал по твоей инструкции, которую ты описывал ранее в треде. У меня получались раньше кор файлы когда крэшился браузер. Просто если бы упал ФФ, то создался бы кор, а так его там нет, ибо ФФ-то жив и здоров. Стоит нажать F5 на страничке, и видео работает. Такие дела.

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 4)

Удалил Adblock Plus в пользу uBlock и теперь не могу воспроизвести крэш флеша. (сегодня как раз прочитал о расширении на ЛОРе). У меня была связка NoScript + Adblock Plus.

Gonzo ★★★★★
()
Ответ на: комментарий от BeerSeller

О, за umatrix спасибо! Надо поковыряться :)

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

Просто если бы упал ФФ, то создался бы кор, а так его там нет, ибо ФФ-то жив и здоров.

Падающий plugin-container тоже корку создаёт. А вот если браузер процесс по таймауту завершает, то core файл не образуется. Я вот вспомнил — ты же таймауты в одну секунду поставил. Может плагин в эту секунду просто не укладывается?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Ты про dom.ipc ? Ок, попробую оттестить. Но я пытался создать кор еще до конфига ФФ. Может и неделю назад, не помню, просто не писал об этом: он крэшился рандомно, и я не связывал его конкретно с Freshplayer. Хз, может адоб с гуглом что-то наплужили (я обновляю chrome постоянно), а у меня ж еще связка расширений в ФФ - так что тут причин падений может быть море :)

Gonzo ★★★★★
()
Ответ на: комментарий от i-rinat

Сразу не займусь этим, т.к. работы своей хватает. Попробую вечером дома, если что - отпишусь.

Gonzo ★★★★★
()

Отловил... Кор файл нигде не создается, как я и говорил уже. Его просто нет (раньше, когда ФФ падал, то кор создавался там, где я и запускал браузер).

Итак, по порядку:

1) зашел сюда: http://www.ex.ua/75484722
2) нажал «Играть» напротив первой серии

Браузер повис, ни на что не реагируя. На conky справа видно, что проц отдыхает.

3) попытался закрыть браузер: сработало не сразу, но он не закрылся, а просто выдал крэш флеша и выплюнул в консоль такое.

Freshplayer собран с дебагом, «kernel.core_pattern=core», все как и положено.
Что скажешь?

Gonzo ★★★★★
()

Повторюсь: баг отловить просто так нереально. Он то есть, то его нет. Иногда может встретиться и 1:5 (один раз из пяти клацаний на флеш ролики), а может и раз в сутки. Независимо от источника, сайта и т.д: это может быть главная youtube, встроенный видос в фейсбуке, либо просто переход на сайт с видео.

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 1)
Ответ на: комментарий от Gonzo

Что скажешь?

Он подвисает, а браузер его прибивает. Это объясняет тот факт, что корки нет. У меня в коде есть одно место, в котором я видел зависания. Там посылается сообщение вспомогательному окну, и происходит его ожидание. Может сообщение не проходит, а может проходит ещё до того, как я их слушать начинаю. Что интересно, у меня на основной системе никогда не воспроизводилось, только в виртуалках.

Попробую поменять способ пересылки сообщений.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

У меня 31.7.0 ESR, если что. Хз, может это какой-то бок фаерфокса... Оно началось как-то вообще внезапно у меня, после установки Debian Wheezy начисто на обеих машинах.

Gonzo ★★★★★
()
Ответ на: комментарий от i-rinat
[ 87%] Building C object src/CMakeFiles/freshwrapper-obj.dir/ppb_video_capture.c.o
/home/username/freshplayerplugin/src/ppb_video_capture.c: In function ‘video_device_is_usable’:
/home/username/freshplayerplugin/src/ppb_video_capture.c:112:55: error: ‘V4L2_CAP_DEVICE_CAPS’ undeclared (first use in this function)
/home/username/freshplayerplugin/src/ppb_video_capture.c:112:55: note: each undeclared identifier is reported only once for each function it appears in
/home/username/freshplayerplugin/src/ppb_video_capture.c:112:83: error: ‘struct v4l2_capability’ has no member named ‘device_caps’
/home/username/freshplayerplugin/src/ppb_video_capture.c: In function ‘ppb_video_capture_open’:
/home/username/freshplayerplugin/src/ppb_video_capture.c:234:55: error: ‘V4L2_CAP_DEVICE_CAPS’ undeclared (first use in this function)
/home/username/freshplayerplugin/src/ppb_video_capture.c:234:83: error: ‘struct v4l2_capability’ has no member named ‘device_caps’
make[2]: *** [src/CMakeFiles/freshwrapper-obj.dir/ppb_video_capture.c.o] Error 1
make[1]: *** [src/CMakeFiles/freshwrapper-obj.dir/all] Error 2
make: *** [all] Error 2
Gonzo ★★★★★
()

Кстати, для Debian можешь указать обновленный список зависимостей на моменте:

git cmake pkg-config libasound2-dev libglib2.0-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev liburiparser-dev libcairo2-dev libpango1.0-dev libfreetype6-dev libgtk2.0-dev libconfig-dev libevent-dev libgles2-mesa-dev libegl1-mesa-dev ragel libssl-dev libv4l2-dev

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

Оказывается, этот флаг только в 2012-м добавили. А я думал, что там десятилетие ничего не менялось. Добавлю обходной путь.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

Кстати, для Debian можешь указать обновленный список зависимостей на моменте

libglu1-mesa-dev не используется. liburiparser-dev и libegl1-mesa-dev больше не используются. Первый я заменил самописным парсером, более толерантным, а вместо EGL теперь используется GLX. (С EGL почему-то везде проблемы, даже у intel с Mesa). Пакета libv4l2-dev нет, но есть пакет libv4l-dev, в нём библиотеки и для V4L и для V4L2.

У меня вместо libgtk2.0-dev было libgtk+2.0-dev, но нужный пакет всё равно ставился.

i-rinat ★★★★★
() автор топика
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Пакета libv4l2-dev нет, но есть пакет libv4l-dev

Да, сорри, опечатался случайно. Отсебятина :) Ставил именно libv4l-dev.

Gonzo ★★★★★
()

Объясни еще плиз, что такое в конфиге «enable_windowed_mode» и «tie_fullscreen_window_to_browser» ?
И вообще, стоит ли трогать все эти параметры, ну кроме разве что «enable_3d» :)

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Спасибо. Или мне кажется, но вроде youtube и прочие стали отзывчивее. Единственное, что сыпется в консоль это строчки:

[fresh] [error] execute_script_ptac, NPN_Evaluate failed
Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

enable_windowed_mode

В NPAPI есть два режима работы плагинов, windowed и windowless. В windowed у плагина своё окно, а в windowless, соответственно, нет. До этого всё работало в windowless варианте, но там не работают колёсико мыши и Input method editors (IME). Для них нужно своё окно, то есть windowed режим.

Этот параметр в конфиге включает использование windowed режима. Смысла выключать нет.

tie_fullscreen_window_to_browser

При переходе в полноэкранный режим создаётся новое окно и создаются подсказки оконному менеджеру — распахнуться на весь экран и быть модальным к окну браузера. В результате создаётся ощущение, что это окно браузера стало полноэкранным.

Если выключить, то окно будет отдельным. Этот параметр нужен для работы под особой сборкой Enlightment. Там оконный менеджер не хочет раскрывать модальные окна на весь экран. Выключение этого параметра помогает. Alt-Tab у них там в принципе отключен.

Нагляднее всего будет просто попробовать.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

но вроде youtube и прочие стали отзывчивее

Вполне возможно. Для windowed плагинов запускается отдельный поток, поэтому основная нить браузера реже блокируется.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Dmitry_Sokolowsky

не собрался из-за отсутствия файла pulseaudio.h

Такое может быть, если во время конфигурирования пакет libpulse-dev был установлен, а во время сборки — уже нет. Попробуй удалить содержимое директории build и сконфигурировать заново.

Возможно, сработает просто запуск cmake .., без очистки.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от BeerSeller

из-за enable_xembed=1

Это на версии из git'а? Есть возможность проверить, с какого коммита началось?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

Я заметил, что много где часто говорят про «версию из git'а», имея в виду самый свежий срез из master или другой основной ветки.

i-rinat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.