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)

Merge branch 'BtbN-cmake_pa'

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

if (PULSEAUDIO_FOUND)
    add_definitions(-DHAVE_PULSEAUDIO=1)
    message(STATUS "  found PulseAudio (optional), version ${PULSEAUDIO_VERSION}")
else()
    message(STATUS "  no PulseAudio found (optional)")
endif()

Еще бы опцию сюда сделать, а то отключение PulseAudio таким параметром -DCMAKE_DISABLE_FIND_PACKAGE_PulseAudio=1 не очень удобна. Но это уже чисто для красоты наверное, не более.

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

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

Почему бы и нет. Добавил соответствующий патч.

Еще бы опцию сюда сделать

Это бы хотелось избежать. Я вообще не вижу особых причин собирать без некоторого необязательного компонента, если он всё равно уже найден. На случай, если от PulseAudio будут только библиотеки, а его самого не будет, есть обходной путь в коде.

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

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

например, кто-то поставил pulseaudio на потыкать длинной палкой, потом решил собрать твой плагин, затем снёс pulseaudio, и плагин отвалился из-за отсутствующей библиотеки. поищи по багзилле генты automagic

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

а что это за опция enable_stagevideo_auto

Нашёл где-то в недрах ChromeOS, когда экспериментировал с интерфейсом аппаратного декодера. Брал всю строку целиком, так как не знаю, какой именно эффект от этой настройки.

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

Уже успел вернуться обратно на pkg-config и добавить параметр WITH_PULSEAUDIO=0 в cmake скрипты, которым можно игнорировать установленную PulseAudio.

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

крэш плеера

вот на этой странице флеш крашится http://www.iwatchonline.to/play/2788051 после нажатия в плеере на значок play (либо даже сам по себе через раз). крэш возможно происходит когда мышь над окошкем флеша при его загрузке.

pepflash 17.0.0.134.

freshplayerplugin 0.2.3+git20150317.

вот еще пример такой страницы: http://www.iwatchonline.to/play/2787936

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

Настройки читаются из текстового файла ~/.config/freshwrapper.conf (или /etc/freshwrapper.conf). Список настроек и их значения по умолчанию можно посмотреть в репозитории, в файле data/freshwrapper.conf.example.

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

не получается получить по инструкции файл core (возможно потому что fresh без debug). попробуй crash вызвать и сам: там раза 2 достаточно перезагрузить страницу и нажать кнопочку до появления видео, чтобы оно упало. мышь должна быть при появлении флеша поверх видео как я понял.

кстати наблюдаю такой лог (2-3 загрузки страницы с флешем, на последней крэш): http://pastebin.com/n9H1qy52

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

попробуй crash вызвать и сам

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

Собственно поэтому я и спрашивал backtrace. Если падает в libdrm, то единственное, что можно сделать — обновить эту библиотеку. В других случаях надо думать. Но надо хотя бы примерно знать, где падает.

кстати наблюдаю такой лог

ppb_graphics3d_create, some of GLX_ARB_create_context, GLX_ARB_create_context_profile, GLX_EXT_create_context_es2_profile missing

В выводе glxinfo в блоке «server glx extensions» такие расширения есть? Какие видеокарта и драйвер? Скорее всего 3d у тебя не задействовано, поэтому падения в libdrm маловероятны.

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

server glx extensions: GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_OML_swap_method, GLX_SGI_swap_control, GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_INTEL_swap_event

OpenGL vendor string: Tungsten Graphics, Inc OpenGL renderer string: Mesa DRI Intel(R) G33 x86/MMX/SSE2 OpenGL version string: 1.4 Mesa 8.0.4

видеокарта встроенная только: 00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10)

драйвер i915:

$ sudo lshw -c video

*-display description: VGA compatible controller

product: 82G33/G31 Express Integrated Graphics Controller

vendor: Intel Corporation

physical id: 2

bus info: pci@0000:00:02.0

version: 10

width: 32 bits

clock: 33MHz

capabilities: msi pm vga_controller bus_master cap_list rom

configuration: driver=i915 latency=0

resources: irq:41 memory:fea80000-feafffff ioport:dc00(size=8) memory:e0000000-efffffff memory:fe900000-fe9fffff

