vp8/vp9 enc init: ABI version mismatch

140 views
Skip to first unread message

Juha Heinanen

unread,
Oct 14, 2020, 4:16:38 AM10/14/20
to baresip
When making video call from baresip to Firefox (webrtc) using VP8 or VP9
codec, video works, but I start to get lots of these to baresip console:

vp9: enc init: ABI version mismatch

I have built baresip using

libvpx-dev:amd64 1.7.0-3+deb10u1

from Debian 10.

Is there anything to do about this or is the Debian lib simply too much
out of date?

-- Juha

Alfred E. Heggestad

unread,
Oct 23, 2020, 12:21:13 PM10/23/20
to Juha Heinanen, baresip
which version are you using for the libraries ?


I have tested VP9 on Debian 10 and I dont get any warnings
at all:

rtcsession: start video
Set video encoder: VP9 (2000000 bit/s, 30.00 fps)
cairo: surface with format 0 (352 x 288) stride=1408
cairo: scaling logo '/usr/local/share/baresip/logo.png' from 1241 x 272 to 176.0 x 38.5
stream: incoming rtp for 'audio' established, receiving from 10.0.1.10:51767
rtcsession: rtp established (audio)
stream: incoming rtp for 'video' established, receiving from 10.0.1.10:65233
rtcsession: rtp established (video)
Set video decoder: VP9
vp9: encoder opened, picture size 352 x 288
vp9: decode: ss n_s=0 y=1 g=1
audio: Set audio decoder: opus 48000Hz 2ch
video: receiving with resolution 352 x 288 and format 'yuv420p'
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1
vp9: decode: ss n_s=0 y=1 g=1



$ dpkg -l | grep libvpx
ii libvpx-dev:amd64 1.7.0-3+deb10u1 amd64 VP8 and VP9 video codec
(development files)
ii libvpx5:amd64 1.7.0-3+deb10u1 amd64 VP8 and VP9 video codec
(shared library)
ii libvpx5:i386 1.7.0-3+deb10u1 i386 VP8 and VP9 video codec
(shared library)


you can call this one to check real version used:

const char *vpx_codec_version_str(void);




version of API and library is not necessarily the same.



/alfred

Juha Heinanen

unread,
Oct 23, 2020, 12:58:42 PM10/23/20
to Alfred E. Heggestad, baresip
Alfred E. Heggestad writes:

> which version are you using for the libraries ?

On Denbian, I have same versions as you. I need to make more tests. I
just tested video call between Debian baresip and Android baresip and
started to get the same ABI "version mismatch" messages to Debian
baresip console. In Android baresip I use newer version v1.8.2 of
libvpx.

-- Juha

Juha Heinanen

unread,
Oct 24, 2020, 3:22:36 AM10/24/20
to Alfred E. Heggestad, baresip
Alfred E. Heggestad writes:

> I have tested VP9 on Debian 10 and I dont get any warnings
> at all:
>
> rtcsession: start video
> Set video encoder: VP9 (2000000 bit/s, 30.00 fps)
> cairo: surface with format 0 (352 x 288) stride=1408
> cairo: scaling logo '/usr/local/share/baresip/logo.png' from 1241 x 272 to 176.0 x 38.5
> stream: incoming rtp for 'audio' established, receiving from 10.0.1.10:51767
> rtcsession: rtp established (audio)
> stream: incoming rtp for 'video' established, receiving from 10.0.1.10:65233
> rtcsession: rtp established (video)
> Set video decoder: VP9
> vp9: encoder opened, picture size 352 x 288
> vp9: decode: ss n_s=0 y=1 g=1
> audio: Set audio decoder: opus 48000Hz 2ch
> video: receiving with resolution 352 x 288 and format 'yuv420p'
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1
> vp9: decode: ss n_s=0 y=1 g=1

I made new tests against latest stable versions of firefox and chrome
and still got the warnings. Baresip is not sending out video stream.

