DistroAV icon indicating copy to clipboard operation
DistroAV copied to clipboard

[Bug]: Fixing black screen/"Video Decoder not found" on Linux [tested on Ubuntu 23.10]

Open jniltinho opened this issue 1 year ago • 21 comments

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

image

Additional context

No response

jniltinho avatar Jan 03 '24 05:01 jniltinho

@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?

paulpv avatar Jan 03 '24 20:01 paulpv

?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.

jniltinho avatar Jan 03 '24 21:01 jniltinho

Please run this command in the /usr/local/lib/ folder:

strings libndi.so.5.6.0 | grep "\.so[.0-9]*$"

paulpv avatar Jan 03 '24 21:01 paulpv

image

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

jniltinho avatar Jan 03 '24 22:01 jniltinho

What version of ffmpeg is installed?

paulpv avatar Jan 04 '24 00:01 paulpv

image

jniltinho avatar Jan 04 '24 01:01 jniltinho

Is it possible for you to try downgrading ffmpeg to ffmpeg-4.4.4-r8?

paulpv avatar Jan 04 '24 01:01 paulpv

image

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/

image

jniltinho avatar Jan 04 '24 02:01 jniltinho

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.

jniltinho avatar Jan 04 '24 02:01 jniltinho

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

paulpv avatar Jan 04 '24 05:01 paulpv

@jniltinho See https://github.com/obs-ndi/obs-ndi/issues/941#issuecomment-1832524869 and later comments

paulpv avatar Jan 04 '24 05:01 paulpv

@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.

paulpv avatar Jan 04 '24 05:01 paulpv

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

image

jniltinho avatar Jan 04 '24 10:01 jniltinho

image

Other device

jniltinho avatar Jan 04 '24 10:01 jniltinho

I am stumped. Wish I could solve this. You are not the only one. :/

paulpv avatar Jan 10 '24 20:01 paulpv

@paulpv
We need to analyze this calmly, with the new LTS version of Ubuntu 24.04, I will not use version 22.04.

jniltinho avatar Jan 10 '24 20:01 jniltinho

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.

eliaspuurunen avatar Jan 11 '24 02:01 eliaspuurunen

It apparently requires 3rd party dependencies in order to work correctly

paulpv avatar Jan 11 '24 02:01 paulpv

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.

ogmkp avatar Jan 14 '24 22:01 ogmkp

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

johnthq avatar Feb 04 '24 01:02 johnthq

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.

mutant-industries avatar Apr 30 '24 16:04 mutant-industries