justdan96 / tsMuxer

tsMuxer is a transport stream muxer for remuxing/muxing elementary streams, EVO/VOB/MPG, MKV/MKA, MP4/MOV, TS, M2TS to TS to M2TS. Supported video codecs H.264/AVC, H.265/HEVC, VC-1, MPEG2. Supported audio codecs AAC, AC3 / E-AC3(DD+), DTS/ DTS-HD.
Apache License 2.0
874 stars 147 forks source link

Is an AppImage available for download? #467

Open probonopd opened 3 years ago

probonopd commented 3 years ago

Is an AppImage (tsMuxerGUI-$VERSION-x86_64.AppImage) available for download? If so, we'd like to add it to https://github.com/AppImage/appimage.github.io. Thanks.

Reference:

justdan96 commented 3 years ago

The AppImage is there - but I have to admit I'm not 100% happy with it. The command line executable is compiled as statically linked but as we are using Qt the AppImage includes lots of dynamic links. These have dependencies on GlibC, OpenGL and lots others and as we are using the Ubuntu:Latest Docker base this means it doesn't work on on the majority of Linux distributions out there.

I'd hoped to be able to figure out how to statically link the Qt app by now but it's been a lot more complicated than I had hoped. At the moment I would suggest users use the repository for their distribution over the AppImage.

Edit: I've just noticed AppImages can be created through OBS, I might look at that as an option.

probonopd commented 3 years ago

The command line executable is compiled as statically linked but as we are using Qt the AppImage includes lots of dynamic links.

Not exactly sure what you mean by this. You can put a statically linked binary into an AppDir, and hence AppImage, just fine and it will not cause additional stuff to be bundled.

Can you elaborate?

justdan96 commented 3 years ago

tsMuxerGUI is basically just a GUI layer over the command-line program tsMuxer. Generating a statically linked tsMuxer is no problem at all, that ensures it is portable across distributions. The problem is with tsMuxerGUI specifically. There are just so many dependencies, one attempt to reduce them produced an executable with dependencies like the below:

        linux-vdso.so.1 (0x00007fffb8bf3000)
        libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007faea8ff3000)
        libwayland-egl.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libwayland-egl.so.1 (0x00007faea8fed000)
        libXcomposite.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libXcomposite.so.1 (0x00007faea8de9000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007faea8caf000)
        libxcb-glx.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libxcb-glx.so.0 (0x00007faea8c8d000)
        libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6 (0x00007faea8c82000)
        libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6 (0x00007faea8a65000)
        libxkbcommon-x11.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libxkbcommon-x11.so.0 (0x00007faea8a59000)
        libtiff.so.5 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libtiff.so.5 (0x00007faea89da000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faea89d4000)
        libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007faea89c3000)
        libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007faea89b0000)
        libudev.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libudev.so.1 (0x00007faea8986000)
        libX11-xcb.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libX11-xcb.so.1 (0x00007faea8980000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007faea8957000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faea8809000)
        libEGL.so.1 => /lib/x86_64-linux-gnu/libEGL.so.1 (0x00007faea87f4000)
        libdbus-1.so.3 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libdbus-1.so.3 (0x00007faea87a0000)
        libwayland-cursor.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libwayland-cursor.so.0 (0x00007faea8794000)
        libwayland-client.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libwayland-client.so.0 (0x00007faea8782000)
        libxkbcommon.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libxkbcommon.so.0 (0x00007faea8740000)
        libpulse.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libpulse.so.0 (0x00007faea86ef000)
        libicui18n.so.63 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libicui18n.so.63 (0x00007faea83a3000)
        libicuuc.so.63 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libicuuc.so.63 (0x00007faea81b0000)
        libdouble-conversion.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libdouble-conversion.so.1 (0x00007faea8196000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007faea8075000)
        libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007faea7fe1000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faea7fc0000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faea7dde000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faea7dc4000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faea7bd7000)
        /lib64/ld-linux-x86-64.so.2 (0x00007faeaa6c0000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007faea7bcc000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007faea7bc3000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007faea7ba9000)
        libxcb-xkb.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libxcb-xkb.so.1 (0x00007faea7b87000)
        libwebp.so.6 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libwebp.so.6 (0x00007faea791b000)
        libzstd.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libzstd.so.1 (0x00007faea787a000)
        liblzma.so.5 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/liblzma.so.5 (0x00007faea7852000)
        libjbig.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libjbig.so.0 (0x00007faea7643000)
        libjpeg.so.8 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libjpeg.so.8 (0x00007faea75bf000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faea75a3000)
        libwayland-server.so.0 => /lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007faea758d000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007faea7550000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007faea734c000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007faea7146000)
        libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007faea7089000)
        libsystemd.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libsystemd.so.0 (0x00007faea6fe4000)
        libffi.so.6 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libffi.so.6 (0x00007faea6fd9000)
        libpulsecommon-12.2.so => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libpulsecommon-12.2.so (0x00007faea6f53000)
        libicudata.so.63 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libicudata.so.63 (0x00007faea5562000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007faea54ee000)
        libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007faea54b8000)
        liblz4.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/liblz4.so.1 (0x00007faea5488000)
        libgcrypt.so.20 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libgcrypt.so.20 (0x00007faea5369000)
        libwrap.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libwrap.so.0 (0x00007faea535c000)
        libsndfile.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libsndfile.so.1 (0x00007faea52dc000)
        libasyncns.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libasyncns.so.0 (0x00007faea50d5000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007faea50b2000)
        libnsl.so.1 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libnsl.so.1 (0x00007faea5095000)
        libFLAC.so.8 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libFLAC.so.8 (0x00007faea4e1a000)
        libogg.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libogg.so.0 (0x00007faea4c10000)
        libvorbis.so.0 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libvorbis.so.0 (0x00007faea4be0000)
        libvorbisenc.so.2 => /home/test/Code/tsMuxer/bin/lnx/squashfs-root/usr/bin/../lib/libvorbisenc.so.2 (0x00007faea4b34000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007faea4b19000)

Given the sheer number of dependencies the trick would be to find an old enough distribution with all of the above packages installed.

justdan96 commented 2 years ago

Once our Docker container is fully updated I will also update the nightly release code to create a separate artefact for just the AppImage.