I added vpx_codec_version_str() call to the warning and result is below.
My test call is not same as yours, since I'm using v4l2.so video source
if it matters.

-- Juha

------------------------------
call: connecting to 'sip:te...@lab.tutpro.com'..
call: SIP Progress: 100 Trying (/)
call: SIP Progress: 100 Trying (/)
call: SIP Progress: 180 Ringing (/)
stream: update 'audio'
stream: update 'video'
audio: Set audio decoder: opus 48000Hz 2ch
audio: player started with sample format S16LE
audio: Set audio encoder: opus 48000Hz 2ch
audio: source started with sample format S16LE
audio tx pipeline: alsa ---> opus
audio rx pipeline: alsa <--- opus
Set video encoder: VP9 (500000 bit/s, 25.00 fps)
v4l2: /dev/video0: found valid V4L2 device (352 x 288) pixfmt=YUYV
v4l2: Current input: "Camera 1"
v4l2: current framerate is 30.00 fps
Set video decoder: VP9
+35862...@lab.tutpro.com: Call established: sip:te...@lab.tutpro.com
stream: incoming rtp for 'audio' established, receiving from 192.26.111.29:60388
vp9: enc init: v1.7.0-110-gedc9a4687, ABI version mismatch
vp9: enc init: v1.7.0-110-gedc9a4687, ABI version mismatch
vp9: enc init: v1.7.0-110-gedc9a4687, ABI version mismatch
...

Juha Heinanen

unread,
Oct 24, 2020, 4:13:47 AM10/24/20
to Alfred E. Heggestad, baresip
I don't know what is going on. I get the same ABI version mismatch
error also when making VP9 call between two baresip installed from the
same statically built Debian package. H264 works fine.

-- Juha

Juha Heinanen

unread,
Oct 24, 2020, 4:47:21 AM10/24/20
to Alfred E. Heggestad, baresip
The keyword was 'statically build'. Once I build baresip Debian package
without STATIC=1, VP9/VP8 video started to work fine.

Both .a and .so are from the same date:

$ ls -ls /lib/x86_64-linux-gnu/libvpx.*
3092 -rw-r--r-- 1 root root 3164908 Nov 27 2019 /lib/x86_64-linux-gnu/libvpx.a
0 lrwxrwxrwx 1 root root 15 Nov 27 2019 /lib/x86_64-linux-gnu/libvpx.so -> libvpx.so.5.0.0
0 lrwxrwxrwx 1 root root 15 Sep 29 09:14 /lib/x86_64-linux-gnu/libvpx.so.5 -> libvpx.so.5.0.0
0 lrwxrwxrwx 1 root root 15 Sep 29 09:14 /lib/x86_64-linux-gnu/libvpx.so.5.0 -> libvpx.so.5.0.0
2200 -rw-r--r-- 1 root root 2250816 Nov 27 2019 /lib/x86_64-linux-gnu/libvpx.so.5.0.0

So why would it matter?

-- Juha

Alfred E. Heggestad

unread,
Oct 24, 2020, 4:57:30 AM10/24/20
to Juha Heinanen, baresip
are you sure that you dont have an locally built packages
lying around ?


in the failing case, try this:

$ ldd vp9.so
linux-vdso.so.1 (0x00007ffcd1c98000)
libvpx.so.5 => /lib/x86_64-linux-gnu/libvpx.so.5 (0x00007f284f5df000)
libre.so => /usr/local/lib/libre.so (0x00007f284f54f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f284f38e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f284f36d000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f284f1e9000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f284f066000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f284f04a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f284f045000)
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f284efb3000)
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f284ecca000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f284eaac000)
/lib64/ld-linux-x86-64.so.2 (0x00007f284f82d000)




/alfred

Juha Heinanen

unread,
Oct 24, 2020, 5:26:44 AM10/24/20
to Alfred E. Heggestad, baresip
Found the culprit.

It was webrtc_aec module that uses libwebrtc_full.a from webrtc_sdk.
When I built baresip statically without EXTRA_MODULES=webrtc_aec,
VP8/VP9 encode works fine.