а фиг его знает это 3D, работает оно или нет. мне оно все равно не надо особо.

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

а фиг его знает это 3D, работает оно или нет. мне оно все равно не надо особо.

Нет, не работает. Если OpenGL|ES 2 есть, флеш масштабирует картинку через него, нагрузка на CPU снижается, особенно в полноэкранном режиме.

Mesa 8.0.4 — довольно старая версия. Возможно в более свежих есть поддержка OpenGL|ES 2 на этом железе, хотя уверенности нет.

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

чтобы обновить mesa до 10.1.0 мне желательно обновить убунту полностью с 12.04 до 14.04, иначе иксы могут неожиданно перестать работать. пока что у меня 12.04, часть пакетов которой мутировала в 14.04. пока что обновляться не буду, процессор справляется обычно, правда бывают иногда следы того что не справляется. и в новых версиях драйверов обычно вместо добавления поддержки чего-то хорошего вырезают поддержку нормальную старых видеокарт (у меня на другом компе из-за этого перестало работать ускорение графики, и чтобы заработало надо ставить обратно очень старую убунту).

так почему у меня core файл не создался после ulimit -c unlimited? нужно собрать freshplayerplugin с debug-инфой, чтобы он появился? там еще писало что plugin-container без debug инфо. я использовал freshplayerplugin из ppa:nilarimogard/webupd8 и pepflashplugin-installer из ppa:skunk/pepper-flash .

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

так почему у меня core файл не создался после ulimit -c unlimited?

Возможно нет прав на запись в текущую директорию, или apport перехватывает core файлы.

нужно собрать freshplayerplugin с debug-инфой, чтобы он появился?

Debug информация очень полезна, без неё не видно имён функций. Но на сброс core файла её наличие не влияет.

там еще писало что plugin-container без debug инфо

От plugin-container отладочная информация не обязательна.

i-rinat ★★★★★
() автор топика
Ответ на: крэш плеера от mvitamin

http://www.iwatchonline.to/play/2787936

Подтверждаю крэш. Но есть один лол: делаю все, как надо по инструкции:

1) ulimit -c unlimited
2) firefox
3) http://www.iwatchonline.to/play/2787936
4) И нет крэша.

То есть ваще ничего :) Черный квадрат вместо видео и никаких ошибок. Соответственно никакого core нигде нет «под ногами».

Что я делаю не так? :)

З.Ы: Freshplayer собран с «cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..»
З.Ы.Ы: kernel.core_pattern=core у меня по дефолту в системе

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

Но падает таки через раз. Второй раз тоже самое проделал - вместо видео - черный квадрат, но со звуком. Правда, чтобы «видео» начало проигрываться надо клацнуть по нему мышкой.

Запуск FF (31.5.3) из консоли выдает еще такое:

NOT SANDBOXED
[fresh 6197] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [error] pulse_available, can't connect to an audio server
[fresh] [error] pulse_available, can't connect to an audio server

Но, думаю, это несущественно.

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

Тю, у меня с этой дебажной версией вместо любого видео - квадрат Малевича, но со звуком :(
Без дебага все ок.

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

Епрст, сорри за флуд...

Что-то коммитилось «веселое» на днях, но теперь приходится юзать конфиг и отключать:

flash_command_line = «enable_hw_video_decode=0,enable_stagevideo_auto=0»

На всякий случай отключил еще:

enable_3d = 0

Предыдущую версию из гита собирал 21-го числа в 20:00. Все было нормально с дефолтными настройками без всяких конфигов. Жаль, уже не сохранился билд, перезатер, ну да ладно...

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

на гитовом nouveau работает только с enable_3d=0, иначе показывает пискельный мусор/куски старых окон на vk.com, на z0r.de не перерисовывает изображение, но если окно ресайзить, то перерисовывает. на блобе при этом работает нормально, и на nouveau при этом всякая 3d yoba работает без косяков

(process:32483): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 32592] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh 32592] [PPB] {fake} ppb_video_capture_enumerate_devices
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices
[fresh 32592] [PPB] {zilch} ppb_network_monitor_update_network_list
[fresh 32592] [PPB] {zilch} ppb_text_input_interface_set_text_input_type instance=10, type=PP_TEXTINPUT_TYPE_DEV_NONE
[fresh 32592] [PPB] {fake} ppb_video_capture_close

