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)

Ответ на: комментарий от Lavos

Забавно. Я такое видел (кстати, на том же видео), когда декодирование в libvdpau-va-gl делал. Там если неправильно обрабатывать DPB, кадры выводятся не в том порядке и получается такая же пляска.

Это же nVidia через VDPAU? Если попробовать плеером (mplayer, mpv) H.264 видео проиграть через VDPAU, нормально показывает?

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

Это же nVidia через VDPAU?

Ага, VAAPI с nouveau все равно использует VDPAU-backend, смысла нет в лишней прослойке.

Если попробовать плеером (mplayer, mpv) H.264 видео проиграть через VDPAU, нормально показывает?

Ага, это же самое видео, слитое через youtube-dl нормально идет. Только при выводе через opengl подтормаживает, а vdpau - нормально.

$ ffprobe 6v2L2UGZJAM.mp4
...
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3288 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
...

$ mpv --vo=vdpau --hwdec=vdpau 6v2L2UGZJAM.mp4 
Playing: 6v2L2UGZJAM.mp4
 (+) Video --vid=1 (*) (h264)
 (+) Audio --aid=1 --alang=und (*) (aac)
AO: [pulse] 44100Hz stereo 2ch float
Using hardware decoding (vdpau).
VO: [vdpau] 1920x1080 vdpau
...

$ mpv --vo=opengl-hq --hwdec=vdpau 6v2L2UGZJAM.mp4 
Playing: 6v2L2UGZJAM.mp4
 (+) Video --vid=1 (*) (h264)
 (+) Audio --aid=1 --alang=und (*) (aac)
AO: [pulse] 44100Hz stereo 2ch float
Using hardware decoding (vdpau).
VO: [opengl-hq] 1920x1080 vdpau

Audio/Video desynchronisation detected! Possible reasons include too slow
hardware, temporary CPU spikes, broken drivers, and broken files. Audio
position will not match to the video (see A-V status field).

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

итак. что-нибудь надо тестировать?

моя новая видюха «VGA compatible controller: NVIDIA Corporation GT218 [GeForce 210] (rev a2)».

драйвер опенсорсный nouveau . ubuntu 14.04 .

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

что-нибудь надо тестировать?

Можно проверить, что на https://www.youtube.com/watch?v=6v2L2UGZJAM в «статистике для сисадминов» показывается accelerated video decoding. Для этого надо в ~/.config/freshwrapper.conf добавить строки enable_hwdec=1 и enable_vaapi=0. Есть ли глюки как в FreshPlayerPlugin — PepperFlash в Firefox (комментарий) ?

Если переключить с 720p на 1080p и наоборот, а потом ткнуть в другое место в таймлайне, accelerated video decoding сбрасывается на software?

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

Можно проверить, что на https://www.youtube.com/watch?v=6v2L2UGZJAM в «статистике для сисадминов» показывается accelerated video decoding. Для этого надо в ~/.config/freshwrapper.conf добавить строки enable_hwdec=1 и enable_vaapi=0. Есть ли глюки как в FreshPlayerPlugin — PepperFlash в Firefox (комментарий) ?

пишет вот такое в stats for nerds:

«„“ timestamp seconds 26.821 640x360, 736 average kbps, 55% volume TagStreamPlayer, HTTPS/DASH/VOD, 103765 kbps 10 stage fps, 0 video fps, 30 dropped, 0 kbps accelerated video rendering, software video decoding -18.119 db, 0.7177116140382841 audio factor »«»

в консоль кидает такое:

