LINUX.ORG.RU

FreshPlayerPlugin — PepperFlash в Firefox

 , , , ,


56

41

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

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

★★★★★

Работать заставить не удалось. libpepflashplayer.so (хром версии 33.0.1750.152) и libfreshwrapper.so были закинуты в папку ~/.mozilla/plugins/. В плагинах в лисе появился плагин FreshPlayerPlugin версии 11.9.123.456. Несмотря на это ютуб пишет что нехватает флешплеера. На http://video.sibnet.ru бесконечно крутится значек буфферизации, меня по пкм не отображается.

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

libpepflashplayer.so

ожидается, что он находится по пути /opt/google/chrome/PepperFlash/libpepflashplayer.so

Несмотря на это ютуб пишет что не хватает флешплеера

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

меня по пкм не отображается.

Этого нет пока, как и ввода с клавиатуры.

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

АУР

BTW, я добавил содержимое build-fix.patch в master-ветку.

i-rinat ★★★★★ ()

Кто как не ты. А почему не сам PPAPI в Firefox? Оба же открытые.

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

А почему не сам PPAPI в Firefox? Оба же открытые.

Реализацию PPAPI в Firefox мы оставляем в качестве упражнения читателю.

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

ожидается, что он находится по пути /opt/google/chrome/PepperFlash/libpepflashplayer.so

А по пути ~/.mozilla/plugins/ он проверяет? Может я неправильно тестировал?

То есть можно было не городить тот костыль что у меня ПКДЖБИЛДе. Чисто теоретически как считаешь как лучше сделать пакет, как сейчас у меня(качается хром и выдергивается из него libpepflashplayer.so) или просто требовать установленного Хрома?

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

Буду дома проверю, заодно можно потестировать на реконке.

Этого нет пока, как и ввода с клавиатуры.

А я хотел посмотреть какую версию покажет.

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

А по пути ~/.mozilla/plugins/ он проверяет?

У меня просто хардкод: https://github.com/i-rinat/freshplayerplugin/blob/master/src/np_entry.c#L36

Чисто теоретически как считаешь как лучше сделать пакет, как сейчас у меня(качается хром и выдергивается из него libpepflashplayer.so) или просто требовать установленного Хрома?

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

А я хотел посмотреть какую версию покажет.

Никак не могу реализовать контекстное меню. Шрифты в рекламе на youtube починил, а контекстное меню не получается. :)

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

У меня просто хардкод:

Теперь понятно почему не работало.

Потом я добавлю какой-нибудь код для поиска плагина

Не проблема в принципе, ИМХО сначала нужно сделать полезный функционал а всякие полезности могут подождать.

Приду домой, перепроверю и сделаю новую версию пакета в АУРе.

Behem0th ★★★★★ ()

В опере на ютубе плагин падает не успев ничего толком показать

http://paste.kde.org/p6dwoqvvk выхлоп консоли

Log was created here:
/home/behem0th/.opera/logs//crash20140401200723.txt

Внезапно папка оказалась пустой.

Реконк падает.

http://paste.kde.org/pqrl8y2kq

http://paste.kde.org/pyjhca0yl

Лиса говорит что нужно установить адобе плёер.

http://paste.kde.org/p6py4y22r

Обновил пакет а АУРе, теперь в зависимостях гуглхром.

Behem0th ★★★★★ ()
Последнее исправление: Behem0th (всего исправлений: 2)
Ответ на: комментарий от Behem0th
Thread 1 (Thread 0xb2092740 (LWP 5968)):
[KCrash Handler]
#6  0xb75204f6 in __strlen_sse2_bsf () from /usr/lib/libc.so.6
#7  0xa94a9d7e in ?? () from /usr/lib/mozilla/plugins/libfreshwrapper.so
#8  0xa94c3016 in ?? () from /usr/lib/mozilla/plugins/libfreshwrapper.so
#9  0xa8d9df31 in ?? () from /opt/google/chrome/PepperFlash/libpepflashplayer.so

