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)
Ответ на: комментарий от Dmitry_Sokolowsky

Самое странное, что процесс plugin-container вообще не создаётся

Если что-то в плагине сегфолтнется, plugin-container перезапустится, но если так будет происходить слишком часто, Firefox перестанет его запускать.

Запусти терминал, введи там ulimit -c unlimited, потом запусти оттуда же Firefox и попробуй открыть станичку с флешем. Когда оно гикнется, закрой браузер. В текущей директории (должна быть доступна на запись) образуется файл core, который надо подгрузить в gdb:

gdb /usr/lib/firefox/plugin-container core
а в приглашении gdb ввести команду bt. Надеюсь, этого вывода хватит, чтобы понять, где же оно сегфолтится. Путь к plugin-container может быть и другой, это сильно от дистрибутива зависит.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat
$ gdb /usr/lib/firefox/plugin-container core
GNU gdb (Gentoo 7.8.1 vanilla) 7.8.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib/firefox/plugin-container...(no debugging symbols found)...done.
/home/dmitry/core: Нет такого файла или каталога.
(gdb) bt
No stack.
(gdb)

Вот и всё, что написало...

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

Самосборный Firefox или установлен пакет с bin версией браузера?

У меня Gentoo, Firefox не установлен, но я пробовал работу этого плагина в официальной бинарной 64 битной сборке Firefox версии 34.05, плагин естественно собирал в ручную, удостоверьтесь, что вы его правильно настроили и проверьте работу плагина в бинарной сборке браузера, а не собранной из исходников в Gentoo.

Удачи.

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

Вот что получилось с firefox-bin

$ gdb /usr/lib/firefox/plugin-container core
GNU gdb (Gentoo 7.8.1 vanilla) 7.8.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib/firefox/plugin-container...(no debugging symbols found)...done.

