lettier / movie-monad

:tv: A free and simple to use video player made with Haskell.
https://lettier.github.io/movie-monad
BSD 3-Clause "New" or "Revised" License
421 stars 24 forks source link

AppImage doesn't seem to play video #5

Closed probonopd closed 5 years ago

probonopd commented 7 years ago

Tried on a few different distributions including openSUSE LEAP 42.3 KDE, and the AppImage doesn't seem to play video. Which distributions did you test this on?

lettier commented 7 years ago

Hello @probonopd.

I have tested Movie Monad on the following distributions. Each were able to play video.

I also tested on openSUSE Tumbleweed but could not get GStreamer running.

screenshot_2017-09-20_03-41-05 screenshot_2017-09-20_02-53-14 screenshot_2017-09-20_02-01-45 screenshot_2017-09-20_01-57-26

:+1:

probonopd commented 7 years ago

Thank you. So I must be missing something. Must GStreamer be installed in the system or is the AppImage bundling it? (it probably should)

lettier commented 7 years ago

Hello @probonopd.

Yes, Movie Monad requires GStreamer-1.0 be installed on the system. All major Linux distributions have GStreamer-1.0 packages and typically ship with it already installed.

I am not sure of the ramifications regarding bundling GStreamer. Still, even if bundled, it would not provide a full out-of-the-box experience given that I cannot bundle many of the codecs GStreamer would need in order to support the multitude of video formats in existence.

Do you have an example of an AppImage that uses GStreamer or better yet, bundles GStreamer?

If I were to bundle GStreamer, is it simply taking the shared objects and putting them under AppDir/usr/lib and AppDir/lib64?

Below is the output for Movie Monad.

~/a/movie-monad ❯❯❯ ldd MovieMonad.AppDir/usr/bin/movie-monad                                                                                                            
        linux-vdso.so.1 (0x00007ffd761cf000)                                                                                                                             
        libgtk-3.so.0 => /usr/lib/libgtk-3.so.0 (0x00007fb014082000)                                                                                                     
        libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x00007fb013d8b000)                                                                                                     
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007fb013b7e000)                                                                                   
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x00007fb013932000)                                                                                             
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x00007fb01370c000)                                                                                                 
        libcairo-gobject.so.2 => /usr/lib/libcairo-gobject.so.2 (0x00007fb013503000)                                                                                     
        libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007fb0131d6000)                                                                                                     
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00007fb012fae000)                                                                                   
        libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00007fb012c13000)                                                                                                 
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007fb0129c0000)                                                                                         
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007fb0126ad000)                                                                                               
        libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007fb012417000)                                                                                       
        libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007fb0121b2000)                                                                                         
        libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007fb011e79000)                                                                                     
        libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fb011b3a000)                                                                                                         
        libgirepository-1.0.so.1 => /usr/lib/libgirepository-1.0.so.1 (0x00007fb011906000)                                                                               
        libz.so.1 => /usr/lib/libz.so.1 (0x00007fb0116ef000)                                                                                                             
        librt.so.1 => /usr/lib/librt.so.1 (0x00007fb0114e7000)                                                                                                           
        libutil.so.1 => /usr/lib/libutil.so.1 (0x00007fb0112e4000)                                                                                                       
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fb0110e0000)                                                                                                           
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fb010ec2000)                                                                                                 
        libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007fb010c2f000)                  
        libm.so.6 => /usr/lib/libm.so.6 (0x00007fb01091d000)                        
        libc.so.6 => /usr/lib/libc.so.6 (0x00007fb010577000)                        
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007fb010373000)    
        libXi.so.6 => /usr/lib/libXi.so.6 (0x00007fb010162000)                      
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007fb00ff5c000)              
        libatk-bridge-2.0.so.0 => /usr/lib/libatk-bridge-2.0.so.0 (0x00007fb00fd2d000)                                                                                   
        libepoxy.so.0 => /usr/lib/libepoxy.so.0 (0x00007fb00fa47000)                
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x00007fb00f832000)  
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007fb00f5ee000)      
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007fb00f3eb000)          
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00007fb00f1e0000)              
        libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00007fb00efd5000)            
        libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x00007fb00edd2000)      
        libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00007fb00ebcf000)            
        libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x00007fb00e98f000)        
        libwayland-cursor.so.0 => /usr/lib/libwayland-cursor.so.0 (0x00007fb00e787000)                                                                                   
        libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x00007fb00e585000)    
        libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00007fb00e376000)                                                                                   
        libXext.so.6 => /usr/lib/libXext.so.6 (0x00007fb00e164000)                  
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007fb00de9d000)          
        libthai.so.0 => /usr/lib/libthai.so.0 (0x00007fb00dc93000)                  
        libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00007fb00d9eb000)          
        libEGL.so.1 => /usr/lib/libEGL.so.1 (0x00007fb00d7d8000)                    
        libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007fb00d5a2000)              
        libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x00007fb00d39e000)            
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fb00d175000)                    
        libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x00007fb00cf67000)      
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007fb00cd5c000)            
        libGL.so.1 => /usr/lib/libGL.so.1 (0x00007fb00cad1000)                      
        libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007fb00c8bb000)              
        libmount.so.1 => /usr/lib/libmount.so.1 (0x00007fb00c666000)                
        libffi.so.6 => /usr/lib/libffi.so.6 (0x00007fb00c45d000)                    
        libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007fb00c1ea000)                  
        liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007fb00bf69000)            
        libunwind.so.8 => /usr/lib/libunwind.so.8 (0x00007fb00bd4f000)              
        libdw.so.1 => /usr/lib/libdw.so.1 (0x00007fb00bb07000)                      
        /lib64/ld-linux-x86-64.so.2 (0x00007fb014983000)                            
        libatspi.so.0 => /usr/lib/libatspi.so.0 (0x00007fb00b8d6000)                
        libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007fb00b686000)              
        libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007fb00b3ee000)          
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007fb00b1bb000)                
        libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007fb00afab000)                
        libdatrie.so.1 => /usr/lib/libdatrie.so.1 (0x00007fb00ada3000)              
        libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007fb00aaed000)      
        libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fb00a8e9000)                    
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fb00a6e3000)                
        libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007fb00a4b1000)                    
        libblkid.so.1 => /usr/lib/libblkid.so.1 (0x00007fb00a266000)                
        libuuid.so.1 => /usr/lib/libuuid.so.1 (0x00007fb00a061000)                  
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fb009e4a000)                
        liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007fb009c24000)                  
        libelf.so.1 => /usr/lib/libelf.so.1 (0x00007fb009a0c000)                    
        libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00007fb014ac2000)            
        libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007fb0097e0000)        
        libcap.so.2 => /usr/lib/libcap.so.2 (0x00007fb0095dc000)                    
        liblz4.so.1 => /usr/lib/liblz4.so.1 (0x00007fb0093c8000)                    
        libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007fb0090ba000)            
        libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007fb008ea5000) 