Perhaps libwebrtc_full.a includes an old version of libvpx:

$ grep libvpx libwebrtc_full.a
Binary file libwebrtc_full.a matches

-- Juha

Juha Heinanen

unread,
Oct 24, 2020, 5:56:51 AM10/24/20
to Alfred E. Heggestad, baresip
When I look how linking happens it shows -lwebrtc_full as the first lib
in the list:

LD baresip
...
-L../re -lre -ldl -lssl -lcrypto -lz -lpthread -L../webrtc_sdk/lib/x64/Release -lwebrtc_full -lstdc++ -L../rem -lasound -lopencore-amrnb -lvo-amrwbenc -lopencore-amrwb -lm `pkg-config --libs libavcodec libavutil` `pkg-config --libs libavformat libavcodec libswresample libavutil libavdevice libavfilter libswscale libpostproc` -lcairo -lspandsp -lspandsp -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lilbc -lm -lopus -lm -lopus -lm "-lspandsp" -lpulse-simple -lpulse -lvpx -lvpx -lX11 -lXext -lX11 -lXext -lzrtp -lbn -lrem -lm -o baresip

Wonder if it would help to change the order so that it would the last?
It is possible to change the order so that EXTRA_MODULES are compiled
and linked after non-extra ones?

-- Juha

Juha Heinanen

unread,
Oct 24, 2020, 7:40:00 AM10/24/20
to Alfred E. Heggestad, baresip
I verified that if I place -lvpx before -L../webrtc_sdk/lib/x64/Release
-lwebrtc_full then VP9 encoding works (below). I did that manually by
editing the gcc command, since I have not been able to figure out how to
change baresip make system so that extra libs would be listed last.

I can compile extra modules last by moving line

moving MODULES += $(EXTRA_MODULES)

last in modules.mk, but that does not affect linking order.

Before this is solved, webrtc_aec does not work together with VP8/VP9.

-- Juha

