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

С VDPAU 0.9 так же. Блин, неужели в Казани все такие жадные, старенькую 560 Ti подарить не могут...

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

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

Попробуй MAX_VDP_SURFACES убавить в pp_resource.h и пересобрать.

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

Убавил с 16 до 8, не подействовало, ошибка та же. Впрочем, VDPAU для меня опционален и не сильно нужен - комп тянет. В крайнем случае есть youtube-dl. Главное - что заработал новый Flash! Скоро потестирую на том же железе, но в попсовом дистре.

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

Странное дело, включил субтитры на youtube, а там кодировка неправильная.

NaiLi ★★
()

В ночной сборке Firefox добавили индикаторы звука от страниц на вкладках и их поддержку в NPAPI. А я добавил соответствующий код в freshwrapper. Теперь можно выключать звуки от Flash в отдельных вкладках. (И от HTML5 плееров, конечно).

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

На nouveau с enable_hwdec=1 лагает и количество dropped frames растёт, хотя в mpv через vdpau всё нормально. На блобе тоже всё работает.

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

Привет! Смотрю историю коммитов, увидел отключение VSync через OpenGL и через DRM. А почему? А ещё у меня всё прекрасно собралось с GCC 4.6, но запрет использования GLES повысил требования до GCC 4.7 (код захотел C++11). Можно уточнить требования в README :-)

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

К сожалению, у меня нет ни карты nVidia. Даже вставлять её некуда. Тут я могу только надеяться на кого-то другого с подходящим оборудованием и набором навыков. Если причина бага будет известна, то исправление должно быть простым для проверки. Но вслепую исправить у меня не выйдет.

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

Смотрю историю коммитов, увидел отключение VSync через OpenGL и через DRM. А почему?

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

Vsync через DRM по умолчанию включен, но отключается, если с ним были какие-то ошибки. Недавно я словил такую ситуацию: каждый вызов длился около двух секунд, из-за чего видео превращалось в слайдшоу с ½ fps. Лечится отключением vsync в конфиге, но я решил сделать так, чтобы оно отрубалось само.

Можно уточнить требования в README

Добавлю как-нибудь упоминание о С++11.

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

У меня не совсем каноничное использование VDPAU, используются несколько presentation queue, штук 16 вроде. И столько же presentation target. Каждая из них цепляется к своему Pixmap, который через texture-from-pixmap отображается в текстуру. По идее, есть GL-VDPAU interop, но у меня пока что не на чем его пробовать.

В mpv используется одна presentation queue, один target. Это если вывод через VDPAU. Или тот самый GL-VDPAU interop.

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

А если попробовать отладить по VNC?

Кажется мне, что это будет мучительно.

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

Свежий FreshPlayerPlugin собранный с vdpau, в конфиге ~/.config/freshwrapper.conf

enable_hwdec=1
enable_vaapi=0

смотреть любое 1080p видео на ютубе.

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

ну все работает, причем что vdpau что vaapi , особой разницы между ними не увидел, но меморимап явно показыает что в одном случаем используется vaapi в другом vdpau

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

А по правому клику на видео в «статистика для сисадминов» точно показывает 1080p и accelerate rendering c accelerated decoding? Похоже баг в nouveau.

nvidia
()

Опять странности с полным экраном: При первом открытии на весь экран все конторлы в «кучку». Повторное открытие норм. Хотя надпись «Нажмите ESC для выхода из полноэкранного режима на том же месте». И после выхода из этого режима часто картинка «застывает», пока не прокрутишь страницу.

Правда, всё «альфа\бета».
Fedora rawhide,
GNOME Shell 3.17.90
Firefox dev edition 42.0a2 (2015-08-22)
fresh собран только что с фагом WITH_GTK=3

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

WITH_GTK=3

В директории с Firefox есть gtk2/libmozgtk.so, которая слинкована с GTK+2 и загружается в plugin-container. Поэтому если собрать freshwrapper с GTK+3, загрузятся сразу обе версии GTK+, что чревато разными глюками. Скопируй туда libmozgtk.so из корня, чтобы и для плагинов использовалась только GTK+3.

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

В консоли только это:

(plugin-container:11224): Gdk-WARNING **: The GDK_NATIVE_WINDOWS environment variable is not supported in GTK3.
See the documentation for gdk_window_ensure_native() on how to get native windows.
NOT SANDBOXED
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh 11230] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 11230] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
Vector smash protection is enabled.
[fresh 11230] [PPB] {zilch} ppb_network_monitor_update_network_list
[fresh 11230] [PPB] {zilch} ppb_flash_set_instance_always_on_top instance=11, on_top=1
[fresh 11230] [PPB] {zilch} ppb_network_monitor_update_network_list
[fresh 11230] [PPB] {zilch} ppb_flash_set_instance_always_on_top instance=12, on_top=1


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

Rawhide в виртуалке у меня почему-то не смог графику инициализировать, но зато вышло воспроизвести на основной машине, на плеере seasonvar. Правда, воспроизводится нестабильно.

Можешь проверить, влияет ли как-то добавление параметра fs_delay_ms = 1000 в конфиг? Это значение управляет задержкой переключения в полноэкранный режим. По умолчанию там 300 миллисекунд, чего, возможно, не хватает.

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

Заработало видео через вебку. Очень ждал этого. Отдельное спасибо

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

Добавил ныкание промежуточных размеров окна, чтобы PepperFlash не получил ненароком что-то типа 10x10. Костыль, конечно, но иначе тут никак. Пока PepperFlash игнорирует все размеры, кроме первого увиденного, что-нибудь может вылезти. Но если монитор один, больше не должно.

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

А vdpau на свободных амд-дровах кроме Youtube где-нибудь еще работает?

Видюха HD8400, в mpv тянет 1080p.

Flash в Youtube мне за ненадобностью (вполне хватает ViewTube.js+mpv), но специально воткнул YouTube Flash Video Player, чтобы ютуб во флеше игрался и протестил с

enable_hwdec = 1
и
enable_hwdec = 0
С включенным декодированием нагрузка на проц ощутимо меньше. Теперь беру peers.tv - фигу с дрыгой, не работает, а очень хочется. Ошибок как таковых нет, говорит ли это о том, что поток там кривой и не совместим с аппаратным декодированием?
firefox

(process:24099): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 24187] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 24187] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
Vector smash protection is enabled.
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
Начинаю уже просто пробовать любые другие популярные сайты с видео во flash:

twitch.tv - не работает

firefox

(process:27406): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh 27501] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 27501] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
Vector smash protection is enabled.
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh] [error] handle_tcp_connect_stage3, res = -1, errno = 111 (telegraph.twitch.tv:843)
[fresh] [error] handle_tcp_connect_stage3, res = -1, errno = 111 (telegraph.twitch.tv:843)
[fresh] [warning] ppb_tcp_socket_get_local_address, not connected
[fresh] [warning] ppb_tcp_socket_get_remote_address, not connected
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)

nbc.com/video - не работает

firefox

(process:28065): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh 28168] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 28168] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
Vector smash protection is enabled.
[fresh] [warning] ppb_var_var_to_utf8, 'var' is not a string, (0)
[fresh] [error] ppb_browser_font_measure_text, bad resource
[fresh] [error] ppb_browser_font_measure_text, bad resource
[fresh] [error] execute_script_ptac, NPN_Evaluate failed
[fresh] [error] execute_script_ptac, NPN_Evaluate failed
Мне последние 2 нафиг не нужны, главное - заставить этот пирс фурычить...

Что посоветуете?

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

А vdpau на свободных амд-дровах кроме Youtube где-нибудь еще работает?

Для того, чтобы Flash плеер задействовал аппаратное декодирование, swf нужно переписать с использованием StageVideo. StageVideo это сравнительно недавно (2010 год) добавленный альтенативный способ проигрывания. Видео играется на фоне сцены, а чтобы его было видно, сцена делается частично прозрачной. Такой способ скрывает от swf содержимое видео и поэтому позволяет задействовать аппаратное ускорение для декодирования и вывода. Собственно экономия заключается в том, что после декодирования картинка не покидает память GPU. Если плеер вдруг захочет наложить какой-нибудь эффект на видео, картинка выкачивается в память CPU, там обрабатывается, а потом загружается обратно в GPU для показа на экране. Эти манипуляции съедают столько CPU времени, что смысл в GPU декодировании просто теряется.

