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)

freshplayerplugin/src/ppb_var.c:250:17: error: implicit declaration of function 'g_hash_table_get_keys_as_array' [-Werror=implicit-function-declaration]

В Fedora 20 glib-2.38.2, а 'g_hash_table_get_keys_as_array' появляется в 2.39

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

Убрал использование этой функции. Теперь вновь должно собираться.

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

Отлично! Спасибо. Freshplayer все лучше и лучше )

Gonzo ★★★★★
()

Собрал, потыкал, вроде стабильно работает даже на жирных играх со звуком. Спасибо за перечень зависимостей для сборки в README — это редкость. Напрягает только, что пакет с pepperflash выкачивает целый хром и выковыривает из него — на варез-сайтах плагин отдельно есть?

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

Напрягает только, что пакет с pepperflash выкачивает целый хром и выковыривает из него — на варез-сайтах плагин отдельно есть?

Видел такое, только не понял смысла — они же все древних версий. Гораздо проще поставить Chrome и обновлять его пакетным менеджером. В этом случае PepperFlash обновляется вместе с Chrome'ом.

У Chrome есть обновлялка компонентов, для быстрой установки свежих версий плагинов. Но насколько я знаю, PepperFlash под Linux так не обновляется.

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

Как там дела с аппаратным ускорением?

3d включается строчкой exp_enable_3d = 1 в ~/.config/freshwrapper.conf, но работает только на intel адаптерах. На nVidia и AMD какие-то сложности с EGL. Прозрачность плагина не работает при выводе через 3d.

