i-rinat / freshplayerplugin

ppapi2npapi compatibility layer
MIT License
727 stars 52 forks source link

Chrome browser libpepflashplayer.so fails to load #356

Open mwpow3ll opened 7 years ago

mwpow3ll commented 7 years ago

I downloaded both the master src and the 0.3.6 release src and built (both produce same results), copied the libfreshwrapper-flashplayer.so to ~/.mozilla/plugins, created ~/.config/freshwrapper.conf and set the path to Chrome pepper flash (which by defaults includes the manifest.json with the version), and loaded Firefox. Firefox sees the fresh wrapper flash player plugin, but when I go to http://www.adobe.com/software/flash/about/ I see the error that libpepflashplayer.so failed to load. The path supplied in the conf file is correct and Chrome uses the same flash just fine. chmod 755 doesn't help... any options?

i-rinat commented 7 years ago

Hi.

Just to be sure, are you using full path to the libpepflashplayer.so, including file name?

Also, try to run ldd -r -d libpepflashplayer.so in a terminal emulator in the directory where libpepflashplayer.so is located. This command tries to load a library and shows what functions (-r) and exported data (-d) are missing. Something like "not found" or "not defined" in its output means there is something wrong with libraries versions.

mwpow3ll commented 7 years ago

freshwrapper.conf (essentially example config with the path set, but when I tested the chrome pepper flash instead of the ChromeOS, I used the same path and copied it in)

# Configuration options for FreshPlayerPlugin

# This configuration file is optional. Wrapper will search for it first
# in ~/.config/freshwrapper.conf, then in /etc/freshwrapper.conf.
# If wrapper fails to find configuration, it will use default values,
# which you can find below

# Audio buffer is used to continuously provide sound adapter with data.
# Values too low may lead to buffer underruns and stuttering.  Values
# too high will lead to noticeable latency. Usually plugin selects size
# on its own, but you may override bounds here

# lower bound for audio buffer size, in milliseconds
audio_buffer_min_ms = 20

# higher bound of audio buffer size, in milliseconds
audio_buffer_max_ms = 500

# output sound through JACK. If enabled, only JACK will be tried, and if
# your machine doesn't have it, there would be no sound, and no sync
audio_use_jack = 0

# whenever to automatically connect application ports to system ones.
# If you set this to one, no sound would be produces until you make
# connection some way
jack_autoconnect_ports = 1

# JACK server name. Omit the option to use default value
#
# jack_server_name = "default"

# starts JACK server on demand
jack_autostart_server = 1

# Path to the Pepper Flash plugin.
# If the option is absent, freshwrapper will search for Pepper Flash in
# a number of locations where it could be. Usually that's enough, but if
# not, you should manually enter the right path. Multiple paths could
# be specified, separated by colon.
pepperflash_path = "/home/mwpow3ll/Documents/pepper_9202.64.0_kefka/libpepflashplayer.so"

# "Command-line" arguments for Flash
flash_command_line = "enable_hw_video_decode=1,enable_stagevideo_auto=1"

# enable 3d and stage 3d
enable_3d = 1

# enable hardware-accelerated video decoding. Requires 3d to really work
enable_hwdec = 0

# when set to 1, limits output to warnings and errors only
quiet = 0

# When multiple monitors with different resolutions are used, size
# of fullscreen window can vary. But some Flash movies request these
# parameters once at startup and rely on them to be correct. By default,
# if zeros are used here, freshwrapper will select minimal width and
# height across all monitors.
fullscreen_width = 0
fullscreen_height = 0

# Enables DNS query case randomization to partially protect against DNS
# poisoning attacks. It was reported that some Mikrotik routers do not
# support this trick. Set parameter to 0 if you have an affected model
randomize_dns_case = 0

# scaling factor (floating point value) used to convert screen pixels
# to device independent pixels. You may need it for displays with
# high DPI
device_scale = 1

# method org.freedesktop.ScreenSaver.SimulateUserActivity() in KDE 5 seems
# to have no effect unless GetSessionIdleTime() called afterwards. Set
# parameter to 1 to call latter
quirk_plasma5_screensaver = 0

# whenever to use windowed plugin mode
enable_windowed_mode = 1

# whenever XEmbed used in windowed mode (if browser advertises its support)
enable_xembed = 1

# if set to 1, fullscreen window will be kept always above browser, and hidden
# from taskbar and pager
tie_fullscreen_window_to_browser = 1

# enable using of VA-API for hardware accelerated video decoding
enable_vaapi = 1