warning: core file may not match specified executable file.
[New LWP 32157]
[New LWP 32158]
[New LWP 32159]
[New LWP 32160]
[New LWP 32161]
Core was generated by `/opt/firefox/plugin-container /usr/lib/nsbrowser/plugins/libfreshwrapper-pepper'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000000 in ?? ()
[\code]

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

А bt что выдаёт? Пока что видно, что либо был скачок на NULL (но не видно откуда), либо стек оказался повреждён.

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

Видимо, freshwrapper без отладочных символов был собран. Нужно сконфигурировать так:

cmake -DCMAKE_BUILD_TYPE=Debug ..
а потом собрать. И не strip'ать. По голым числам мало что можно понять. Разве что видно, что система 32-битная.

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

В 32-битном chroot'е успешно запускается. Похоже, битность ни при чём.

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

Это один из этапов сборки вручную. В директории с исходниками создаёшь директорию build, переходишь в неё, конфигурируешь с помощью cmake -DCMAKE_BUILD_TYPE=Debug .., а потом запускаешь собственно сборку: make. При удачном стечении обстоятельств в текущей директории появится libfreshwrapper-pepperflash.so. Его надо будет скопировать куда-нибудь, где его браузер ожидает. Я обычно копирую в ~/.mozilla/plugins

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

Надо было сразу так собрать! Теперь плагин работает. С ебилдом, видимо, что-то не то.
Тормозов, вроде бы, не прибавилось. Подтверждаю баг с сохранением настроек. А так всё работает!

Dmitry_Sokolowsky ★★★★★
()

Встретил пожалуй самый эпичный по соотношению сложности поимки к сложности фикса баг. Сегодня я открыл для себя, что в HTTP заголовке «Referer» удвоенной «r» нет.

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

в лор-цитатник надо бы

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

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

Изучил вопрос для себя... Честно говоря, не знал вообще, что Referer пошло от неправильного написания слова Referrer. Век живи - век учись.

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

Да, какие-то специи даже неправильно называют. Нередкое явление.

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

NPAPI: https://developer.mozilla.org/en-US/Add-ons/Plugins
PPAPI: https://developer.chrome.com/native-client/c-api

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

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

Обновился на версию v0.2.2. У меня не работает скролл на мышке. Это не реализовано или баг?

И еще вопрос. Вижу выхлоп в консоль «NOT SANDBOXED». Это я так понимаю идет от libpepflashplayer.so. Хотелось бы понять почему.

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

школота и говнокод в коренных протоколах, все в бункер

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

У меня не работает скролл на мышке. Это не реализовано или баг?

И то и другое. Сейчас для всех wmode используется windowless режим, а Firefox не передаёт события о колёсике в такие плагины. Это обходится работой в windowed режиме, когда все события приходят непосредственно от X сервера. Но это надо ещё реализовать (#72)

Вижу выхлоп в консоль «NOT SANDBOXED». Это я так понимаю идет от libpepflashplayer.so. Хотелось бы понять почему.

PepperFlash запускает «echo NOT SANDBOXED» в системной оболочке. Если песочницы нет, запуск удаётся, и в stdout появляется «NOT SANDBOXED». Если песочница работает, вызов будет блокирован.

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

Пропал звук, и видео стопорится через несколько секунд. Что нужно для дебага? Что и как запускать?

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

Это самый адский баг. Если у тебя PulseAudio, стоит собрать с поддержкой PulseAudio (надо установить libpulse-dev перед сборкой). С ALSA сложнее. Для начала — в консоль что-нибудь с warning/error вываливается?

Баг появился после сборки новой версии или сам по себе?

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

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

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

В курсе. В API есть функция, которая возвращает размер полного экрана. Если она будет возвращать размер root окна, которое вмещает в себе все мониторы, флеш будет корёжить изображение, примерно вот так (рис). В данный момент она возвращает 100x100, для youtube этого хватает. Но, видимо, есть другие плееры, которые рассчитывают на верное значение.

А единственно верного значения нет. Допустим, есть два монитора рядом, 100x100 и 200x200, тогда размер корневого окна будет 300x200. Если вернуть 100x100, при разворачивании на втором мониторе изображение займёт левый верхний квадрат 100x100. Если вернуть 200x200 или 300x200, на первом мониторе либо сразу на обоих изображение будет искорёженным.

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

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

Сегодня из гита собрал. У меня ALSA, все было норм до этой версии. Давненько, правда, не обновлял (ну то есть, не каждый день это делаю и даже не неделю :))

Для начала — в консоль что-нибудь с warning/error вываливается?

Просто запустить браузер из консоли? FreshPlayer скомпилен без дебага, если что.

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

Сегодня из гита собрал. У меня ALSA, все было норм до этой версии

Было бы здорово отловить git bisect'ом сбойный коммит.

Просто запустить браузер из консоли? FreshPlayer скомпилен без дебага, если что.

Да, там всё равно будут выводиться предупреждения и ошибки. И упоминания о нереализованных функциях.

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

Было бы здорово отловить git bisect'ом сбойный коммит.

Говори, как - сделаю ибо я нуб в этом чуток.

Вот с новым FreshPlayer: http://pastebin.com/Yjkfi1XH

Смотрел внимательно в консоль когда проигравлось видео - ничего особенного: видос стопорнулся где-то между строчек 81, 82, то есть ничего особенного не вывалилось. Последних две ошибки вывалило когда закрыл вкладку с ютубом. Смотреть вот этот канал: https://www.youtube.com/user/failarmy

Вот со старым FreshPlayer: http://pastebin.com/gyhhaU3Q

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

Попробуй строчку

CHECK_A(snd_pcm_start, (as->pcm));
закомментировать и так собрать.

Говори, как - сделаю ибо я нуб в этом чуток.

Хорошее описание есть в http://git-scm.com/docs/git-bisect. Вкратце: нужно найти две версии, одну, в которой хорошо, и другую, в которой плохо. Запускаешь бисекцию git bisect start, передвигаешься (git checkout) на хорошую, запускаешь там git bisect good, передвигаешься на плохую, запускаешь там git bisect bad. Дальше git сам выбирает промежуточную версию, остаётся её собрать и протестировать. Если она хорошая, вводишь git bisect good, если не работает, то git bisect bad. Через несколько таких шагов git показывает сбойный коммит. git bisect reset завершает сеанс.

В данном случае я уже догадываюсь, с какого именно коммита начались неполадки, так что проводить эту процедуру не обязательно. И если удаление строки с snd_pcm_start поможет, значит я догадываюсь правильно.

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

Гы. А где сопсно эту строку закоментить? ) Сорри...

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

Нашел в файле: ../src/audio_thread_alsa.c

Только в нем?

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

Закоментил, скомпилил, все работает :)

Кстати, был прикол когда новую версию пробовал сегодня - как будто слетели настройки громкости, и снова появилась галочка «использовать аппаратное ускорение». До этого оно помнило мои настройки.

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

Закоментил, скомпилил, все работает :)

OK, удалю её тогда.

До этого оно помнило мои настройки.

А сейчас запоминает? Или при каждом запуске слетают?

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

полноэкранный режим

Теперь должно получше стать, по крайней мере на одном мониторе.

Конфигурация многомонитроная.

Скорее всего при переключении в полноэкранный режим изображение будет занимать только часть экрана. Из всех ширин и высот выбираются минимальные и они сообщаются Flash плееру как размеры полноэкранного режима.

Если известно, что на полный экран видео будут открываться на каком-то одном определённом мониторе, имеет смысл указать его разрешение в параметрах fullscreen_width и fullscreen_height в ~/.config/freshwrapper.conf.

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

При разворачивании на полный экран поверх плеера оказывается lxpanelx и фокус на ней, соответственно, управление плеером с клавиатуры не работает, пока не щёлкну где-нибудь в плеере.

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

Не получается воспроизвести на чистой lxpanelx. Какие плагины используются? Может какой-то из них вытягивает панель поверх всех окон?

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

Без параметров теперь расширяется на экран ноута. В параметрах выставил разрешение телека - стало лучше.

Но есть вот какой баг: Разворачиваю первый раз
Разворачиваю второй и последующие разы. - как и задумано :-)

Похоже изображение смещается.

UPD: уменьшил разрешение по-вертикали (в параметрах). Стало нормально работать. Странно.

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

Похоже изображение смещается.

Нет, тут дело в другом. Flash изначально спрашивает браузер о размерах полного экрана и в первый раз рисует картинку, основываясь на полученных данных. Я предполагаю (не проверял это), что после первого раза он эти размеры обновляет, поэтому в следующий раз приложение получает верные значения и влазит в экран.

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

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

Кстати, у Chrome на этом плеере нормально с размерами?

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

А там точно Flash используется? В Chrome фич <video> побольше, и сайты в нём часто работают через html5. Кстати, что это за сайт?

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

Там flash. Есть и html5 режим, только немного глючит (кнопки переключения серий не работают).
seasonvar.ru (премиум)

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

соррри за оффтоп. а почему остальные фс настолько медленнее на чтении/удалении мелких фалов(каталогов?), чем reiserfs3+notail и это всех устраивает

ext4, у xfs, btrfs, jfs результаты такие же или хуже
real  0m19.529s
real  0m5.902s
real  0m7.014s

real  0m20.261s
real  0m5.456s
real  0m6.563s

real  0m19.933s
real  0m5.527s
real  0m6.688s

reiser3+notail
real  0m26.021s
real  0m0.773s
real  0m2.711s

real  0m21.886s
real  0m0.767s
real  0m2.695s

real  0m22.278s
real  0m0.795s
real  0m2.662s

fil=/usr/portage/distfiles/chromium-40.0.2214.69-lite.tar.xz

drop(){ sync;echo 3 >/proc/sys/vm/drop_caches;}

cd /root/test

for _ in 1 2 3;do
  drop
  cat $fil >/dev/null
  time tar xf $fil
  drop
  time tar c chromium* >/dev/null
  drop
  time rm -fr chromium*
done

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