Open Bug 1659209 Opened 2 years ago Updated 3 months ago

libavcodec objects with more than one trailing version number are not dynamically linked on opensuse

Categories

(Core :: Audio/Video, defect, P3)

x86_64
Linux
defect

Tracking

()

REOPENED
Tracking Status
firefox81 --- affected

People

(Reporter: mcepl, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(4 files)

https://program.rozhlas.cz/zaznamy#/radiozurnal select some time, pop up player opens, but nothing is played.

Attached file about:support

Bugbug thinks this bug should belong to this component, but please revert this change in case of error.

Component: Untriaged → Console
Product: Firefox → DevTools

(In reply to Release mgmt bot [:sylvestre / :calixte / :marco for bugbug] from comment #2)

Bugbug thinks this bug should belong to this component, but please revert this change in case of error.

That is almost certainly wrong. I haven’t complained about the behaviour of the developer’s console, but I was using it … you know, for development. The bug is somewhere in the Firefox itself, or perhaps Servo (if it has anything to do with the sound playback).

Component: Console → Untriaged
Product: DevTools → Firefox

(FWIW, it's working for me on OSX, on Nightly 81.0a1 (2020-08-15))

Component: Untriaged → Audio/Video
Product: Firefox → Core

Do you have ffmpeg installed? If not, does installing ffmpeg fix the issue? A quick look suggests that audio is one of the formats we'll use ffmpeg/libavcodec to decode if it's present.

Flags: needinfo?(mcepl)

I do have ffmpeg installed (ffmpeg-4-4.3.1-6.3.x86_64 from openSUSE/packman package), and not it doesn’t change anything. FIrefox/Nightly 81.01a Build 20200818214031 and it still doesn’t play from the Czech radio archive.

Flags: needinfo?(mcepl)

Could you gather some logs to help debug this? Could you set the environment var MOZ_LOG=sync,timestamp,PlatformDecoderModule:5 and MOZ_LOG_FILE=~/bug1659209.txt then run Firefox and try to play one of those streams. Then could you archive the created logs and attach them to this bug?

Flags: needinfo?(mcepl)
Attached video playing.webm

Hi,
I was not able to replicate this issue on my end, since I was able to play both in windows 10 pro and Ubuntu 18.04.3 LTS. Attaching video to demonstrate. Are you able to play in Chrome or other browsers?
Best,
Clara

OK, I see it. libavcodec library on my system is

~@stitny$ ls -l /usr/lib64/libavcodec.so*
lrwxrwxrwx 1 root root 23 Aug 11 20:18 /usr/lib64/libavcodec.so.58.91 -> libavcodec.so.58.91.100
-rwxr-xr-x 1 root root 12384712 Aug 11 20:18 /usr/lib64/libavcodec.so.58.91.100
~@stitny$

Apparently this doesn’t fall among patterns which are sought for by Firefox. When I create symlink

lrwxrwxrwx 1 root root 19 Aug 21 10:16 /usr/lib64/libavcodec.so.58 -> libavcodec.so.58.91

then playback of the Czech radio works.

Flags: needinfo?(mcepl)
Severity: -- → S3
Priority: -- → P3
Summary: Doesn't play records from the Czech Radio archive → libavcodec objects with more than one trailing version number are not dynamically linked on linux

jya, could we do a fuzzier search for libavcodec where we search for libavcodec.so.58* (and other major versions we currently allow) to mitigate this? If there's not concerns, I think I could come up with a patch.

Flags: needinfo?(jyavenard)

The issue isn't about how we search the ffmpeg library. But what codecs are supported in the ffmpeg shipping with opensuse .
They do not ship a ffmpeg supporting patent encumbered codecs. So it doesn't support aac.

If you ran the command ffmpeg -codecs you'll see that aac isn't supported.

When you first attempt to play such content, a blue banner is displayed at the top explaining why the video didn't play.

You need to install a ffmpeg version that supports aac.

Status: NEW → RESOLVED
Closed: 2 years ago
Flags: needinfo?(jyavenard)
Resolution: --- → INVALID

(In reply to Jean-Yves Avenard [:jya] from comment #11)

The issue isn't about how we search the ffmpeg library. But what codecs are supported in the ffmpeg shipping with opensuse .
They do not ship a ffmpeg supporting patent encumbered codecs. So it doesn't support aac.

If you ran the command ffmpeg -codecs you'll see that aac isn't supported.

When you first attempt to play such content, a blue banner is displayed at the top explaining why the video didn't play.

You need to install a ffmpeg version that supports aac.

Comment 9 contradicts this -- creating a link so we load the lib remedies the issue.

Status: RESOLVED → REOPENED
Resolution: INVALID → ---

To further note, the issue only occurs with the opensuse system ffmpeg, there are 3rd party ones that properly install themselves and will load correctly and supporting all codecs.
https://software.opensuse.org/package/ffmpeg cryptly refers to the codec limitations.

libavcodec.xx.so is the standard ffmpeg naming pattern, as generated by their configure and what I've seen used on every distribution available. It allows for multiple versions to be installed.
There is no libavcodec.so

Status: REOPENED → RESOLVED
Closed: 2 years ago2 years ago
Resolution: --- → INVALID

Sorry, I posted at the same time as Bryce which reset the old status.

As mentioned off-line, there are no official suse packages that install without a libavcodec.58.so, attempting to cater for individual config isn't something I believe we should try to overcome.

Status: RESOLVED → REOPENED
Resolution: INVALID → ---

Which packman repo did your libavcodec come from?

Flags: needinfo?(mcepl)
Summary: libavcodec objects with more than one trailing version number are not dynamically linked on linux → libavcodec objects with more than one trailing version number are not dynamically linked on opensuse

(In reply to Jean-Yves Avenard [:jya] from comment #11)

If you ran the command ffmpeg -codecs you'll see that aac isn't supported.

Why do you say that?

python-psutil@stitny$ ffmpeg -codecs|grep aac
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10 (SUSE Linux)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --incdir=/usr/include/ffmpeg --extra-cflags='-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -ffat-lto-objects -g' --optflags='-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -ffat-lto-objects -g' --disable-htmlpages --enable-pic --disable-stripping --enable-shared --disable-static --enable-gpl --enable-version3 --enable-libsmbclient --disable-openssl --enable-avresample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcelt --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libdc1394 --enable-libdrm --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librav1e --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libssh --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lto --enable-lv2 --enable-libmfx --enable-vaapi --enable-vdpau --enable-libfdk-aac-dlopen --enable-nonfree --enable-libvo-amrwbenc --enable-libx264 --enable-libx265 --enable-librtmp --enable-libxvid
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
DEAIL. aac AAC (Advanced Audio Coding) (decoders: aac aac_fixed libfdk_aac ) (encoders: aac libfdk_aac )
D.AIL. aac_latm AAC LATM (Advanced Audio Coding LATM syntax)
python-psutil@stitny$

Of course, I know that I have to have ffmpeg from the special non-standard repository.

Flags: needinfo?(mcepl)

(In reply to Bryce Seager van Dyk (:bryce) from comment #16)

Which packman repo did your libavcodec come from?

python-psutil@stitny$ sudo zypper lr -d 10
Alias : packman
Název : packman
Adresa URI : http://packman.inode.at/suse/openSUSE_Tumbleweed/
povoleno : Ano
Kontrola GPG : (r ) Ano
Priorita : 95 (zvýšená priorita)
Automatické obnovení : Zapnuto
Podržet balíčky : Vypnuto
Typ : rpm-md
URI GPG klíče :
Předpona cesty :
Rodičovská služba :
Klíčová slova : ---
Informační cesta repozitáře : /etc/zypp/repos.d/packman.repo
Cesta k vyrovnávací paměti MD : /var/cache/zypp/raw/packman
python-psutil@stitny$

Also:

~@stitny$ rpm -qif /usr/lib64/libavcodec.so.58.91.100
Name : libavcodec58_91
Version : 4.3.1
Release : 6.3
Architecture: x86_64
Install Date: Fri 14 Aug 2020 12:35:06
Group : System/Libraries
Size : 12407180
License : GPL-3.0-or-later
Signature : RSA/SHA1, Tue 11 Aug 2020 23:28:12, Key ID 45a1d0671abd1afb
Source RPM : ffmpeg-4-4.3.1-6.3.src.rpm
Build Date : Tue 11 Aug 2020 19:54:02
Build Host : buildwk3
Packager : packman@links2linux.de
Vendor : http://packman.links2linux.de
URL : https://ffmpeg.org/
Summary : FFmpeg codec library
Description :
The libavcodec library provides a generic encoding/decoding framework
and contains multiple decoders and encoders for audio, video and
subtitle streams, and several bitstream filters.
Distribution: Essentials / openSUSE_Tumbleweed
~@stitny$

I don't have a setup to verify the different files available, but it looks like the libavcodec in essentials has contents which are consistent with the above. The VLC repo package looks similar[1] if I extract it.

This could mean the OpenSuse instructions around this and codec support are insufficient[2] in that we won't find those shared objects. Possible mitigations:

  • Update those instructions to include adding symlink manually.
  • Update the packages so they include the symlink.
  • Update Fx's search strategy to search for files that include more than just the major version number.

[0] http://packman.inode.at/suse/openSUSE_Tumbleweed/Essentials/x86_64/libavcodec58_91-4.3.1-6.3.x86_64.rpm
[1] http://download.videolan.org/pub/vlc/SuSE/Tumbleweed/x86_64/libavcodec58_91-4.3.1-4.2.x86_64.rpm
[2]: https://en.opensuse.org/SDB:Firefox_MP4/H.264_Video_Support

After some investigation I think those packages including the symlink will be the best way to address this. I am unfamiliar with the process of requesting alteration to such packages. Matěj, are you able to request that those packages are updated to include the needed link?

Flags: needinfo?(mcepl)

I have sent email to our packages and asked for their assistance on this bug.

Flags: needinfo?(mcepl)
Blocks: ffmpeg
Duplicate of this bug: 1707367
You need to log in before you can comment on or make changes to this bug.