# enable using of VDPAU for hardware accelerated video decoding
enable_vdpau = 1

# microseconds to wait after vsync event
vsync_afterwait_us = 0

# fullscreen transition delay, in milliseconds
fs_delay_ms = 300

# wait for vertical blank event before drawing on screen
enable_vsync = 1

# how close in time two clicks should be to treat them as a doubleclick
double_click_delay_ms = 400

# show version and git commit hash (if was available) of freshwrapper
# in the context menu (right mouse button menu)
show_version_info = 0

# probe video capture devices for their names and capabilities
probe_video_capture_devices = 1

# use XRender to blend images
enable_xrender = 1

ldd for libfreshwrapper-freshplayer

    libasound.so.2 => /lib64/libasound.so.2 (0x00007f4126e14000)
    libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f4126a8e000)
    libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f4126883000)
    libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f4126679000)
    libX11.so.6 => /lib64/libX11.so.6 (0x00007f4126338000)
    libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f412612d000)
    libGL.so.1 => /usr/lib64/libglvnd/libGL.so.1 (0x00007f4125ea1000)
    libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f4125c8f000)
    libevent_pthreads-2.0.so.5 => /lib64/libevent_pthreads-2.0.so.5 (0x00007f4125a8c000)
    libevent-2.0.so.5 => /lib64/libevent-2.0.so.5 (0x00007f4125843000)
    libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007f4125635000)
    libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f412530c000)
    libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f41250f7000)
    libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f4124eab000)
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f4124c59000)
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f412494b000)
    libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f4124707000)
    libfreetype.so.6 => /usr/lib64/freetype-freeworld/libfreetype.so.6 (0x00007f4124458000)
    libssl.so.10 => /lib64/libssl.so.10 (0x00007f41241e6000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f4123d84000)
    libicuuc.so.56 => /lib64/libicuuc.so.56 (0x00007f41239ec000)
    libicudata.so.56 => /lib64/libicudata.so.56 (0x00007f4122007000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f4121e02000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f4121bfa000)
    libpulse.so.0 => /lib64/libpulse.so.0 (0x00007f41219aa000)
    libavcodec.so.57 => /lib64/libavcodec.so.57 (0x00007f41205fc000)
    libavutil.so.55 => /lib64/libavutil.so.55 (0x00007f4120382000)
    libva-x11.so.1 => /lib64/libva-x11.so.1 (0x00007f412017c000)
    libva.so.1 => /lib64/libva.so.1 (0x00007f411ff5b000)
    libvdpau.so.1 => /lib64/libvdpau.so.1 (0x00007f411fd57000)
    libv4l2.so.0 => /lib64/libv4l2.so.0 (0x00007f411fb49000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f411f83f000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f411f4b7000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f411f2a0000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f411f083000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f411ecc1000)
    /lib64/ld-linux-x86-64.so.2 (0x0000556fce120000)
    libffi.so.6 => /lib64/libffi.so.6 (0x00007f411eab9000)
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f411e8b4000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f411e641000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f411e42b000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f411e203000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f411dfe9000)
    libXext.so.6 => /lib64/libXext.so.6 (0x00007f411ddd7000)
    libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f411dbb4000)
    libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f411d9ae000)
    libGLX.so.0 => /usr/lib64/libglvnd/libGLX.so.0 (0x00007f411d77d000)
    libGLdispatch.so.0 => /lib64/libGLdispatch.so.0 (0x00007f411d4c6000)
    libthai.so.0 => /lib64/libthai.so.0 (0x00007f411d2bd000)
    libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f411d0bb000)
    libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f411ce3a000)
    libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f411cb91000)
    libEGL.so.1 => /usr/lib64/libglvnd/libEGL.so.1 (0x00007f411c97e000)
    libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f411c74a000)
    libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f411c546000)
    libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f411c33c000)
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f411c10f000)
    libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f411beff000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f411bcb1000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f411b9cb000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f411b7c7000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f411b595000)
    libpulsecommon-8.0.so => /usr/lib64/pulseaudio/libpulsecommon-8.0.so (0x00007f411b317000)
    libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007f411b114000)
    libICE.so.6 => /lib64/libICE.so.6 (0x00007f411aef8000)
    libSM.so.6 => /lib64/libSM.so.6 (0x00007f411acf0000)
    libXtst.so.6 => /lib64/libXtst.so.6 (0x00007f411aae9000)
    libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f411aa5f000)
    libjson-c.so.2 => /lib64/libjson-c.so.2 (0x00007f411a854000)
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f411a648000)
    libsndfile.so.1 => /lib64/libsndfile.so.1 (0x00007f411a3da000)
    libasyncns.so.0 => /lib64/libasyncns.so.0 (0x00007f411a1d4000)
    libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f4119f83000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f4119d7e000)
    libswresample.so.2 => /lib64/libswresample.so.2 (0x00007f4119b62000)
    libva-drm.so.1 => /lib64/libva-drm.so.1 (0x00007f411995e000)
    libxvidcore.so.4 => /lib64/libxvidcore.so.4 (0x00007f411964d000)
    libx265.so.79 => /lib64/libx265.so.79 (0x00007f41190fa000)
    libx264.so.148 => /lib64/libx264.so.148 (0x00007f4118d9b000)
    libvpx.so.3 => /lib64/libvpx.so.3 (0x00007f4118a24000)
    libvorbisenc.so.2 => /lib64/libvorbisenc.so.2 (0x00007f411877b000)
    libvorbis.so.0 => /lib64/libvorbis.so.0 (0x00007f411854e000)
    libtheoraenc.so.1 => /lib64/libtheoraenc.so.1 (0x00007f411830d000)
    libtheoradec.so.1 => /lib64/libtheoradec.so.1 (0x00007f41180f2000)
    libspeex.so.1 => /lib64/libspeex.so.1 (0x00007f4117ed8000)
    libschroedinger-1.0.so.0 => /lib64/libschroedinger-1.0.so.0 (0x00007f4117bf5000)
    libopus.so.0 => /lib64/libopus.so.0 (0x00007f41179a4000)
    libopenjp2.so.7 => /lib64/libopenjp2.so.7 (0x00007f411776d000)
    libmp3lame.so.0 => /lib64/libmp3lame.so.0 (0x00007f41174f6000)
    libmfx.so.0 => /lib64/libmfx.so.0 (0x00007f41172e2000)
    libgsm.so.1 => /lib64/libgsm.so.1 (0x00007f41170d5000)
    libOpenCL.so.1 => /lib64/libOpenCL.so.1 (0x00007f4116eb6000)
    libv4lconvert.so.0 => /lib64/libv4lconvert.so.0 (0x00007f4116c3b000)
    libXau.so.6 => /lib64/libXau.so.6 (0x00007f4116a37000)
    libdatrie.so.1 => /lib64/libdatrie.so.1 (0x00007f411682e000)
    libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f4116602000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f41163f2000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f41161ee000)
    libbsd.so.0 => /lib64/libbsd.so.0 (0x00007f4115fd8000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f4115dd3000)
    libXi.so.6 => /lib64/libXi.so.6 (0x00007f4115bc3000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f411599c000)
    liblz4.so.1 => /lib64/liblz4.so.1 (0x00007f4115788000)
    libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007f41154a2000)
    libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f411528d000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f4115074000)
    libFLAC.so.8 => /lib64/libFLAC.so.8 (0x00007f4114e1a000)
    libogg.so.0 => /lib64/libogg.so.0 (0x00007f4114c12000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f4114a0d000)
    libsoxr.so.0 => /lib64/libsoxr.so.0 (0x00007f41147aa000)
    liborc-0.4.so.0 => /lib64/liborc-0.4.so.0 (0x00007f411452c000)
    libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007f41142c2000)
    libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f4114093000)