gcc -fPIC -Wl,-z,relro -rdynamic build-x86_64/src/account.o build-x86_64/src/aucodec.o build-x86_64/src/audio.o build-x86_64/src/aufilt.o build-x86_64/src/auframe.o build-x86_64/src/aulevel.o build-x86_64/src/auplay.o build-x86_64/src/ausrc.o build-x86_64/src/baresip.o build-x86_64/src/call.o build-x86_64/src/cmd.o build-x86_64/src/conf.o build-x86_64/src/config.o build-x86_64/src/contact.o build-x86_64/src/custom_hdrs.o build-x86_64/src/event.o build-x86_64/src/h264.o build-x86_64/src/log.o build-x86_64/src/mctrl.o build-x86_64/src/mediadev.o build-x86_64/src/menc.o build-x86_64/src/message.o build-x86_64/src/metric.o build-x86_64/src/mnat.o build-x86_64/src/module.o build-x86_64/src/net.o build-x86_64/src/play.o build-x86_64/src/reg.o build-x86_64/src/rtpext.o build-x86_64/src/rtpstat.o build-x86_64/src/sdp.o build-x86_64/src/sipreq.o build-x86_64/src/stream.o build-x86_64/src/stunuri.o build-x86_64/src/timer.o build-x86_64/src/timestamp.o build-x86_64/src/ua.o build-x86_64/src/ui.o build-x86_64/src/vidcodec.o build-x86_64/src/video.o build-x86_64/src/vidfilt.o build-x86_64/src/vidisp.o build-x86_64/src/vidsrc.o build-x86_64/src/vidutil.o build-x86_64/src/static.o build-x86_64/src/main.o build-x86_64/modules/account/account.o build-x86_64/modules/auloop/auloop.o build-x86_64/modules/b2bua/b2bua.o build-x86_64/modules/contact/contact.o build-x86_64/modules/ctrl_tcp/ctrl_tcp.o build-x86_64/modules/ctrl_tcp/tcp_netstring.o build-x86_64/modules/ctrl_tcp/./netstring/netstring.o build-x86_64/modules/debug_cmd/debug_cmd.o build-x86_64/modules/ebuacip/ebuacip.o build-x86_64/modules/echo/echo.o build-x86_64/modules/fakevideo/fakevideo.o build-x86_64/modules/httpd/httpd.o build-x86_64/modules/ice/ice.o build-x86_64/modules/menu/menu.o build-x86_64/modules/mwi/mwi.o build-x86_64/modules/natpmp/natpmp.o build-x86_64/modules/natpmp/libnatpmp.o build-x86_64/modules/presence/presence.o build-x86_64/modules/presence/subscriber.o build-x86_64/modules/presence/notifier.o build-x86_64/modules/presence/publisher.o build-x86_64/modules/selfview/selfview.o build-x86_64/modules/serreg/serreg.o build-x86_64/modules/srtp/srtp.o build-x86_64/modules/srtp/sdes.o build-x86_64/modules/stun/stun.o build-x86_64/modules/turn/turn.o build-x86_64/modules/uuid/uuid.o build-x86_64/modules/vidbridge/vidbridge.o build-x86_64/modules/vidbridge/src.o build-x86_64/modules/vidbridge/disp.o build-x86_64/modules/vidinfo/draw.o build-x86_64/modules/vidinfo/vidinfo.o build-x86_64/modules/vidinfo/xga_font_data.o build-x86_64/modules/vidloop/vidloop.o build-x86_64/modules/vumeter/vumeter.o build-x86_64/modules/aubridge/aubridge.o build-x86_64/modules/aubridge/device.o build-x86_64/modules/aubridge/src.o build-x86_64/modules/aubridge/play.o build-x86_64/modules/aufile/aufile.o build-x86_64/modules/ausine/ausine.o build-x86_64/modules/alsa/alsa.o build-x86_64/modules/alsa/alsa_src.o build-x86_64/modules/alsa/alsa_play.o build-x86_64/modules/amr/amr.o build-x86_64/modules/amr/sdp.o build-x86_64/modules/avcodec/avcodec.o build-x86_64/modules/avcodec/decode.o build-x86_64/modules/avcodec/encode.o build-x86_64/modules/avcodec/h263.o build-x86_64/modules/avcodec/h265.o build-x86_64/modules/avcodec/sdp.o build-x86_64/modules/avformat/avformat.o build-x86_64/modules/avformat/audio.o build-x86_64/modules/avformat/video.o build-x86_64/modules/cairo/cairo.o build-x86_64/modules/cons/cons.o build-x86_64/modules/dtls_srtp/dtls_srtp.o build-x86_64/modules/dtls_srtp/srtp.o build-x86_64/modules/dtls_srtp/dtls.o build-x86_64/modules/evdev/evdev.o build-x86_64/modules/evdev/print.o build-x86_64/modules/g711/g711.o build-x86_64/modules/g722/g722.o build-x86_64/modules/g726/g726.o build-x86_64/modules/ctrl_dbus/ctrl_dbus.o build-x86_64/modules/ctrl_dbus/baresipbus.o build-x86_64/modules/gtk/gtk_mod.o build-x86_64/modules/gtk/call_window.o build-x86_64/modules/gtk/dial_dialog.o build-x86_64/modules/gtk/transfer_dialog.o build-x86_64/modules/gtk/uri_entry.o build-x86_64/modules/ilbc/ilbc.o build-x86_64/modules/l16/l16.o build-x86_64/modules/opus_multistream/decode.o build-x86_64/modules/opus_multistream/encode.o build-x86_64/modules/opus_multistream/opus_multistream.o build-x86_64/modules/opus_multistream/sdp.o build-x86_64/modules/opus/decode.o build-x86_64/modules/opus/encode.o build-x86_64/modules/opus/opus.o build-x86_64/modules/opus/sdp.o build-x86_64/modules/oss/oss.o build-x86_64/modules/plc/plc.o build-x86_64/modules/pulse/pulse.o build-x86_64/modules/pulse/player.o build-x86_64/modules/pulse/recorder.o build-x86_64/modules/stdio/stdio.o build-x86_64/modules/syslog/syslog.o build-x86_64/modules/v4l2/v4l2.o build-x86_64/modules/v4l2_codec/v4l2_codec.o build-x86_64/modules/vp8/decode.o build-x86_64/modules/vp8/encode.o build-x86_64/modules/vp8/vp8.o build-x86_64/modules/vp8/sdp.o build-x86_64/modules/vp9/decode.o build-x86_64/modules/vp9/encode.o build-x86_64/modules/vp9/vp9.o build-x86_64/modules/vp9/sdp.o build-x86_64/modules/x11/x11.o build-x86_64/modules/x11grab/x11grab.o build-x86_64/modules/zrtp/zrtp.o build-x86_64/modules/webrtc_aec/aec.o build-x86_64/modules/webrtc_aec/encode.o build-x86_64/modules/webrtc_aec/decode.o -L../re -lre -ldl -lssl -lcrypto -lz -lpthread -lvpx -L../webrtc_sdk/lib/x64/Release -lwebrtc_full -lstdc++ -L../rem -lasound -lopencore-amrnb -lvo-amrwbenc -lopencore-amrwb -lm `pkg-config --libs libavcodec libavutil` `pkg-config --libs libavformat libavcodec libswresample libavutil libavdevice libavfilter libswscale libpostproc` -lcairo -lspandsp -lspandsp -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lilbc -lm -lopus -lm -lopus -lm "-lspandsp" -lpulse-simple -lpulse -lX11 -lXext -lX11 -lXext -lzrtp -lbn -lrem -lm -o baresip

