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)

версию хром из манифеста я так понимаю берет.

Pepper API судя по всему не предусматривает получение информации о плагине. Забавно.

vitalikp
()

Добавил обработку редиректов (HTTP 30x) и полноэкранный режим. Полноэкранный режим работает через 2d, поэтому сильно нагружает CPU. На очереди ввод с клавиатуры и 3d.

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

Добавил обработку событий от клавиатуры.

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

Контекстное меню заработало, правда с фризом плагина на время показа меню. Заодно обнаружился баг в Opera с обработкой событий от мыши. Правая клавиша передаётся как 2, вместо правильного значения 3. В полноэкранном режиме используется отдельное окно, поэтому там всё работает.

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

12.16. Я ей ещё пользуюсь время от времени, да и другие реализации NPAPI вскрывают разные недочёты в коде. Иногда бывают интересные сюрпризы. Вот, например, выяснилось, что Opera от контекстного меню не фризится.

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

Донатом можно разве что денег на хостинг собрать. А бесплатный хостинг и так есть — github.

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

не собирается:

/freshplayerplugin/src $ make [ 1%] Building C object CMakeFiles/freshwrapper.dir/ppb_opengles2.c.o In file included from /usr/include/GL/gl.h:2085:0, from /usr/include/GL/glx.h:45, from /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/pp_resource.h:42, from /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:29: /usr/include/GL/glext.h:468:19: ошибка: несовместимые типы для «GLsizeiptr» /usr/include/GLES2/gl2.h:39:26: замечание: здесь была предыдущая декларация «GLsizeiptr» /usr/include/GL/glext.h:469:19: ошибка: несовместимые типы для «GLintptr» /usr/include/GLES2/gl2.h:38:26: замечание: здесь была предыдущая декларация «GLintptr» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:137:1: ошибка: несовместимые типы для «ppb_opengles2_BufferData» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.h:71:1: замечание: здесь была предыдущая декларация «ppb_opengles2_BufferData» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:145:1: ошибка: несовместимые типы для «ppb_opengles2_BufferSubData» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.h:75:1: замечание: здесь была предыдущая декларация «ppb_opengles2_BufferSubData» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:1112:1: ошибка: несовместимые типы для «ppb_opengles2_chromium_map_sub_map_buffer_sub_data_chromium» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.h:506:1: замечание: здесь была предыдущая декларация «ppb_opengles2_chromium_map_sub_map_buffer_sub_data_chromium» /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2817:5: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена] /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2817:5: предупреждение: (где-то рядом с инициализацией для «ppb_opengles2_interface_1_0.BufferData») [по умолчанию включена] /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2818:5: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена] /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2818:5: предупреждение: (где-то рядом с инициализацией для «ppb_opengles2_interface_1_0.BufferSubData») [по умолчанию включена] /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2954:5: предупреждение: несовместимый тип указателя в инициализации [по умолчанию включена] /home/user/Рабочий стол/freshplayerplugin-master/freshplayerplugin/src/ppb_opengles2.c:2954:5: предупреждение: (где-то рядом с инициализацией для «ppb_opengles2_chromium_map_sub_interface_1_0.MapBufferSubDataCHROMIUM») [по умолчанию включена] make[2]: *** [CMakeFiles/freshwrapper.dir/ppb_opengles2.c.o] Ошибка 1 make[1]: *** [CMakeFiles/freshwrapper.dir/all] Ошибка 2 make: *** [all] Ошибка 2

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

не собирается

Забыл GLES на GL поменять. Теперь должно собираться.

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

С нетерпением жду релиза

Voilà, v0.1.0!

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

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

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

Я пользуюсь, вроде не падает. Ввод от мыши и клавиатуры работает.

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