ldd for chromeOS libpepflashplayer.so

    libdl.so.2 => /lib64/libdl.so.2 (0x00007f6a618ed000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f6a616e5000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6a6135c000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f6a61053000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6a60e3c000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6a60c1f000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6a6085d000)
    /lib64/ld-linux-x86-64.so.2 (0x0000559d4dba2000)

ldd for chrome libpepflashplayer.so

    linux-vdso.so.1 (0x00007ffffffd6000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ff387793000)
    librt.so.1 => /lib64/librt.so.1 (0x00007ff38758b000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ff387202000)
    libm.so.6 => /lib64/libm.so.6 (0x00007ff386ef9000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff386ce2000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff386ac5000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ff386703000)
    /lib64/ld-linux-x86-64.so.2 (0x000055c979008000)
i-rinat commented 7 years ago

Were those ldd with -r and -d flags? I've seen something like that with PepperFlash from ChromeOS on an older Linux distribution. ChromeOS had newer libc, and PepperFlash depended on newer symbol versions.

By the way, what distribution are you using? What PepperFlash version? Where did you get it?

Some distributions have SELinux policies enabled by default, which can prevent applications from loading libraries from a user's directories.

beew commented 7 years ago

Hi, I have just tested out flash from ChromeOS recovery image with freshplayer. I have a few odd observations which may useful here.

