FDH2 / UxPlay

AirPlay Unix mirroring server
GNU General Public License v3.0
1.35k stars 72 forks source link

Cannot launch on Fedora 37 #158

Closed patkepa closed 1 year ago

patkepa commented 1 year ago

I encountered an issue while trying to launch build of UxPlay on Fedora 37:

UxPlay 1.60: An Open-Source AirPlay mirroring and audio-streaming server.

** (uxplay:8755): ERROR **: 20:40:04.200: gst_parse_launch error (audio 1):
 no element "avdec_aac"

Trace/breakpoint trap (core dumped)

I already went through all gstreamer dependencies I could install, the one that contains "avdec_acc" should be package gstreamer1-plugin-libav from RPMFusion, which I have installed.

Since it seemed like an issue with audio I tried to disable it using uxplay -a, but in resulted in different error message:

UxPlay 1.60: An Open-Source AirPlay mirroring and audio-streaming server.
audio_disabled
using system MAC address 12:f7:28:c0:23:99
Illegal instruction (core dumped)
fduncanh commented 1 year ago

see issue #138 for solution. (RedHat doesnt provide some parts of libav (such as avdec) get it from rpmfusion.org)

or look at this section of README: Non-Debian-based Linux or *BSD

Red Hat, Fedora, CentOS (now continued as Rocky Linux or Alma Linux): (sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel (some from the "PowerTools" add-on repository) (+libX11-devel for fullscreen X11, and "ZOOMFIX" if needed). The required GStreamer packages are: gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for intel graphics); you may need to get some of them (in particular gstreamer1-libav) from rpmfusion.org (which provides packages including plugins that RedHat does not ship for license reasons).

fduncanh commented 1 year ago

I didnt read your issue far enough to see you think that you are using the rpmfusion version of gstreamer1--libav (NOT gstreamer-plugin-libav)

The message "'no element avdec_aac`" definitely shows (I believe) that the rpmfusion.org gstreamer1-livav rpm is not properly installed. Maybe you used an incorrect name for the rpm, and it didn't install?

what does "rpm -qi gstreamer1-libav" report? On RedHat 9 (Rocky 9) I get

Name        : gstreamer1-libav
Version     : 1.18.4
Release     : 1.el9
Architecture: x86_64
Install Date: Tue 29 Nov 2022 11:24:31 PM EST
Group       : Unspecified
Size        : 905748
License     : LGPLv2+
Signature   : RSA/SHA256, Tue 05 Jul 2022 05:24:02 AM EDT, Key ID 7403ea33296458f3
Source RPM  : gstreamer1-libav-1.18.4-1.el9.src.rpm
Build Date  : Sun 03 Jul 2022 07:06:58 AM EDT
Build Host  : buildvm-07.virt.rpmfusion.net
Packager    : RPM Fusion
Vendor      : RPM Fusion
URL         : https://gstreamer.freedesktop.org/
Summary     : GStreamer 1.0 libav-based plug-ins
Description :
GStreamer is a streaming media framework, based on graphs of filters which
operate on media data. Applications using this library can do anything
from real-time sound processing to playing videos, and just about anything
else media-related.  Its plugin-based architecture means that new data
types or processing capabilities can be added simply by installing new
plugins.

This package provides libav-based GStreamer plug-ins.

what does "gst-inspect 1.0 libav | grep aac" show?

gst-inspect-1.0 libav | grep aac
  avdec_aac: libav AAC (Advanced Audio Coding) decoder
  avdec_aac_fixed: libav AAC (Advanced Audio Coding) decoder
  avdec_aac_latm: libav AAC LATM (Advanced Audio Coding LATM syntax) decoder
  avenc_aac: libav AAC (Advanced Audio Coding) encoder
  avmux_adts: libav ADTS AAC (Advanced Audio Coding) muxer (not recommended, use aacparse instead)

I don't know why you get a coredump with -a option. This is happening during the setup phase

what message does "uxplay -a -d" give? (EDIT by itself, this wont help much, the coredump happens after gstreamer video is initialized.)

Please try it as follows:

sudo systemctl stop avahi-daemon
sudo systemctl disable avahi-daemon
uxplay -a -d

then reenable avahi-daemon

sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon

This will show if the coredump happens after the RAOP server (AirPlay server) is started, or is related to registering with BonJour (this was changed recently in uxplay v 1.60) Stopping and disabling avahi-daemon will trigger an error message before the coredump happens if it is later.

fduncanh commented 1 year ago

I have installed Fedora 37 in virtualbox. I reproduced your issue with libav. The RedHat distributed version of gstreamer's libav plugin is the issue.

I have not yet managed to get a RPMFusion version of gstreamer1-plugin-libav installed.

Compared to RedHat 9 clones, Fedora 37 seems a complete mess as far as this is concerned.

fduncanh commented 1 year ago

Everything works in Fedora 36.

It seems the crucial rpm from RPMFusion is not gstreamer1-plugins-libav but may be ffmpeg-libs which it uses

fduncanh commented 1 year ago

@patkepa

On Redhat 9, the rpm package is simply called "gstreamer1-libav" (no "plugin" in the name) and is supplied by RPMFusion. Fedora 36 and 37 are different: it is called gstreamer-plugin-libav, and is supplied by RedHat. Instead, the package ffmpeg-libs is supplied by RPMFusion (gstreamer1-libav is just a front end for this ffmpeg code).

Tried again in Fedora 37 (on VirtualBox.) now it works.

The key is to install and activate RPMFusion before starting to build uxplay.

If not, sudo yum install (or sudo dnf install) ffmpeg-libs should fix things for you after RPMFusion is added.

This is what "rpm -qi ffmpeg-libs" should show

Name        : ffmpeg-libs                                                                                       
Version     : 5.1.2                                                                                             
Release     : 3.fc37                                                                                            
Architecture: x86_64                                                                                            
Install Date: Fri 23 Dec 2022 01:41:14 AM EST                                                                   
Group       : Unspecified                                                                                       
Size        : 21501475                                                                                          
License     : GPLv3+                                                                                            
Signature   : RSA/SHA256, Wed 19 Oct 2022 09:09:39 AM EDT, Key ID e06f8ecdd651ff2e                              
Source RPM  : ffmpeg-5.1.2-3.fc37.src.rpm                                                                       
Build Date  : Mon 17 Oct 2022 08:13:55 AM EDT                                                                   
Build Host  : buildvm-01.online.rpmfusion.net                                                                   
Packager    : RPM Fusion    <===============================important                                                                                      
Vendor      : RPM Fusion                                                                                        
URL         : http://ffmpeg.org/                                                                                
Summary     : Libraries for ffmpeg                                                                              
Description :                                                                                                   
FFmpeg is a complete and free Internet live audio and video                                                     
broadcasting solution for Linux/Unix. It also includes a digital                                                
VCR. It can encode in real time in many formats including MPEG1 audio                                           
and video, MPEG4, h263, ac3, asf, avi, real, mjpeg, and flash.                                                  
This package contains the libraries for ffmpeg                      
fduncanh commented 1 year ago

The instructions in the UxPlay README have been updated for this Fedora issue.

_[In recent Fedora, the libav plugin package is renamed to "gstreamer1-plugin-libav". which now needs the RPM Fusion package ffmpeg-libs for the patent-encumbered code which RedHat does not provide: check with "rpm -qi ffmpeg-libs" that it lists "Packager" as RPM Fusion; if this is not installed, uxplay will fail to start, with error: no element "avdec_aac" ]_.