DistroAV
DistroAV copied to clipboard
[Bug]: Fixing black screen/"Video Decoder not found" on Linux [tested on Ubuntu 23.10]
Operating System Version
Kubuntu 23.10
OBS Version
30.0.1
NDI Tools Version
4.13.0
Describe the bug
Logs
02:09:15.481: FFmpeg VAAPI H264 encoding supported
02:09:15.482: FFmpeg VAAPI HEVC encoding supported
02:09:15.500: [obs-ndi] obs_module_load: you can haz obs-ndi (Version 4.13.0)
02:09:15.500: [obs-ndi] obs_module_load: Qt Version: 6.4.2 (runtime), 6.2.4 (compiled)
02:09:15.500: [obs-ndi] load_ndilib: Trying '/usr/lib/libndi.so.5'
02:09:15.500: [obs-ndi] load_ndilib: Trying '/usr/local/lib/libndi.so.5'
02:09:15.500: [obs-ndi] load_ndilib: Found NDI library at '/usr/local/lib/libndi.so.5'
02:09:15.500: [obs-ndi] load_ndilib: NDI runtime loaded successfully
02:09:15.500: [obs-ndi] load_ndilib: NDIlib_v5_load found
02:09:15.500: [obs-ndi] obs_module_load: NDI library initialized successfully ('NDI SDK LINUX 10:26:04 Nov 17 2023 5.6.0')
02:09:15.501: [obs-ndi] preview_output_init('OBS Preview')
02:09:15.501: [obs-ndi] +ndi_output_create('OBS Preview'...)
02:09:15.501: [obs-ndi] ndi_output_update('OBS Preview'...)
02:09:15.501: [obs-ndi] -ndi_output_create('OBS Preview'...)
02:09:16.419: [obs-ndi] +ndi_source_create('celular02'...)
02:09:16.419: [obs-ndi] +ndi_source_update('celular02'...)
02:09:16.419: [obs-ndi] ndi_source_thread_start: 'OBS-NDI 'celular02'' Started A/V ndi_source_thread for NDI source 'POCO-X5-PRO-5G (NDI HX Camera)'
02:09:16.419: [obs-ndi] -ndi_source_update('celular02'...)
02:09:16.419: [obs-ndi] -ndi_source_create('celular02'...)
02:09:16.419: [obs-ndi] +ndi_source_thread('celular02'...)
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' ndi_receiver_name changed; Setting recv_desc.p_ndi_recv_name='OBS-NDI 'celular02''
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' ndi_source_name changed; Setting recv_desc.source_to_connect_to.p_ndi_name='POCO-X5-PRO-5G (NDI HX Camera)'
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' bandwidth changed; Setting recv_desc.bandwidth='100'
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' latency changed; Setting recv_desc.color_format='1'
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' Resetting NDI receiver...
02:09:16.419: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' +ndi_receiver = ndiLib->recv_create_v3(&recv_desc)
02:09:16.420: [obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' -ndi_receiver = ndiLib->recv_create_v3(&recv_desc)
02:09:16.505: [obs-ndi] ndi_source_shown('celular02'...)
02:09:16.505: [obs-ndi] ndi_source_activated('celular02'...)
[obs-ndi] ndi_source_thread: 'OBS-NDI 'celular02'' tally changed; Sending tally on_preview=1, on_program=1
Steps to reproduce
No response
Expected behavior
No response
Screenshots
Additional context
No response
@jniltinho What is this POCO-X5-PRO-5G (NDI HX Camera)
device?
https://www.po.co/global/product/poco-x5-pro-5g/
Can NDI Studio Monitor
view it?
?jniltinho O que é isto?
POCO-X5-PRO-5G (NDI HX Camera)
- Um dispositivo? https://www.po.co/global/product/poco-x5-pro-5g/Não pode
NDI Studio Monitor
- vê-lo?
Yes, this is a cell phone using the NDI app, When I was using Linux Mint Cinamon "Ubuntu 22.04", it worked without any problems.
Please run this command in the /usr/local/lib/ folder:
strings libndi.so.5.6.0 | grep "\.so[.0-9]*$"
libavahi-common.so.3 libavahi-client.so.3 libdl.so.2 libm.so.6 libpthread.so.0 libc.so.6 ld-linux-x86-64.so.2 libndi.so.5 libndihx.so libavcodec.so.58 libavcodec-ndi.so.58 libavutil.so.56 libavutil-ndi.so.56 libmsquic.lttng.so.2.1.9
What version of ffmpeg is installed?
Is it possible for you to try downgrading ffmpeg to ffmpeg-4.4.4-r8?
In Ubuntu/Kubuntu 23.04 there is no such option, does it work with a static version? https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.4.1-amd64-static.tar.xz
https://www.johnvansickle.com/ffmpeg/old-releases/
It doesn't work with the statics package, I believe it uses the obs shared libs.
It is very difficult to downgrade the package, as it involves many libs, ndi needs to be compiled with this new version and Ubuntu 24.04 will soon be released with this ffmpeg 6.
I think it would be interesting to make it work with Debian 12 and Ubuntu 24.04, if you need help testing, I can set up the environment here. We can open an Issue and start doing these tests.
Are there any other NDI monitoring apps that you can prove work on that OS with that NDI|HX device?
NDI|HX requires some extra libs on the system.
Is avahi-daemon running?
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon
@jniltinho See https://github.com/obs-ndi/obs-ndi/issues/941#issuecomment-1832524869 and later comments
@jniltinho Also see https://github.com/obs-ndi/obs-ndi/issues/724
Any of that help?
Poke around and let us know.
I still have not pushed out a needed update to the readme to describe a few Linux gotchas.
Existem outros aplicativos de monitoramento NDI que você possa provar trabalhar nesse sistema operacional com esse dispositivo NDI|HX?
O NDI|HX requer algumas libs extras no sistema.
O avahi-daemon está a funcionar?
sudo systemctl enable avahi-daemon sudo systemctl start avahi-daemon
Other device
I am stumped. Wish I could solve this. You are not the only one. :/
@paulpv
We need to analyze this calmly, with the new LTS version of Ubuntu 24.04, I will not use version 22.04.
Does obs-ndi's Linux version ship with the NDI|HX decode driver? I had to ask the folks at NDI for them, and then for my multiview app make sure the libs were in the right path so they could be loaded.
It apparently requires 3rd party dependencies in order to work correctly
In the past, there was a ndi hx library provided by Newtek engineering team if you prove that you own h264/h265 licensing on linux or you have to buy a key for the NDI Advanced SDK to decode hx1, hx2 and hx3. On cheap cameras, you can have the chance to play some HX with miss customized encoders who send strange AVC formats, I had no more time to investigate this.
switched over to spiral debian plasma just to find im recieving this problem. went over everything thats been suggested, it definetly appears to be related to the decoding codec for NDI HX, as i can decode the standard NDI screen capture application without getting the "Decoder not Found"
/usr/local/lib$ strings libndi.so.5.6.0 | grep "\.so[.0-9]*$" libavahi-common.so.3 libavahi-client.so.3 libdl.so.2 libm.so.6 libpthread.so.0 libc.so.6 ld-linux-x86-64.so.2 libndi.so.5 libndihx.so libavcodec.so.58 libavcodec-ndi.so.58 libavutil.so.56 libavutil-ndi.so.56 libmsquic.lttng.so.2.1.9
ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12 (Debian 12.2.0-14) configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100
It apparently requires 3rd party dependencies in order to work correctly
I've been facing the same issue on slackware-current with custom build of OBS 30.1.0.97 and obs-ndi 4.13.0.
strings libndi.so.5.5.4 | grep "\.so[.0-9]*$"
prints following output:
libavahi-common.so.3
libavahi-client.so.3
libdl.so.2
libm.so.6
libpthread.so.0
libc.so.6
ld-linux-x86-64.so.2
libndi.so.5
libndihx.so
libavcodec.so.58
libavcodec-ndi.so.58
libavutil.so.56
libavutil-ndi.so.56
libmsquic.lttng.so.2.1.1
On slackware-current I'm using ffmpeg-6.1.1, that actually comes with the following libs:
libavcodec.so.60
libavutil.so.58
and the scenario is the same - when using NDICam with Full NDI everything works fine, but with NDI HX3 I get the "Video decoder not found" screen in OBS.
What I did was that I build ffmpeg version 4.4.1 on some older distro and from result I copied out libavutil.so.56
and libavcodec.so.58
to my /usr/lib64
folder. At this point nothing changed, so I executed ldd
on those libs:
ldd /usr/lib64/libavcodec.so.58 | grep "not found"
ldd /usr/lib64/libavutil.so.56 | grep "not found"
You should see at least this output:
libswresample.so.3 => not found
The libswresample.so.3 lib is also in ffmpeg 4.4.1 build result and also has to be copied to /usr/lib64. You can also check this lib with ldd
ldd /usr/lib64/libswresample.so.3 | grep "not found"
Now all other libs listed as 'not found' have to be either somehow supplied to the system, or ffmpeg 4.4.1 has to be configured and rebuilt once again, so that the result does not depend on libs, that are not present. In my case I had to --disable-libvpx
and --disable-libx265
.
I didn't face this issue on slackware-15.0, because it comes with ffmpeg-4.4.1 by default, so obs-ndi just works with any version of ndi-sdk. Also it doesn't matter which version of ndi-sdk you choose (v4.0, v5.0 or v6.0), all of them depend on libavcodec.so.58
and libavutil.so.56
, so it was just matter of time when people with latest ffmpeg run into problems when using NDI HX.