«„“ [fresh 11401] [PPB] {zilch} ppb_network_monitor_update_network_list [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame [h264 @ 0x7f94fd1f5800] decode_slice_header error [h264 @ 0x7f94fd1f5800] no frame! [fresh] [error] decode_frame, error -1 while decoding frame [fresh] [error] decode_frame, error -1 while decoding frame »«»

в конфиге лежит такое:

«„“ enable_3d = 1 enable_hwdec = 1 enable_vaapi = 0 enable_vdpau = 1 »«»

версия фреш такая: 0.3.2+git20150928~webupd8~trusty .

пришлось поставить mesa-vdpau-drivers-lts-utopic . без него ругалось на отсутствующую библиотеку. версия без -lts-utopic ставиться не захотела (стандартные проблемы с зависимостями).

переключение качества не проверял, потому что ускоренного декодирования и так не наблюдается. картинка кстати нормальная, потому что декодирование-то софтовое врубилось.

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

ffmpeg почему-то не нравится поток, до вызовов VDPAU даже очередь не доходит. У меня иногда тоже поток срывается. Не могу понять, то ли баг какой, то ли действительно потоки с ошибками.

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

а у меня так всегда благодаря аддону https://addons.mozilla.org/en-us/firefox/addon/youtube-flash-html5/ видимо. я другого способа переключить в flash из html5 не нашел. здесь больше нельзя переключить почему-то: https://www.youtube.com/html5 . так вот из-за этого аддона окошко с видео вначале выскакивает с ошибкой (показывет ошибку и «помехи»), потом загружается и играет нормально, но без ускоренного декодирования.

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

Вряд ли дело в этом, у меня тоже юзер-скриптом отключается HTML5 video на Youtube, но аппаратное декодирование работает.

Эти сообщения об ошибках — частично от freshwrapper, частично от ffmpeg. К этому моменту PepperFlash уже успевает прорисоваться, загрузить начало видеопотока и передать его в freshwrapper. Там я ищу слайсы с данными и передаю их дальше декодеру. В основном, работа делается кодом ffmpeg. И вот он почему-то не может декодировать слайс.

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

может я скажу глупость, но все же... там написано в ошибке «no frame», поэтому предположу, что frame не успел подгрузиться. либо там null передан, либо нужно ждать первый непустой фрейм или слайс. кстати гугл что-то знает про decode_slice_header error h264 no frame , но отвечает что-то невразумительное.

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

Нет, далеко не глупость. Там есть тонкости и дело, по видимому, где-то в них.

PPAPI объявляет требования к данным как «|bitstream_buffer| is the bitstream buffer that contains at most one input frame». И PepperFlash шлёт не больше одного кадра. В основном, по одному слайсу. В то же время ffmpeg хочет, чтобы там сразу было достаточно слайсов для декодирования кадра. По идее, функциями av_parser_* можно собрать нужное количество. Я так и делаю, но иногда почему-то вся связка глючит.

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

нашел сайт, на котором некорректно работает. http://game-oldies.com/play-online/devil-world-nintendo-nes . нужно нажать по круглой кнопочке «play now!», чтобы флешка открылась. так вот она после загрузки игры (нужно подождать) открывается просто белым прямоугольником. музыка идет, а вместо картинки белый прямоугольник.

$ cat ~/.config/freshwrapper.conf 
enable_3d = 1
enable_hwdec = 1
enable_vaapi = 0
enable_vdpau = 1
mvitamin
()
Ответ на: комментарий от i-rinat

Ой, прости. Это мой аддон Focus Regainer подменяет wmode и некоторые флешки становятся белыми просто. А wmode подменяет, чтобы браузерные хоткеи начали отлавливаться (там еще код для этого). Я совсем забыл про эту особенность, редко попадаются такие корявые флешки. Понял только когда увидел «wmode=transparent» на предложенной тобой странице.

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

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

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

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

в том-то и дело что без него все в порядке.

А, я просто не понял.

что wmode отрабатывает идентично с чистым NPAPI флеш

Если в конфиг добавить «enable_windowed_mode = 0», то будет использоваться только windowless режим. В этом режиме плагин не использует отдельное окно, а все события получает через браузер. Правда не будут работать скролл (скролится страница) и IME.

i-rinat ★★★★★
() автор топика
20 декабря 2015 г.

Шел 2015-й год, и девайсы учтиво предлагали мне в плеере не включать громко музыку ибо это может повредить слух...(с)

Вопрос: почему ютуб и коуб запоминают громкость видео, а Фейсбук и некоторые другие - нет? Кто виноват? Иногда аж трисет бесит когда включаешь какое-то видео в ФБ, а оттуда ДРРРЫНГРРРРРДЖЗЗ!!!!11 и писец барабанным перепонкам... Ладно если я один в квартире, а если кто-то спит в соседней комнате? Простите, наболело.
Кому жаловаться? :)

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

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

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

а Фейсбук и некоторые другие - нет?

А там поленились.

Кому жаловаться?

Если (1) это работает через freshwrapper, (2) громкость сохраняется в Chrome, (3) громкость не сохраняется в Firefox с freshwrapper, то мне. В другом случае — в техподдержку тех сайтов.

Ещё есть вариант поискать расширение для браузера, которое будет запоминать и восстанавливать громкость.

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

(3) громкость не сохраняется в Firefox с freshwrapper

Ну вот, собственно, хотелось бы очень как фичу :) Было бы просто великолепно.

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

Оно не особо повлияет на громкость некоторых видосов. Там перегрузы иногда идут капец просто... Даже если в системе выставлю 70 или 60% вместо своих привычных 90, то все равно будет громко. А вот менять системный звук каждый раз как-то не комильфо, согласись. У меня весь остальной софт настроен соотетствующе и все отлично: системный звук настроен оптимально, я ж не первый год так работаю все таки.
В том же Deadbeef'е, например, выставлена громкость -25dB (чуть меньше половины полоски громкости), что как бы нормально. Могу, конечно понизить системную громкость, повышу ее в плеерах и прочем софте - не проблема, но на том же ютубе бывают видео с очень тихим звуком.
Каждый раз дергать системные настройки и подстраиваться под разные видео - брррр :) Такая вот загвоздка.
Было бы отлично если бы громкость видео Фейсбука сохранялась где-то в ~/.config/freshwrapper-data, как и все остальное...

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

Ну вот, собственно, хотелось бы очень как фичу

Но она ведь и в Chrome не сохраняется.

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

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