На Youtube плеер точно умеет StageVideo. На остальных — как повезёт.

В готовых плеерах для установки на страницы StageVideo может быть выключен, хотя и поддерживается. Так, в flowplayer'е его нужно специально включать.

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

Посмотрел twitch.tv и peers.tv. Их плееры даже не пытаются задействовать аппаратный декодер. На peer.tv используется jwplayer, который так и не умеет использовать StageVideo. У них в блоге есть заметка, датированная 2011-м годом, но дальше неё дело не пошло, похоже.

i-rinat ★★★★★
() автор топика
Последнее исправление: i-rinat (всего исправлений: 1)
27 сентября 2015 г.

Ринат, помню ты просил протестировать что-то связанное с nvidia. Так случилось, что я собираюсь наконец обзавестись видеокартой невстроенной ради поддержки нескольких мониторов. Подойдет ли для тестов такая: http://www.ulmart.ru/goods/900756 . Сильно мощная мне все равно не нужна.

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

На Твиче обещали на HTML5 перейти в относительно близжайшее время.

Они это уже пару лет обещают, но до практики почему-то у них пока не доходит.

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

Я уже и забыл, что тестировать хотел. До машины с nVidia картой (вроде там GTX 980) я всё-таки добрался, даже потестил, но баги воспроизвести не удалось. Наверное, ресурсов слишком много.

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

тогда хотя бы скажи, подойдет ли указанная видеокарта для разных фишек твоей прослойки, типо 3d-ускорения, аппаратного декодирования и прочего?

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

С чего бы это? Попробовал в safari, вроде нормально работает.

Дообкатают, обтестируют...

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

подойдет ли указанная видеокарта

Чтобы уверенно ответить да или нет, надо взять эту карту и протестировать. Формально, они все умеют всё. Разница только в ресурсах: производительность, объём памяти. И вот тут начинаются тонкости. PepperFlash сначала создаёт новый контекст, а только потом сбрасывает старый. Поэтому некоторое время два контекста должны существовать одновременно. Почему-то на некоторых картах второй контекст не получается создать. Как мне показалось, проблемы были на младших моделях, тогда как старшие осиливали это без проблем. Конкретного списка оборудования, на котором всё работает, у меня нет.

С 3d проблем быть не должно, разве что понадобится сконфигурировать с -DWITH_GLES2=0, чтобы транслятор шейдеров подключился.

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

О, больше не падает. Проверял и с enable_vaapi=1 и с enable_vdpau=1.
А как определить, получает ли оно какой-то профит от hwdec и какой?

[IP-] [  ] www-plugins/freshplayerplugin-0.3.2:0
[IP-] [  ] www-plugins/chrome-binary-plugins-46.0.2490.42_beta1:beta
[IP-] [  ] www-client/firefox-41.0-r1:0
[IP-] [  ] x11-drivers/xf86-video-nouveau-1.0.11:0
01:00.0 VGA compatible controller: NVIDIA Corporation GT218 [GeForce 210] (rev a2)
$ vainfo 
libva info: VA-API version 0.38.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/va/drivers/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.38 (libva 1.6.1)
vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA-API - 0.7.4
...
$ vdpauinfo
display: :0   screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0
...
$ cat .config/freshwrapper.conf 
pepperflash_path = "/usr/lib/chromium-browser/PepperFlash/libpepflashplayer.so"
flash_command_line = "enable_hw_video_decode=1,enable_stagevideo_auto=1"
enable_3d = 1
enable_hwdec = 1
enable_vaapi = 0
enable_vdpau = 1
enable_vsync = 1

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

А как определить, получает ли оно какой-то профит от hwdec и какой?

Как обычно. Если у CPU не хватало мощности для декодирования, а стало играть без подтормаживаний, то профит есть. Если стало меньше энергии есть (или меньше греться), то профит есть. Иначе — профита нет.

Например, у меня до 720p разницы вообще не заметно.

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