Since it is a bit confusing, In the following I will call pepper flash that comes with Chrome browser on Linux (without DRM support) pepper-flash for Linux and the pepper-flash extracted from ChromeOS recovery image ChromeOS flash.

  1. in order for Adobe to pick up ChromeOS flash, it seems that first one must have a copy of pepper-flash for Linux installed in the system (say by installing Chrome) AND run Firefox once BEFORE editing freshwrapper.conf to change pepperflash_path to point to ChromeOS flash. Firefox Tools > Addons > Plugins shows flash version to be 26 (version of flash for Linux)

Now close Firefox, edit freshwrapper.conf to change pepperflash_path to point to ChromeOS's libpepflashplayer.so (maybe somewhere in $HOME). Start Firefox, go to Tools > Addons > Plugins. Note that It still shows version 26.

Now go to http://www.adobe.com/software/flash/about/ and flash is detected and reported as version 25 (version of ChromeOS flash) The message asks you to update flash, just ignore it. Go to http://drmtest2.adobe.com:8080/SVP/SampleVideoPlayer_FP.html to do the DRM test, it works. Right click to check flash version, it is reported as 25

  1. If the system does not have pepper flash for Linux already installed (more about NPAPI flash later), or if one instalsl freshplayerplugin, then edits freshwrapper.conf and starts Firefox without running it once with pepperflash_path pointing to a copy of pepper-flash for Linux. Firefox > Tools > Addons > Plugins would show flash version to be 0.0.0.0, 1.1.1.1. or some such nonsense. Flash still works for some sites (right click video and flash version is reported as 25 on such sites) but adobe's sites don't pick it up. Go to http://www.adobe.com/software/flash/about/ it will tell you to install flash. Likewise the drm test video viewer doesn't open, instead there is a message telling you to get flash.

  2. On Ubuntu 16.04, if I compile freshplayer from source, then NPAPI flash must not be installed, otherwise Firefox would just use it, and there is no DRM support.

However, if I install freshplayer from webupd8's ppa, then NPAPI flash (adobe-flashplugin) is installed as dependencies and in that case ChromeOS's flash does load correctly. I suppose the webupd8 maintainer must have changed something.

P.S I tested with a clean Firefox profile to make sure that these are not artifacts due to addons.

TrIPpY- commented 5 years ago

Hello and thanks for this wonderful workaround to still use flash.

Instead of flash animations i get a brown yellow placeholder with failed to load error message. Used Version: 3.0.9. Flash works ok in chrome. freshplayer plugin shows in Firefox plugins. Full path is set in freshwrapper.conf. Also tried putting libpepflashplayer.so in path /usr/lib/pepperflashplugin-nonfree like mentioned in README.MD.

The ldd -r -d for libpepflashplayer.so and libfreshwrapper-player.so gave no errors.

I'm pretty sure it can find libpepflashplayer.so

Has something fundamentally changed in flash, that the wrapper doesn't work anymore?

i-rinat commented 5 years ago

Hmm. PepperFlash still works on my machine. I tested only with Flash from Chrome, but haven't tried Flash from ChromeOS yet. Both from Chrome and from ChromeOS, latest available versions.

Have you tried to remove path from freshwrapper.conf? Have you tried the latest freshplayerplugin source? I haven't touched sources for a bit, so forgot what was implemented when. But the latest version seems to be working.

TrIPpY- commented 5 years ago

Thanks for your reply.

Without the path it still the same problem. In The default freshwrapper.sh there is a path, but is commented out.

I use version 3.0.9 downloaded from freshplayerplugin page here on github rigHt now. Before a fedOra 28 package also freshplayer 3.0.9 with same problem.

Is there a newer one?

i-rinat commented 5 years ago

Is there a newer one?

There is, from this repository. However I just checked and found no essential changes from 0.3.9 there.

Let's try to figure out which libpepflashplayer.so is loaded. Start Firefox under strace from terminal emulator. You'll need to close Firefox before that, to ensure that whole Firefox runs under strace and not only that part that activates already running copy:

strace -f -e openat,lstat -o log firefox

Navigate to any page with Flash elements, try to load it. You need to see that placeholder message to ensure that FreshPlayerPlugin is started. Then close Firefox. Search for libpepflashplayer in log file:

grep libpepflashplayer log

There should be a list of paths that are tried.