Juha Heinanen

unread,
Oct 24, 2020, 9:46:11 AM10/24/20
to Alfred E. Heggestad, baresip
'Juha Heinanen' via baresip writes:

> I can compile extra modules last by moving line
>
> moving MODULES += $(EXTRA_MODULES)
>
> last in modules.mk, but that does not affect linking order.

I got linking order sorted by changing in webrtc_aec module.mk

LIBS += \
-L$(WEBRTC_PATH)/lib/x64/Release \
-lwebrtc_full \
-lstdc++

to

$(MOD)_LFLAGS += \
-L$(WEBRTC_PATH)/lib/x64/Release \
-lwebrtc_full \
-lstdc++

After that change -lwebrtc_full is listed after -lxvp:

LD libbaresip.so
...
-L../re -lre -ldl -lssl -lcrypto -lz -lpthread -L../rem -lasound -lopencore-amrnb -lvo-amrwbenc -lopencore-amrwb -lm `pkg-config --libs libavcodec libavutil` `pkg-config --libs libavformat libavcodec libswresample libavutil libavdevice libavfilter libswscale libpostproc` -lcairo -lspandsp -lspandsp -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lilbc -lm -lopus -lm -lopus -lm "-lspandsp" -lpulse-simple -lpulse -lvpx -lvpx -lX11 -lXext -lX11 -lXext -lzrtp -lbn -L../webrtc_sdk/lib/x64/Release -lwebrtc_full -lstdc++ -lrem -lm -o libbaresip.so

In addition, as I mentioned earlier, this is needed:

diff --git a/mk/modules.mk b/mk/modules.mk
index e038ef0..b52541f 100644
--- a/mk/modules.mk
+++ b/mk/modules.mk
@@ -266,7 +266,6 @@ endif

# ------------------------------------------------------------------------- #

-MODULES += $(EXTRA_MODULES)
ifneq ($(BASIC_MODULES),no)
MODULES += account
MODULES += auloop
@@ -473,3 +472,5 @@ endif
ifneq ($(USE_RTCPSUMMARY),)
MODULES += rtcpsummary
endif
+
+MODULES += $(EXTRA_MODULES)

-- Juha
Reply all
Reply to author
Forward
0 new messages