Opensuse en veel andere distributies verwijderen niet vrij te gebruiken onderdelen uit hun systeem. Dit heeft zeker voor video-liefhebbers grote gevolgen. Zelfs het afspelen van een video op het internet lukt dan niet altijd. Oorspronkelijk bevat de gebruikte software deze onderdelen wel. M.a.w. zelf de broncode downloaden en compileren is de oplossing.
FFmpeg is een zeer veel gebruikt systeem om video af te spelen en te coderen. Heel veel software is er op gebaseerd of gebruikt de FFmpeg bibliotheken. Bij de installatie van de VLC media speler wordt een volledig werkend FFMpeg systeem meegeïnstalleerd. Ook bij de installatie van de Google Chrome browser wordt een volledig werkende FFmpeg systeem meegeïnstalleerd. Een andere benadering bestaat uit het éénmaal installeren van het FFmpeg systeem en alle software die er gebruik van wenst te maken kan dit. De FFmpeg bibliotheken worden als het ware gedeeld met alle software. Voor beide systemen valt iets te zeggen. VLC en Chrome zijn bekend om hun veelzijdigheid: ze spelen alles zonder problemen af, zelfs op systemen waarop dit geblokkeerd wordt. Firefox en Chromium werken met gedeelde bibliotheken. Dit heeft als voordeel dat de bibliotheek maar één keer op het systeem aanwezig is en daardoor eenvoudiger te onderhouden is. Het nadeel is echter dat indien degene die verantwoordelijk is voor de bibliotheek iets verwijdert, alle daarop gebaseerde software daar hinder van ondervindt.
Om de door openSUSE meegeleverde beperkte FFmpeg versie te vervangen door een volledige versie, moet je de FFmpeg broncode downloaden:
dany@pindabook:~> wget http://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2
--2017-11-03 16:05:12-- http://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2
Herleiden van ffmpeg.org (ffmpeg.org)... 79.124.17.100
Verbinding maken met ffmpeg.org (ffmpeg.org)|79.124.17.100|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 10171702 (9,7M) [application/x-bzip2]
Wordt opgeslagen als: ‘ffmpeg-3.4.tar.bz2’
100%[===============================================================>] 10.171.702 3,49MB/s in 2,8s
2017-11-03 16:05:15 (3,49 MB/s) - '‘ffmpeg-3.4.tar.bz2’' opgeslagen [10171702/10171702]
Daarna pak je de gedownloade broncode uit in de map /usr/local/src. In de map /usr/local komt software die je zelf manueel installeert, de installatieprogramma's van uw distributie bekijken en beheren de software in deze map niet. De src submap bevat enkel broncode.
dany@pindabook:~> sudo tar -jxf ffmpeg-3.4.tar.bz2 --directory /usr/local/src/
[sudo] wachtwoord voor root:
Open de map met de FFmpeg broncode:
dany@pindabook:~> cd /usr/local/src/ffmpeg-3.4/
Om broncode te compileren heb je software nodig (op mijn systeem ontbreekt alleen het pakket yasm):
dany@pindabook:/usr/local/src/ffmpeg-3.4> sudo zypper install gcc make kernel-default-devel yasm
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
'make' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'make-4.0-7.15.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
'gcc' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'gcc-4.8-11.16.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
'kernel-default-devel' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'kernel-default-devel-4.4.92-31.1.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...
Het volgende NIEUWE pakket zal worden geïnstalleerd:
yasm
1 nieuw te installeren pakket.
Totale downloadgrootte: 352,2 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 2,0 MiB worden
gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j):
pakket yasm-1.2.0-14.14.x86_64 wordt opgehaald (1/1), 352,2 KiB ( 2,0 MiB uitgepakt)
Ophalen: yasm-1.2.0-14.14.x86_64.rpm ............................................................[gereed]
Controleren op conflicten tussen bestanden: .....................................................[gereed]
(1/1) Installeert: yasm-1.2.0-14.14.x86_64 ......................................................[gereed]
Daarna bepalen we hoe we FFmpeg willen compileren. In ons geval willen we gedeelde (shared) bibliotheken bekomen voor Firefox en Chromium en geen statische bibliotheken zoals voor VLC of Chrome. Bij de configuratie wordt eveneens getest of alle onderdelen voor het compileren op uw systeem aanwezig zijn. Op het einde krijg je een overzicht van alle door FFmpeg ondersteunde functies.
dany@pindabook:/usr/local/src/ffmpeg-3.4> ./configure --enable-shared --disable-static
install prefix /usr/local
source path .
C compiler gcc
C library glibc
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
standalone assembly yes
x86 assembler yasm
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
AVX2 enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static no
shared yes
postprocessing support no
network support yes
threading support pthreads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled no
makeinfo supports HTML no
External libraries:
iconv xlib
External libraries providing hardware acceleration:
cuda cuvid nvenc v4l2_m2m
Libraries:
avcodec avfilter avutil swscale
avdevice avformat swresample
Programs:
ffmpeg ffprobe ffserver
Enabled decoders:
aac aura2 ffvhuff motionpixels
...
realtext targa_y216 vp7 zero12v
Enabled encoders:
a64multi flv pcm_mulaw rv20
...
flac pcm_f64le rv10
Enabled hwaccels:
h264_cuvid mpeg1_cuvid mpeg4_cuvid vp8_cuvid
hevc_cuvid mpeg2_cuvid vc1_cuvid vp9_cuvid
mjpeg_cuvid
Enabled parsers:
aac dpx h264 rv30
aac_latm dvaudio hevc rv40
ac3 dvbsub mjpeg sipr
adx dvd_nav mlp tak
bmp dvdsub mpeg4video vc1
cavsvideo flac mpegaudio vorbis
cook g729 mpegvideo vp3
dca gsm opus vp8
dirac h261 png vp9
dnxhd h263 pnm xma
Enabled demuxers:
aa flac lrc r3d
...
wsvqa xa xvag yuv4mpegpipe
wtv
Enabled muxers:
a64 g726 mpeg2dvd rm
...
g722 mpeg1vcd rawvideo yuv4mpegpipe
g723_1 mpeg1video
Enabled protocols:
async ftp mmsh srtp
cache gopher mmst subfile
concat hls pipe tcp
crypto http prompeg tee
data httpproxy rtmp udp
ffrtmphttp icecast rtmpt udplite
file md5 rtp unix
Enabled filters:
abench blackdetect gblur readeia608
...
vflip volumedetect weave zoompan
vibrato
Enabled bsfs:
aac_adtstoasc h264_mp4toannexb mov2textsub remove_extradata
chomp hevc_mp4toannexb mp3_header_decompress text2movsub
dca_core imx_dump_header mpeg4_unpack_bframes vp9_raw_reorder
dump_extradata mjpeg2jpeg noise vp9_superframe
extract_extradata mjpega_dump_header null vp9_superframe_split
Enabled indevs:
fbdev lavfi oss v4l2
Enabled outdevs:
fbdev oss v4l2
License: LGPL version 2.1 or later
Creating configuration files ...
Na een geslaagde configuratie (zonder foutmeldingen) kan je het compileren starten (wees geduldig):
dany@pindabook:/usr/local/src/ffmpeg-3.4> make
GEN libavutil/libavutil.version
GEN libswscale/libswscale.version
GEN libswresample/libswresample.version
GEN libavcodec/libavcodec.version
GEN libavformat/libavformat.version
GEN libavfilter/libavfilter.version
GEN libavdevice/libavdevice.version
CC libavdevice/alldevices.o
CC libavdevice/avdevice.o
CC libavdevice/fbdev_common.o
...
fftools/ffserver.c: In function ‘build_file_streams’:
fftools/ffserver.c:3686:17: warning: ‘codec’ is deprecated (declared at ./libavformat/avformat.h:893) [-Wdeprecated-declarations]
add_av_stream1(stream, infile->streams[i]->codec, 1);
^
LD ffserver_g
STRIP ffserver
Daarna verwijderen we de openSUSE FFmpeg versie van het systeem. Dit kan volgens mij enkel met een rpm opdracht (zypper is gebaseerd op rpm).
dany@pindabook:/usr/local/src/ffmpeg-3.4> sudo rpm -e --nodeps libavcodec57 libavdevice57 libavfilter6 libavformat57 libavutil55 libswresample2 libswscale4
[sudo] wachtwoord voor root:
We moeten deze pakketten niet alleen verwijderen, maar ook verhinderen dat ze terug op het systeem terecht komen. Dit kan namelijk als zypper de afhankelijkheden controleert bij een update of installatie. Je kunt de toestand van deze pakketten vergrendelen met:
dany@pindabook:/usr/local/src/ffmpeg-3.4> sudo zypper addlock libavcodec57 libavdevice57 libavfilter6 libavformat57 libavutil55 libswresample2 libswscale4
De gespecificeerde blokkeringen zijn met succes toegevoegd.
Daarna kan je de zelf gecompileerde FFmpeg bibliotheken installeren:
dany@pindabook:/usr/local/src/ffmpeg-3.4> sudo make install
INSTALL libavdevice/libavdevice.so
STRIP install-libavdevice-shared
INSTALL libavfilter/libavfilter.so
STRIP install-libavfilter-shared
INSTALL libavformat/libavformat.so
STRIP install-libavformat-shared
INSTALL libavcodec/libavcodec.so
STRIP install-libavcodec-shared
INSTALL libswresample/libswresample.so
STRIP install-libswresample-shared
INSTALL libswscale/libswscale.so
STRIP install-libswscale-shared
INSTALL libavutil/libavutil.so
STRIP install-libavutil-shared
INSTALL doc/ffmpeg.1
INSTALL doc/ffprobe.1
...
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
INSTALL libavutil/libavutil.pc
Nu de nieuwe bibliotheken nog voor andere software beschikbaar stellen met:
dany@pindabook:/usr/local/src/ffmpeg-3.4> sudo ldconfig
De bibliotheken staan nu in de lib submap van /usr/local. Zo kom je te weten welke pakketten je moet verwijderen en vergrendelen.
dany@pindabook:/usr/local/src/ffmpeg-3.4> ls /usr/local/lib/
libavcodec.so libavfilter.so libavutil.so libswscale.so
libavcodec.so.57 libavfilter.so.6 libavutil.so.55 libswscale.so.4
libavcodec.so.57.107.100 libavfilter.so.6.107.100 libavutil.so.55.78.100 libswscale.so.4.8.100
libavdevice.so libavformat.so libswresample.so pkgconfig
libavdevice.so.57 libavformat.so.57 libswresample.so.2
libavdevice.so.57.10.100 libavformat.so.57.83.100 libswresample.so.2.9.100
Na het (her)starten van Firefox kan je nu om het even welke video op internet bekijken.
Bij een update met zypper merken we dat de openSUSE FFmpeg bibliotheken vergrendeld zijn en dus niet geïnstalleerd worden:
dany@pindabook:~> sudo zypper up
[sudo] wachtwoord voor root:
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Het volgende 7 items zijn vergrendeld en zullen niet worden veranderd door welke actie dan ook:
Beschikbaar:
libavcodec57 libavdevice57 libavfilter6 libavformat57 libavutil55 libswresample2 libswscale4
De volgende 20 items voor bijwerken van een pakket worden NIET geïnstalleerd:
autofs btrfsmaintenance btrfsprogs btrfsprogs-udev-rules e2fsprogs fuse gptfdisk libbtrfs0 libcom_err2
libext2fs2 libfuse2 libgphoto2-6 libgphoto2-6-lang libparted0 libreiserfscore0 libtwolame0 ntfs-3g
ntfsprogs parted sshfs
De volgende toepassing zal worden VERWIJDERD:
"VLC Media player"
De volgende 8 pakketten zullen worden opgewaardeerd:
libvlc5 libvlccore8 vlc vlc-codec-gstreamer vlc-codecs vlc-lang vlc-noX vlc-qt
8 op te waarderen pakketten.
Totale downloadgrootte: 9,8 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 41,0 B worden
gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j):
pakket libvlccore8-2.2.6-5.2.x86_64 wordt opgehaald (1/8), 426,7 KiB ( 1,0 MiB uitgepakt)
Ophalen: libvlccore8-2.2.6-5.2.x86_64.rpm .......................................................[gereed]
pakket libvlc5-2.2.6-5.2.x86_64 wordt opgehaald (2/8), 96,5 KiB (131,5 KiB uitgepakt)
Ophalen: libvlc5-2.2.6-5.2.x86_64.rpm ..............................................[gereed (85,0 KiB/s)]
pakket vlc-noX-2.2.6-5.2.x86_64 wordt opgehaald (3/8), 3,3 MiB ( 11,5 MiB uitgepakt)
Ophalen: vlc-noX-2.2.6-5.2.x86_64.rpm ...............................................[gereed (1,7 MiB/s)]
pakket vlc-qt-2.2.6-5.2.x86_64 wordt opgehaald (4/8), 1,1 MiB ( 3,0 MiB uitgepakt)
Ophalen: vlc-qt-2.2.6-5.2.x86_64.rpm ..............................................[gereed (196,7 KiB/s)]
pakket vlc-2.2.6-5.2.x86_64 wordt opgehaald (5/8), 248,3 KiB (401,7 KiB uitgepakt)
Ophalen: vlc-2.2.6-5.2.x86_64.rpm ...............................................................[gereed]
pakket vlc-lang-2.2.6-5.2.noarch wordt opgehaald (6/8), 4,5 MiB ( 32,1 MiB uitgepakt)
Ophalen: vlc-lang-2.2.6-5.2.noarch.rpm ..............................................[gereed (1,5 MiB/s)]
pakket vlc-codecs-2.2.6-5.2.x86_64 wordt opgehaald (7/8), 129,5 KiB (286,0 KiB uitgepakt)
Ophalen: vlc-codecs-2.2.6-5.2.x86_64.rpm ........................................................[gereed]
pakket vlc-codec-gstreamer-2.2.6-5.2.x86_64 wordt opgehaald (8/8), 61,5 KiB ( 26,6 KiB uitgepakt)
Ophalen: vlc-codec-gstreamer-2.2.6-5.2.x86_64.rpm ...............................................[gereed]
Controleren op conflicten tussen bestanden: .....................................................[gereed]
(1/8) Installeert: libvlccore8-2.2.6-5.2.x86_64 .................................................[gereed]
(2/8) Installeert: libvlc5-2.2.6-5.2.x86_64 .....................................................[gereed]
(3/8) Installeert: vlc-noX-2.2.6-5.2.x86_64 .....................................................[gereed]
(4/8) Installeert: vlc-qt-2.2.6-5.2.x86_64 ......................................................[gereed]
(5/8) Installeert: vlc-2.2.6-5.2.x86_64 .........................................................[gereed]
(6/8) Installeert: vlc-lang-2.2.6-5.2.noarch ....................................................[gereed]
(7/8) Installeert: vlc-codecs-2.2.6-5.2.x86_64 ..................................................[gereed]
(8/8) Installeert: vlc-codec-gstreamer-2.2.6-5.2.x86_64 .........................................[gereed]
Bij het installeren van nieuwe op FFmpeg gebaseerde software, kan door de vergrendeling niet meer aan de afhankelijkheden worden voldaan. Je krijgt een melding met een paar opties. Betreft het enkel de FFmpeg bibliotheken, negeer dan deze afhankelijkheden en laat de installatie doorgaan:
dany@pindabook:~> sudo zypper install chromium
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
Probleem: chromium-62.0.3202.75-121.1.x86_64 vereist libavcodec.so.57()(64bit), maar aan deze eis kan niet voldaan worden
niet-installeerbare providers: libavcodec57-3.3.1-1.1.x86_64[repo-oss]
libavcodec57-3.3.4-7.1.x86_64[repo-update]
Oplossing 1: De volgende acties zullen uitgevoerd worden:
verwijder de vergrendeling om de installatie van libavcodec57-3.3.1-1.1.x86_64[repo-oss] toe te staan
verwijder de vergrendeling om de installatie van libswresample2-3.3.1-1.1.x86_64[repo-oss] toe te staan
Oplossing 2: verwijder de vergrendeling om de installatie van libavcodec57-3.3.4-7.1.x86_64[repo-update] toe te staan
Oplossing 3: chromium-62.0.3202.75-121.1.x86_64 niet installeren
Oplossing 4: chromium-62.0.3202.75-121.1.x86_64 afbreken door enige van zijn afhankelijkheden te negeren
Kies uit de bovenstaande oplossingen door een nummer of kies (a)nnuleren [1/2/3/4/a] (a): 4
Afhankelijkheden oplossen...
Pakketafhankelijkheden oplossen...
De volgende toepassing wordt geïnstalleerd:
Chromium
De volgende 6 NIEUWE pakketten zullen worden geïnstalleerd:
chromium libminizip1 libre2-0 libwebpmux1 noto-coloremoji-fonts noto-emoji-fonts
De volgende 2 aanbevolen pakketten zijn automatisch geselecteerd:
noto-coloremoji-fonts noto-emoji-fonts
6 nieuwe te installeren pakketten.
Totale downloadgrootte: 57,2 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 203,9 MiB worden
gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j):
pakket noto-coloremoji-fonts-20151215-4.13.noarch wordt opgehaald (1/6), 2,2 MiB ( 2,5 MiB uitgepakt)
Ophalen: noto-coloremoji-fonts-20151215-4.13.noarch.rpm ............................[gereed (17,5 KiB/s)]
pakket noto-emoji-fonts-20151215-4.13.noarch wordt opgehaald (2/6), 269,9 KiB (409,0 KiB uitgepakt)
Ophalen: noto-emoji-fonts-20151215-4.13.noarch.rpm ..............................................[gereed]
pakket libminizip1-1.2.8-13.15.x86_64 wordt opgehaald (3/6), 28,9 KiB ( 49,0 KiB uitgepakt)
Ophalen: libminizip1-1.2.8-13.15.x86_64.rpm .....................................................[gereed]
pakket libre2-0-20161101-5.1.x86_64 wordt opgehaald (4/6), 143,3 KiB (411,9 KiB uitgepakt)
Ophalen: libre2-0-20161101-5.1.x86_64.rpm .......................................................[gereed]
pakket libwebpmux1-0.4.3-9.3.x86_64 wordt opgehaald (5/6), 20,1 KiB ( 30,4 KiB uitgepakt)
Ophalen: libwebpmux1-0.4.3-9.3.x86_64.rpm .......................................................[gereed]
pakket chromium-62.0.3202.75-121.1.x86_64 wordt opgehaald (6/6), 54,5 MiB (200,6 MiB uitgepakt)
Ophalen: chromium-62.0.3202.75-121.1.x86_64.rpm .....................................[gereed (3,3 MiB/s)]
Controleren op conflicten tussen bestanden: .....................................................[gereed]
(1/6) Installeert: noto-coloremoji-fonts-20151215-4.13.noarch ...................................[gereed]
(2/6) Installeert: noto-emoji-fonts-20151215-4.13.noarch ........................................[gereed]
(3/6) Installeert: libminizip1-1.2.8-13.15.x86_64 ...............................................[gereed]
(4/6) Installeert: libre2-0-20161101-5.1.x86_64 .................................................[gereed]
(5/6) Installeert: libwebpmux1-0.4.3-9.3.x86_64 .................................................[gereed]
(6/6) Installeert: chromium-62.0.3202.75-121.1.x86_64 ...........................................[gereed]
Chromium werkt en speelt video's op het internet af.