Собери, пожалуйста, с CFLAGS="-g3 -O0". Сейчас не видно номер строки, где баг сидит.

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

Собери, пожалуйста, с CFLAGS="-g3 -O0". Сейчас не видно номер строки, где баг сидит.

Именно так? Или дебаг сборку сделать без стрипа бинарников? В арче при сборке пакета: options=(debug !strip) Нубский вопрос: номер строки откуда берется берется? Прописывается в бинарнике или в бинаре ссылка на исходник?

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

Именно так? Или дебаг сборку сделать без стрипа бинарников?

И тот и другой вариант годятся.

номер строки откуда берется берется

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

i-rinat ★★★★★ ()

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

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

Реконк.

Откопал rekonq (его почему-то выбросили из Debian), собрал, воспроизвёл. Упало в очень нехорошем месте — работа с javascript объектами. Я там уже упёрся в циклические зависимости, теперь ещё тут падает на ровном месте. :(

Интересно, если притвориться Flash плеером, QtWebKit задействует какой-нибудь workaround? Слышал, они там у него есть.

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

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

Ok, выкидываю полгода работы и 12к строк кода. :)

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

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

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

Теоретически ты можешь распарсить исходники QtWebKit на наличие workaround и понять что тебе они могут дать.

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

Уже не первый раз я горожу какие-то костыли над костылями, а потом что-то щёлкает, и появляется решение в 10-15 строк, которое делает именно то, что нужно. И готовые библиотеки находятся. Надеюсь, что так будет и в этот раз. Городить FFI с трамплинами не хочется. Хотя это и круто.

i-rinat ★★★★★ ()

почему бы просто не заняться поддержкой npapi апи в firefox?!

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

Ты уже третий, кажется, кто говорит об этом в этой теме. Можешь объяснить, чем реализация PPAPI в Firefox лучше выбранного мной подхода?

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

я думаю что в итоге ppapi будет лидирующей схемой подключения плагинов. неплохо было бы её иметь в firefox.

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

я думаю

неплохо было бы её иметь в firefox

Когда возьмешься за реализацию зови, я не прочь потестировать.

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

Я надеялся получить техническое описание, а не «мне хочется так».

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

А ещё проект должен быть подъёмным для меня, даже после того как первоначальный задор пропадёт. Если этим будет заниматься кто-то другой, расклад будет другим. Но пока что есть, то есть.

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

трейс

Вроде перестало падать. Оказалось, что я неправильные параметры передавал, firefox их просто игнорировал и поэтому не падал. QtWebKit их активно использует, так что ошибки быстро вылезают на поверхность.

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

Тестировать? Или ты пока только причину нашел но не исправил?

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

У меня сейчас в rekonq'е код из master ветки работает. Если будет время, попробуй потестить. Если найдёшь способ уронить, сообщи пожалуйста.

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

Все падает.

Реконк

лог http://paste.kde.org/per0h6pd9

трейс http://paste.kde.org/phgmcwkns

В опере падает плагин

http://paste.kde.org/p0tq6vrfy

В лисе если зайти на ютуб и пощелкать по роликам то открывается нтлм5 версия плеера.

Для про верки на этой страничке http://www.animespirit.ru/anime/rs/series-rus/9626-d-frag.html Трейлер воспроизводится нормально(ролик с ютуба). Судя по тому что меню по пкм не появляется работает твоя обертка. Все функции вроде работают, кроме перехода в фулскрин.

Остальные ролики на той страничке не воспроизводятся.

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

?? () from /usr/lib/libQtWebKit.so.4

?? () from /usr/lib/libQtCore.so.4

Поставь пакеты с отладочной инфой.

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

В арче нет таких, вариант только пересобирать самому. Если i-rinat нужна отладочная информация для Qt то скажет.

Behem0th ★★★★★ ()

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