А, ок, значит я не совсем тебя понял. Думал, можно. Тогда забей, фиг с ним. Придумаю что-нибудь. Значит виноваты кодеры ФБ?

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

значит я не совсем тебя понял.

Там три пункта, и все должны быть одновременно выполнены. То есть если это что-то, что работает в Chrome, но не работает в freshwrapper, это можно починить. Теоретически. (На практике я вижу, что PepperFlash переставляет местами слайсы в H.264 потоке, из-за чего аппаратный декодер с ума сходит.)

Значит виноваты кодеры ФБ?

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

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

Релизы еще будут?

Три часа назад v0.3.4 релизнул.

Стоит гит юзать?

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

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

Упс, только сейчас увидел, что есть новый релиз. А почему такая разница:

freshplayerplugin-0.3.3.tar.gz - 2.7. MB
freshplayerplugin-0.3.4.tar.gz - 768.3 kB

И еще:

graphics: add non-XRender fallback

Это для чего?

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

А почему такая разница

В 3rdparty/angle лежат исходники ANGLE. Это реализация OpenGL|ES 2, которая может работать поверх GLX+OpenGL или Direct3D. В v0.3.3 она лежала целиком, а некоторое время назад я вырезал из её кода ненужные куски. Целевая платформа — Linux, так что кроме конвертера ESSL → GLSL мне оттуда ничего не нужно.

graphics: add non-XRender fallback

Это для чего?

В иксах есть расширение XRender, с помощью которого можно смешивать картинки с альфа каналом, что нужно для корректной работы плагинов с прозрачными областями. Но, как выяснилось, бывают системы, где XRender нет или он не работает. Например при работе через ssh -X. Теперь в этом случае картинки будут смешиваться на CPU.

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

Случайные креши я видел в ситуации, когда Firefox был собранный с сайта, а freshwrapper я собирал сам на своей системе. Комбинация смены C++ ABI с GCC 5.2 (в Debian) и хитрые трюки для перехвата аллокаторов в Firefox'е генерировала очень странные баги. Решилось использованием скриптов компоновщика — теперь наружу не торчат weak символы.

А ещё недавно я добавил вызов gdb. Если приходит SIGSEGV, SIGABRT или SIGILL, freshwrapper вызывает gdb, направляет его на текущий процесс и генерирует backtrace'ы. Они кладутся в /tmp/freshwrapper-backtrace-%d-%d.txt. Так что если у тебя свежая версия, посмотри в эти файлы. Если версия не свежая, стоит обновить: либо сработает сокрытие weak символов, либо будет backtrace до места падения.

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

Вот пример

Мда, всё непросто. Обработчик сигнала — функция call_gdb_signal_handler. Её вызвали из нити, которая сообщения от браузера принимала.

У тебя всё так же Rawhide?

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

Надо плагин собрать с debug

В этом случае это не поможет, так как падает вне freshwrapper.

Неа Fedora 23

Попробую поставить в виртуалке и воспроизвести.

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

Вот ещё backtrace

Да, и там аналогичная ситуация. По каким-то критериям цикл приёма сообщений от браузера решает, что произошла ошибка и вызывает mozalloc_abort(). Это какие-то внутренние разборки между firefox и plugin-container. Возможно, таймауты маленькие и сообщения не успевают обработаться на тяжёлых страницах.

Какие значения у dom.ipc.plugins.timeoutSecs, dom.ipc.plugins.processLaunchTimeoutSecs и dom.ipc.plugins.contentTimeoutSecs? (В about:config)

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

Вроде нормальные значения. Но попробуй dom.ipc.plugins.contentTimeoutSecs до 20 увеличить.

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

Я тут занялся ретроградством и решил начать переходить на 32-разрядный софт. Начал с жирнолиса; помимо вынужденно удалённых при переходе расширений из дебиановского репозитория и локализации, вскоре обнаружил, что отвалились все плагины. Но это меня не остановит, ибо потребление памяти радует — вот уже несколько часов с кучей вкладок стабильно жрёт около 660 МБ, при том, что 64-разрядный быстро вываливался за гигабайт. Со сборкой сабжа под i686, допустим, разберусь, а пепперфлеш теперь тоже из 32-разрядного хромога нужно выковыривать, получается? Или фрешплеер и 64-разрядный может подхватывать, хотя бы после доработки?

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

а пепперфлеш теперь тоже из 32-разрядного хромога нужно выковыривать, получается?

Да.

Или фрешплеер и 64-разрядный может подхватывать, хотя бы после доработки?

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

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

вот уже несколько часов с кучей вкладок стабильно жрёт около 660 МБ

Разведу срач. 64 бита ~50 вкладок, аптайм пара суток - 850 мб.

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

А незагруженных вкладок сколько (они тоже память понемногу жрут, да, на сотнях штук это заметно)? И расширений? А в свопе сколько сидит?

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

Незагруженных около 150, расширений 5(Потребление памяти расширениями не вина браузера), своп не используется.

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

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

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