** (firefox:32483): CRITICAL **: gst_app_src_set_size: assertion 'GST_IS_APP_SRC (appsrc)' failed

** (firefox:32483): CRITICAL **: gst_app_src_set_size: assertion 'GST_IS_APP_SRC (appsrc)' failed
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices
[fresh 32592] [PPB] {zilch} ppb_text_input_interface_set_text_input_type instance=10, type=PP_TEXTINPUT_TYPE_DEV_NONE
[fresh 32592] not implemented: PPB_VideoDecoder(Dev);0.16
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices
[fresh 32592] [PPB] {zilch} ppb_text_input_interface_cancel_composition_text instance=10
[fresh 32592] [PPB] {zilch} ppb_text_input_interface_set_text_input_type instance=10, type=PP_TEXTINPUT_TYPE_DEV_NONE
[fresh 32592] [PPB] {fake} ppb_audio_input_enumerate_devices

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

Подтверждаю. Пишал выше постом про отключение «enable_3d = 0». Так вот фишка по ходу в этом. «enable_hw_video_decode=0,enable_stagevideo_auto=0» не играют роли.
У меня, правда оф. дрова NVidia, версия 304.125.
Результат - просто черный экран, но со звуком.

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

Это то, что надо?

Да, похоже на то. По всей видимости, дело в последовательности вызовов. Из-за двух раздельных главных потоков (один от браузера, другой созданный для плагина) последовательность вызовов не такая, как в Chrome. Поэтому иногда один callback вызывается ещё до того, как другой подготовит для него данные, после чего всё весело падает.

Исходников PepperFlash нет, так что можно только гадать, что пошло не так.

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

Что-то коммитилось «веселое» на днях

Убрал пляски с чтением pixmap'а в текстуру, сделал всё через XRender и включил enable_3d=1 по умолчанию. Но это было пару недель назад, если не раньше.

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

Ясно, а почему вдруг перестало видео отображаться без enable_3d = 0? Вон выше чел пишет, что у него наоборот все вообще: в блобе пашет, в nouveau - нет.

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

Странно тогда. У меня билд от 21-го марта (нашел кстати его у себя), всего пару дней назад, и все работало без конфигов.

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

Плагин таки крэшнулся, правда со второго или третьего раза.

Gonzo, mvitamin, попробуйте ещё раз с кодом из dev ветки. В ней задания для основной нити помещаются на самый глубокий уровень, что фактически заставляет их выполняться в порядке регистрации.

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

с LIBGL_DRI3_DISABLE=1 работает без enable_3d=0

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

Сорри, сегодня вечером доберусь. На работе Debian Squeeze, плагин не соберется.

Gonzo ★★★★★
()

Кстати, без «enable_3d = 0» нет контролов на видео ютуба, а на некоторых сайтах со встроенным видео чтобы заиграло видео надо клацнуть по нему мышкой...

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

Successfully crashed

Оказалось, что предыдущие изменения по сути ничего не поменяли. Я сделал соответствующие правки (в ветке dev). Можешь ещё раз проверить?

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

может мне кажется, но я вижу в бэктрейсе Gonzo бесконечный вызов некой функции внутри libpepflashplayer.so, который в конечном итоге приводит к падению.

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