$ make
Scanning dependencies of target freshwrapper
[  1%] Building C object CMakeFiles/freshwrapper.dir/src/np_entry.c.o
[  3%] Building C object CMakeFiles/freshwrapper.dir/src/np_functions.c.o
/home/yur/freshplayerplugin/src/np_functions.c: В функции «NPP_SetWindow»:
/home/yur/freshplayerplugin/src/np_functions.c:152:27: ошибка: «NPWindow» не содержит элемента с именем «ws_info»
     pp_i->ws_info = window->ws_info;
                           ^
CMakeFiles/freshwrapper.dir/build.make:80: ошибка выполнения рецепта для цели «CMakeFiles/freshwrapper.dir/src/np_functions.c.o»
make[2]: *** [CMakeFiles/freshwrapper.dir/src/np_functions.c.o] Ошибка 1
CMakeFiles/Makefile2:63: ошибка выполнения рецепта для цели «CMakeFiles/freshwrapper.dir/all»
make[1]: *** [CMakeFiles/freshwrapper.dir/all] Ошибка 2
Makefile:75: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

В чем может быть проблема ?

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

телепаты в отпуске
дистро, версия, make --version, gcc --version в студию

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

В чем может быть проблема ?

Причина в том, что поле ws_info в заголовочном файле npapi.h защищено макросом XP_UNIX. По идее, в mozilla-plugin.pc должно быть -DXP_UNIX, но по каким-то причинам его там нет.

Можно попробовать переконфигурировать вот так: CFLAGS=-DXP_UNIX cmake .. Но лучше выяснить, что не так с mozilla-plugin.pc.

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

В опере падает плагин

Странное падение — плагин создают, но параметра src у него нет (?), у меня такого не происходит. Заглушку я поставил на этот случай, правда не знаю, будет работать или нет. И ещё поменял строки-идентификаторы, у меня без них опера не хотела плагин грузить.

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

Да, точно, вместо fullscreen'а пока ничего.

Остальные ролики на той страничке не воспроизводятся.

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

i-rinat ★★★★★ ()

В QtWebKit есть забавный баг — при прочих равных он выбирает более старую версию плагина. Если в системе есть 11.1, 11.2 и 13.0, он выбирает 11.1.

i-rinat ★★★★★ ()

Годная вещь, спасибо за труды) ждем с нетерпением готовое решение!

Gonzo ★★★★★ ()

У меня Федора, трудно найти mozilla-plugin. Мне проще заголовочные файлы скачать.

Может стоит закинуть заголовочные файлы:

http://code.google.com/p/npapi-sdk/source/browse/#svn/trunk/headers

в include/npapi/

А в файле CMakeLists.txt добавить include_directories(include/npapi). Ну и удалить mozilla-plugin из check_modules.

Уверен желающих собрать freshplayerplugin будет больше.

Или такая привязка к пакету принципиальная?

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

Может стоит закинуть заголовочные файлы

Да, наверное так и стоит сделать.

Или такая привязка к пакету принципиальная?

Просто так проще мне.

i-rinat ★★★★★ ()

И еще есть маленький вопрос:)

Заметил что заголовочный файл tttables.h у меня лежит в /usr/include/freetype2/freetype/

А в в файле src/ppb_flash_font_file.c он ищется как <tttables.h>.

У тебя в пакете он как лежит?

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

У тебя в пакете он как лежит?

У меня он лежит в /usr/include/freetype2/tttables.h. Оказалось, что во freetype свой заведённый порядок включения заголовков. Я поправил способ включения, теперь должно работать.

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

ожидается, что он находится по пути /opt/google/chrome/PepperFlash/libpepflashplayer.so

Думаю можно его подгружать просто libpepflashplayer.so, без привязки к пути. Любой желающий может через /etc/ld.so.conf.d/ добавить путь, где он лежит. Самое простое это скопировать в /usr/lib64.

У себя кинул libpepflashplayer.so его в /usr/local/lib64/. И флеш подгрузился от туда.

vitalikp ()

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

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