Стоп, а для нубов небольшую инструкцию - как собрать? что в итоге получится и куда его подсунуть? Сорри заранее :(

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

А что значит:

-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc — works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ — works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:102 (find_package_handle_standard_args)
CMakeLists.txt:15 (find_package)

-- Configuring incomplete, errors occurred!

?

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

Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

Не хватает pkg-config. Это такая утилита для работы с .pc файлами, в которых авторы библиотек указывают правильные флаги для сборки.

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

И какие у него зависимости еще? Надо какие-то *-dev пакеты ставить? У меня дебиан.

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

Прочитал в CMakeLists.txt, что нужны:

alsa
glib-2.0
x11
gl
liburiparser
cairo
pango
pangocairo
pangoft2
freetype2
gtk+-2.0

pangocairo - такого вообще нет в системе... Да и gtk давно 3.х... Либо я что-то не понимаю :(

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

Прочитал в CMakeLists.txt, что нужны

libasound2-dev libglib2.0-dev libx11-dev libgl1-mesa-dev liburiparser-dev libcairo2-dev libpango1.0-dev libfreetype6-dev libgtk2.0-dev

В CMakeLists.txt перечислены названия .pc файлов. В каких они пакетах лежат, можно найти с помощью apt-file: apt-file search /gl.pc

И pango, и pangocairo, и pangoft2 все лежат в libpango1.0-dev.

Да и gtk давно 3.х

Можешь заменить на gtk+-3.0, если хочется. Это не принципиально.

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

не хватает отключение trace_info.

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

можно добавить в конфиг сборки возможность отключить трасировку?

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

Спасибо. Получилось.
Кстати, по ПКМ на видео не снимается галочка «включить аппаратное ускорение», точнее, ее снимаешь, еще раз ПКМ, а она там все равно есть.

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

можно добавить в конфиг сборки возможность отключить трасировку?

Ага. Теперь, если конфигурировать так: cmake -DCMAKE_BUILD_TYPE=Release .., трассировочных (trace_info) сообщений не будет.

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

Кстати, по ПКМ на видео не снимается галочка «включить аппаратное ускорение», точнее, ее снимаешь, еще раз ПКМ, а она там все равно есть.

Починил.

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

Аудиоплеер ВКонакте и звук в видео там же не работают. FF29.

Не могу воспроизвести баг. У меня играет и аудио и видео. Видео — точно flash, аудио перед запуском попросило разрешить flash. У меня Iceweasel 29.0.

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

Багрепорт. Аудиодорожка включается не сразу (5-30 секунд задержки); в течение нескольких секунд звук очень рваный, после чего воспроизведение начинается с первой секунды аудиодорожки. И она не реагирует на паузу (видео останавливается, аудио — нет).

PepperFlash: 13.0.0.214 (Chrome: 34.0.1247.137)
Firefox: 29.0.1
FreshPlayer: e1340bc
Дистрибутив: Arch

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

Аудиодорожка включается не сразу (5-30 секунд задержки); в течение нескольких секунд звук очень рваный, после чего воспроизведение начинается с первой секунды аудиодорожки.

Звук через ALSA идёт?

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

А должно? Я запускал, чтобы проверить, действительно ли звука нет или у меня кривой sink выбран.

intelfx ★★★★★
()
Ответ на: комментарий от vitalikp
[fresh] [PPB] {full} ppb_url_request_info_create instance=12
[fresh] [PPB] {full} ppb_var_var_from_utf8_1_1 data=http://www.adobe.com/software/flash/about, len=41
[fresh] [PPB] {full} ppb_url_request_info_set_property request=29948, property=PP_URLREQUESTPROPERTY_URL, value={STRING:http://www.adobe.com/software/flash/about}
[fresh] [PPB] {full} ppb_var_release var={STRING:http://www.adobe.com/software/flash/about}
[fresh] [PPB] {full} ppb_var_var_from_utf8_1_1 data=GET, len=3
[fresh] [PPB] {full} ppb_url_request_info_set_property request=29948, property=PP_URLREQUESTPROPERTY_METHOD, value={STRING:GET}
[fresh] [PPB] {full} ppb_var_release var={STRING:GET}
[fresh] [PPB] {full} ppb_url_request_info_set_property request=29948, property=PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, value={BOOLEAN:TRUE}
[fresh] [PPB] {full} ppb_url_request_info_set_property request=29948, property=PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, value={BOOLEAN:TRUE}
[fresh] [PPB] {full} ppb_url_request_info_set_property request=29948, property=PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, value={BOOLEAN:TRUE}
[fresh] [PPB] {full} ppb_core_add_ref_resource resource=29948
[fresh] [PPB] {full} ppb_core_release_resource resource=29948
[fresh] [PPB] {zilch} ppb_flash_navigate request_info=29948, target=_new, from_user_action=1

я так понимаю это еще не реализовано))

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

Только, может быть, название поменять... а то если взлетит, замучаешься людям объяснять: «Надо взять FreshPlayerPlugin... Нет, не просто Flash, а Fresh, это адаптер Флэша из Хрома в Файерфокс...».

UPDATE. Например, PepperFox.
UPDATE 2.Хотя это и глупо, наверное...

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

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

[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e4086460, .flags=0}, result=0
[fresh] [PPB] {full} ppb_core_call_on_main_thread delay_in_milliseconds=0, callback={.func=0x7f10feb606d0, .user_data=0x7f10e40863a0, .flags=0}, result=0

непрерывно идет в логе.

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

Да какая разница как назвать) Главное что бы работало))

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

Только, может быть, название поменять

Найти нормальное название — большая проблема. А ведь оно ещё и гуглиться должно хорошо.

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

В первый раз у меня произошла заморозка экрана.

Какой видеоадаптер? Версия драйвера? Разрешение экрана? Alt-Tab работал? Если увеличивать масштаб страницы, зависает?

В последующие разы происходит вылет браузера с ошибкой.

На backtrace было бы здорово посмотреть.

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

Можно как-нибудь без установки Chrome обойтись и иметь всегда свежую версию libpepflashplayer.so?

Для конечного пользователя не очень удобно держать зоопарк браузеров.

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