Вот сейчас вроде норм. Несколько раз рефрешил страницу и перезапускал ФФ - не падает пока. Единственное, что мешает, это то, что без конфига не отображает видео, только звук. Если подложить конфиг с «enable_3d = 0», то появляется и картинка и контролы флеша.
Сорри, иду спать ибо валюсь с ног уже :(

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

бесконечный вызов некой функции внутри libpepflashplayer.so

25 вызовов это слишком мало для неограниченной рекурсии, тем более там нет явных повторов.

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

и вызовов слишком уж много

Там их ещё больше (это же C++ с его виртуальными методами), но из-за оптимизации хвостовых вызовов фреймы накладываются, и всю цепочку не видно.

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

c++ ничего не оптимизирует, он просто стандарт. оптимизирует компилятор

-foptimize-sibling-calls
Optimize sibling and tail recursive calls.
Enabled at levels -O2, -O3, -Os.

anonymous
()

Отловил странное падение в этой dev ветке :-/
Смотрел 9-ю серию тут: http://www.ex.ua/86445544 (не знаю, пустит ли вас, вроде как ua-ix только, но не уверен).
В общем, флеш завис намертво на 2/3 фильма. Пришлось рубануть процесс plugin-container.
Перезапустил ФФ и решил туда сразу перейти (запомнил, что зависло все на 34-й минуте), но при навигации по видео (достаточно даже просто рандомно клацнуть на любое место временной шкалы) плагин крэшится.
Во-первых, вот выхлоп в консоль:

firefox
NOT SANDBOXED
[fresh 7641] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [error] pulse_available, can't connect to an audio server
[fresh] [error] pulse_available, can't connect to an audio server
[7588] WARNING: pipe error (69): Connection reset by peer: file /builds/slave/rel-m-esr31-lx_bld-00000000000/build/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 450
###!!! [Parent][MessageChannel::InterruptCall] Error: Channel error: cannot send/recv
###!!! [Parent][MessageChannel] Error: Channel error: cannot send/recv
###!!! [Parent][MessageChannel] Error: Channel error: cannot send/recv
###!!! [Parent][MessageChannel] Error: Channel error: cannot send/recv
###!!! [Parent][MessageChannel::Call] Error: Channel error: cannot send/recv

А вот и backtrace: http://pastebin.com/HxPNFs0h

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

странное падение

Действительно странно — падает в libxul.so. Если бы была повреждена память, скорей бы упало в libmozalloc.so. Отладочные символы от Firefox'а есть?

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

подтверждаю, что с последней версией freshplayerplugin (dev ветка была перенесена в основную) крэш не удается здесь вызвать: http://www.iwatchonline.to/play/2787936 (видео от vidbull).

только я не совсем понял зачем заставлять параллельные потоки выполняться почти последовательно (или 100% последовательно?)? почему нельзя просто без потоков запускать последовательно?

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

зависание

однако если вызвать контекстное меню флеша правой кнопкой мыши, потом кликнуть внутри флеша левой кнопкой мыши, то происходит зависание флеша, либо браузера целиком.

mvitamin
()
Ответ на: зависание от mvitamin

то происходит зависание флеша, либо браузера целиком.

Пофиксил в d5d20f07.

почему нельзя просто без потоков запускать последовательно?

Вот как раз из-за таких зависаний. Браузер вызывает функции плагина внутри своего цикла обработки событий, поэтому пока плагин не вернёт управление, браузер подвисает. Интерфейс контекстного меню в PPAPI требует повторного вхождения в цикл обработки событий. Такой возможности в NPAPI нет, поэтому нужно либо запустить свой цикл прямо в функции плагина, что подвешивает и плагин и браузер, либо вынести работу с Pepper плагином в отдельную нить.

Первый вариант чреват падением plugin-container, Firefox с настройками по умолчанию его убивает через 45 секунд. То есть нажал правую кнопку мыши — видео сразу останавливается, через 5 секунд останавливается звук, ещё через 40 секунд plugin-container аварийно завершается браузером.

Второй вариант (сейчас используется) — отдельная нить для плагина и постоянные пляски с перекидываниями заданий туда-сюда и вложенными циклами. Без них система быстро подвисает в dead-lock, потому что часто плагин и браузер хотят что-то вызвать друг у друга одновременно.

В NPAPI нельзя вызывать функции браузера из произвольных потоков. Надо сначала запланировать выполнение функции в потоке браузера через вызов NPN_PluginThreadAsyncCall, а уже в этой функции вызывать что-то другое.

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

спасибо за фикс. теперь все работает нормально.

случайно не знаешь какая XUL-функция или объект вызывает замечательное сообщение «plugin crashed тратата» с кнопочкой? мне очень нужно показать подобное сообщение с другой кнопочкой и текстом в одном из своих аддонов для Firefox/Seamonkey. чувствую придется запихивать сообщение с кнопочкой внутрь DOM документа на вкладке ручками. хотелось бы все-таки сообщение рядом с DOM а не внутри. есть пример в аддоне NoScript, но там код больно загадочный и похоже там тоже самопал.

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

случайно не знаешь какая XUL-функция или объект вызывает замечательное сообщение

Нет, я с XUL не знаком.

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