Аппаратное декодирование (#24) не реализовано. В Chrome оно выключено, так что я даже не знаю, будет работать или нет.

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

А микрофон и вебкамера еще не реализованы?

Нет, ни микрофон, ни вебкамера пока не работают.

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

они же все древних версий

Всяко новее 11.2 же.

Гораздо проще поставить Chrome

Зонд. Хорошо, что у гнёвой версии хотя бы автообновлений нет.

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

Там есть cron задание, по крайней мере, для Debian. Я, правда, не ставлю Chrome, он мне не нужен. Скачал .deb пакет, вытащил оттуда PepperFlash и все.

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

Там есть cron задание

Ну, это ещё не так страшно, как требующий хардкорного блокирования GoogleUpdate.exe. Мало того, если его с концами заблочить — Хромог через основной процесс обновляться начинает. Помогает только фаервол.

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

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

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

Жесть... На офтопике юзаю портабл только, потому не скажу ничего.

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

что на открытых интеле что на радеоне лесенка их артефактов видна вместо видео на ютубе, без 3д ускорения все гуд.

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

лесенка из артефактов видна вместо видео на ютубе

Какой дистрибутив у тебя? Пакеты стандартные из реп или особые?

i-rinat ★★★★★
() автор топика

Какова стабильность на x86 на данный момент?
Попробовал на своём A10.
Работает. Производительность устраивает. Только на всех нужных и не очень роликах замирает весь браузер (либо через секунду после запуска, либо через несколько минут) и через некоторое время пишет, что flash крашнулся.
Перед крашем повторяется
[fresh 2856] [PPB] {fake} ppb_audio_input_dev_enumerate_devices
Раз в секунду, пока firefox висит.
При краше ничего не выводится. Есть предположение, что firefox кикает плагин по таймауту.
Как отлаживать не знаю (по идее надо как-то подцепить gdb к плагину, но как?)
Видео так и не смог проверить оно виснет сразу. Некоторые flash-игрушки запускаются.
Возможно стоит использовать другие версии.

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

Какова стабильность на x86 на данный момент?

У меня достаточно стабильно. Из крэшей пока не починил только падение на tv.sohu.com. Там что-то странное творится и падает вообще глубоко внутри libpepflashplayer.so.

Раз в секунду, пока firefox висит.

Это нормально, он раз в две с половиной секунды опрашивает устройства ввода, но их поддержки не реализовано. На стабильность работы это не должно влиять.

Как отлаживать не знаю (по идее надо как-то подцепить gdb к плагину, но как?)

Для начала надо в firefox увеличить таймауты: dom.ipc.plugins.timeoutSecs и dom.ipc.plugins.processLaunchTimeoutSecs, чтобы хватало времени на исследования. Потом, при запущенном Firefox определяешь pid хоста для плагинов: ps -C plugin-container и цепляешься к нему: gdb --pid <plugin-container-pid>

Скорее всего, где-то взаимная блокировка. Её сразу видно, если в бектрейсе есть pp_resource_acquire. В таком случае я смотрю, какая нить захватила мьютекс и пытаюсь понять, где забыл поставить pp_resource_release. Может случиться так, что все потоки ждут conditional variable. В этом случае сложнее, так как где-то потерялось задание, которое завершало вложенный цикл обработки сообщений. На стеке его уже не найти.

Имеет смысл перекомпилировать переходник с cmake -DTRACE_ALL=1 .., так в консоль будут вываливаться все трассировочные сообщения, а не только сообщения от нереализованных функций.

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

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

Ok, тогда попробую поставить 13.1 и обновить из репы.

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

Уже понял. strace показал, что падает по sigterm, gdb - по sigtrap(WHAT?). При dom.ipc.process.enabled=false работает (хотя с сегфолтами), однако рисуется в левом верхнем углу страницы. Проверил на обычном flash - в нём такого глюка нет, так что стоит разобраться.

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

Отмена таймаутов никак не помогает - вечная блокировка на g_cond_wait_until. Т.к glib не отладочный, дальше не видно.

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

Отмена таймаутов никак не помогает

Отмена таймаутов нужна только для того, чтобы Firefox не прибил процесс plugin-container.

вечная блокировка на g_cond_wait_until

Ну стало быть где-то потерялось задание, завершающее цикл. С ходу сложно сказать, где и почему.

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

Cделал трассировку без ipc и с ipc.
В первом варианте зацикливания нет, но картинка отображается не там, где нужно.
fresh-ipc: http://pastebin.ca/2836697
fresh-noipc: http://pastebin.com/k3dQvvQV

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

но картинка отображается не там, где нужно.

А я и не знал, что в Firefox'е можно отключить отдельный процесс для плагинов и пускать их прямо в основном.

Добавил поддержку ненулевой исходной точки, теперь внутрипроцессный плагин отрисовывается нормально.

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

Когда-то firefox только так и делал, не стесняясь крашиться по пустякам.
Сейчас пытаюсь приделать nspluginwrapper. Пойдёт как замена, если не будет зависать.
nspluginviewer пока что не может выполнять функции в потоке браузера.

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

Надо проверять в функции ppb_core_call_on_browser_thread npn.pluginthreadasynccall перед выполнением, иначе в nspluginviewer прыгает в 0.

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

Надо проверять в функции ppb_core_call_on_browser_thread npn.pluginthreadasynccall перед выполнением, иначе в nspluginviewer прыгает в 0.

Я боюсь, что фикс будет в стиле: «Сказал вебмастеру, что его сайт работает только в IE6 — на следующий день появилась кнопочка «Сайт оптимизирован для работы в IE6». Ну и что делать, если нет NPN_PluginThreadAsyncCall? На танцы с нитями всё завязано. Ну и не такое уж и новое это API, ему уже больше семи лет.

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

Кстати, добавил проверку на версию NPAPI.

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

A Конечно, варезные зонды — это уже не зонды :->

Таки полагаешь, оно данные гуглю с адобой отсылать перестанет?

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

Плагин хотя бы от интернетов можно огородить. Ибо целый браузер блочить сложно — без подключения к интернетам он нахрен не нужен. А флешу в интернеты соваться обычно незачем — файл получил, открыл, щелчки по ссылкам в браузер передаются. Бывают всякие игроклиенты, например, которым инет нужен, но это редкость.

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

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

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

Плагин хотя бы от интернетов можно огородить.

У меня для тебя плохие новости. Flash активно использует потоки, то есть может делать любые GET/POST запросы. Он даже исходный ролик предпочитает сам выкачивать. В довесок используются и прямые TCP/UDP, в обход браузера. Если ему отрезать инет, он просто не сможет работать.

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

Ну это проблемы плееров всяких. На флеше достаточно много самобытных приложений, которые даже вне браузера можно запускать. Кстати, аналог оконного плеера в виндовом флеше будет? А то подобного под гню не делал, такое есть только в гнэше, но то ж гнэш...

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

Если кто-нибудь починит nspluginviewer, то будет.

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

Midori с ним вообще не стартует.

Какая версия Midori? (У меня на 0.4.3 подхватывает плагин и работает.)

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