I believe these are the GStreamer related ones.

~/a/movie-monad ❯❯❯ ldd MovieMonad.AppDir/usr/bin/movie-monad | grep -i gst                                                                                            ⏎ 
        libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007f16a810a000)  
        libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007f16a7ea5000)    
        libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007f16a7b6c000)

:+1:

probonopd commented 7 years ago

Here is an example: https://github.com/FrancescoCeruti/linux-show-player/issues/53 Also see: https://github.com/GStreamer/gstreamer/blob/master/scripts/gst-uninstalled

nephaste commented 6 years ago

look like i have same issue on Qnap NAS HD_Station (ubuntu 1404 chroot) and no apt-get or else command... can you please use a gstreamer in appimages ?

` (movie-monad:24681): Gtk-WARNING **: GtkDrawingArea 0x36e40c0 is mapped but visible=0 child_visible=1 parent GtkBox 0x3542690 mapped=1 gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory)

(movie-monad:24681): Gtk-WARNING **: GtkDrawingArea 0x36e40c0 is mapped but not visible

(movie-monad:24681): Gtk-WARNING **: GtkDrawingArea 0x36e40c0 is mapped but visible=0 child_visible=1 parent GtkBox 0x3542690 mapped=1 gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory) gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory) gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory) gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory) gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory) gst-discoverer-1.0: readCreateProcessWithExitCode: runInteractiveProcess: exec: does not exist (No such file or directory)

(movie-monad:24681): Gtk-WARNING **: GtkDrawingArea 0x36e40c0 is mapped but not visible

(movie-monad:24681): Gtk-WARNING **: GtkDrawingArea 0x36e40c0 is mapped but visible=0 child_visible=1 parent GtkBox 0x3542690 mapped=1`

probonopd commented 6 years ago

Maybe the best approach would be to provide two AppImages - one with GStreamer bundled, and the other without?

nephaste commented 6 years ago

indeed would be great... there is no way on Qnap HDStation to install anything with package manager...also all source installed qpkg must be compiled within a prefix /opt... I never tried to make appimage on my side.. but playing with environment flags export can do the trick inside the container (i guess)

lettier commented 6 years ago

Hello @nephaste and @probonopd,

What version of GStreamer does the Qnap HD Station come with, if any?

gst-inspect-1.0 --version

I have made some progress on this. So far I've successfully built and installed GStreamer 1.8 and 1.12 on Ubuntu 14.04. The problem now is building Movie Monad on Ubuntu 14.04 using this manual installation of GStreamer. The Haskell bindings cannot find all of the GObject introspection data.

As of right now, Ubuntu 14.04 is not fully supported. While the current AppImage does run, showing the UI, the need for GStreamer version 1.8 or higher prevents any videos from playing.

One solution would be to maintain a separate branch and AppImage just for Ubuntu 14.04. Movie Monad would have to target GStreamer 1.2 which is the version that ships with Ubuntu 14.04.

In any case, bundling and distributing GStreamer is problematic and risky. GStreamer is widely distributed to a vast number of Linux distributions so the need to bundle it along with Movie Monad is quite low. To be truly portable, the codecs needed to play common formats would also have to be bundled along with Movie Monad but that is unfeasible.

I will continue to try and build Movie Monad on Ubuntu 14.04 using a copy of GStreamer 1.8 or higher. Once built, I will have to research what I can and cannot bundle and what are the licensing requirements with distributing GStreamer and its various plugins.

:+1:

nephaste commented 6 years ago

Hi Lettier... indeed no gstreamer installed on Qnap HDStation... HDStation is a minimalist Ubuntu 14.04.4 without any packager management so impossible to run apt-get or aptitude command..

it is a jailed rooted system.. and package installation is very tricky, that why i love Appimage makin life really simple on qpkg integration for this system ...

i use already some Appimage from probono from bintray and users loves it...

i am working for Qnap Support (in France) and also developper for QnapClub repository (www.qnapclub.eu)

probonopd commented 6 years ago

Wow, this sounds like a very good use case for AppImage @nephaste. I was always thinking of making a Linux system that comes without a package manager where users could run all applications as AppImages - seems like HDStation is exactly that. I'd be interested to learn more about it and how AppImage could help (not just regarding this ticket here). Please contact me via the mail address given at the bottom of appimage.org. Thanks.