OBS does not load a 3rd-party plugin that I have installed in the location prescribed by this page: https://snapcraft.io/obs-studio. On my machine this is ~/snap/obs-studio/1284/.config/obs-studio/plugins
Note that I built it on a different machine, using the PPA install of OBS, because I couldn't figure out how to do so with a snap installation (are all the OBS headers included in the snap package?? If so, how does one point to them???)
From the logs, I can't even tell if OBS is finding that file and trying to open it.
The log to give me some indication that OBS has tried to load the plugin and failed for some reason (e.g., a dlopen failure).
Neither of these things occurs.
Output of snap info $snap_name
name: obs-studio
summary: Free and open source software for live streaming and screen
recording
publisher: Snapcrafters
store-url: https://snapcraft.io/obs-studio
contact: https://github.com/snapcrafters/obs-studio/issues
license: GPL-2.0
description: |
OBS Studio is software designed for capturing, compositing, encoding,
recording, and streaming video content, efficiently. _This is a
community-supported modified build of OBS Studio; please file issues on the
Snapcrafters GitHub:_ https://github.com/snapcrafters/obs-studio/issues
**Batteries included**
The snap of OBS studio comes pre-loaded with some extra features:
* Supports **nvenc (NVIDIA) and VA-API (AMD & Intel) accelerated video
encoding**.
* **Advanced Scene Switcher** plugin; an automated scene switcher
* **Browser** plugin; CEF-based OBS Studio browser plugin
* **Directory Watch Media** plugin; filter you can add to a media source
to load the oldest or newest file in a directory.
* **Dynamic Delay** plugin; filter for dynamic delaying a video source.
* **Freeze Filter** plugin; freeze a source using a filter.
* **gPhoto** plugin; connect DSLR cameras with obs-studio via gPhoto.
* **GStreamer** plugins; feed GStreamer launch pipelines into OBS Studio
and use GStreamer encoder elements.
* **Move Transition** plugin; move sources to a new position during a
scene transition.
* **NDI** plugin; Network A/V via NewTek's NDI.
* **NvFBC** plugin; screen capture via NVIDIA FBC API. Requires NvFBC
patches for Nvidia drivers for consumer-grade GPUs.
* **RGB Levels** plugin; simple filter to adjust RGB levels.
* **Source Switcher** plugin; to switch between a list of sources.
* **Spectralizer** plugin; audio visualization using fftw.
* **StreamFX** plugin; collection modern effects filters and transitions.
* **Text Pango** plugin; Provides a text source rendered using Pango with
multi-language support, emoji support, vertical rendering and RTL
support.
* **Transition Matrix** plugin; customize Any -> One or One -> One scene
transitions.
* **VNC Source** plugin; VNC viewer that works as a source.
* **Websockets** plugin; remote-control OBS Studio through WebSockets.
**Connecting Interfaces**
For the best experience, you'll want to connect the following interfaces.
sudo snap connect obs-studio:alsa
sudo snap connect obs-studio:audio-record
sudo snap connect obs-studio:avahi-control
sudo snap connect obs-studio:camera
sudo snap connect obs-studio:jack1
sudo snap connect obs-studio:kernel-module-observe
**NDI**
If you want to use the NDI plugin you'll need to connect the Avahi Control
interface.
snap connect obs-studio:avahi-control
**Virtual Camera**
Starting with OBS 26.1.0, Virtual Camera support is integrated. Here's how
to install and configure `v4l2loopback`:
sudo snap connect obs-studio:kernel-module-observe
sudo apt -y install v4l2loopback-dkms v4l2loopback-utils
echo "options v4l2loopback devices=1 video_nr=13 card_label='OBS Virtual
Camera' exclusive_caps=1" | sudo tee
/etc/modprobe.d/v4l2loopback.conf
echo "v4l2loopback" | sudo tee /etc/modules-load.d/v4l2loopback.conf
sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback devices=1 video_nr=13 card_label='OBS Virtual
Camera' exclusive_caps=1
**NOTE!** Using `video_nr` greater than 64 will not work.
**Removable Storage**
To access content on external storage, connect to the removable-media plug:
snap connect obs-studio:removable-media
**gPhoto**
The gPhoto plugin allows some DSLR cameras to be connected via USB. You'll
need to connect the Raw USB interface.
snap connect obs-studio:raw-usb
**3rd Party plugins**
To install pre-compiled plugins, download and extract the plugin to
`~/snap/obs-studio/current/.config/obs-studio/plugins/`.
This is how the Input Overlay plugin looks when correctly installed:
/home/username/snap/obs-studio/current/.config/obs-studio/plugins/
└── input-overlay
├── bin
│ └── 64bit
│ └── input-overlay.so
└── data
└── locale
├── de-DE.ini
├── en-US.ini
└── ru-RU.ini
If you want to use the Input Overlay plugin, you'll also need to connect
the joystick interface:
snap connect obs-studio:joystick
commands:
- obs-studio.eglinfo
- obs-studio.ffmpeg
- obs-studio.ffplay
- obs-studio.ffprobe
- obs-studio.glxinfo
- obs-studio
- obs-studio.srt-ffplay
- obs-studio.srt-file-transmit
- obs-studio.srt-live-transmit
- obs-studio.srt-tunnel
- obs-studio.vainfo
- obs-studio.vdpauinfo
- obs-studio.vulkaninfo
snap-id: 6uLU2MJmBURfLNz4rmL4WT2CmtVULE2u
tracking: latest/stable
refresh-date: yesterday at 15:29 EDT
channels:
latest/stable: 27.1.3 2021-12-20 (1284) 418MB -
latest/candidate: ↑
latest/beta: ↑
latest/edge: 27.2.1 2022-02-24 (1287) 439MB -
installed: 27.1.3 (1284) 418MB -
snap 2.55.3
snapd 2.55.3
series 16
ubuntu 20.04
kernel 5.4.0-109-generic
Relevant log output
I am not sure these are relevant, but there are many entries like the following two.
===
Apr 30 18:14:58 obs kernel: audit: type=1400 audit(1651356898.186:8952): apparmor="DENIED" operation="mknod" profile="snap.obs-studio.obs-studio" name=2F686F6D652F7772662F736E61702F6F62732D73747564696F2F313138352F7363656E65732F5363656E652073776974636865722F746573742E747874 pid=10444 comm="QThread" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000
Apr 30 18:14:58 obs audit[10444]: AVC apparmor="DENIED" operation="mknod" profile="snap.obs-studio.obs-studio" name=2F686F6D652F7772662F736E61702F6F62732D73747564696F2F313138352F7363656E65732F5363656E652073776974636865722F746573742E747874 pid=10444 comm="QThread" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000
Teminal output of app
From the following terminal output I've deleted the info lines related to the scenes being loaded since we have a lot of them, and there doesn't appear to be anything relevant there. Note that ptz-controls is not present in the list of loaded modules, nor can I find any error messages that seem to indicate OBS tried to load it and failed.
===
(process:10444): Gtk-WARNING **: 15:47:32.958: Locale not supported by C library.
Using the fallback 'C' locale.
Gtk-Message: 15:47:32.971: Failed to load module "appmenu-gtk-module"
Gtk-Message: 15:47:32.972: Failed to load module "canberra-gtk-module"
Attempted path: share/obs/obs-studio/locale/en-US.ini
Attempted path: /usr/share/obs/obs-studio/locale/en-US.ini
Attempted path: share/obs/obs-studio/themes/Dark.qss
Attempted path: /usr/share/obs/obs-studio/themes/Dark.qss
info: User enabled --multi flag and is now running multiple instances of OBS.
info: Command Line Arguments: --multi
info: CPU Name: Intel(R) Core(TM) i9-10920X CPU @ 3.50GHz
info: CPU Speed: 1200.040MHz
info: Physical Cores: 12, Logical Cores: 24
info: Physical Memory: 15689MB Total, 12450MB Free
info: Kernel Version: Linux 5.4.0-109-generic
info: Distribution: "Ubuntu Core" "20"
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.20.13
info: Portable mode: false
Attempted path: share/obs/obs-studio/themes/Dark/no_sources.svg
Attempted path: /usr/share/obs/obs-studio/themes/Dark/no_sources.svg
QMetaObject::connectSlotsByName: No matching signal for on_tbar_position_valueChanged(int)
QMetaObject::connectSlotsByName: No matching signal for on_actionShowTransitionProperties_triggered()
QMetaObject::connectSlotsByName: No matching signal for on_actionHideTransitionProperties_triggered()
info: OBS 27.1.3-modified (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
samples per sec: 48000
speakers: 2
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter NVIDIA Corporation NVIDIA GeForce GTX 1050 Ti/PCIe/SSE2
info: OpenGL loaded successfully, version 3.3.0 NVIDIA 470.103.01, shading language 3.30 NVIDIA via Cg compiler
info: ---------------------------------
info: video settings reset:
base resolution: 1920x1080
output resolution: 1920x1080
downscale filter: Bicubic
fps: 30/1
format: NV12
YUV mode: 709/Partial
info: NV12 texture support not available
info: Audio monitoring device:
name: Monitor of Built-in Audio Analog Stereo
id: alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
info: ---------------------------------
info: [StreamFX] Loading Version 0.11.0.0c1-g2d7fce5a
info: [StreamFX] <gfx::opengl> Version 3.3 initialized.
info: [StreamFX] Loaded Version 0.11.0.0c1-g2d7fce5a
info: [adv-ss] version: 1.16.5
info: [adv-ss] version: 82da6b32175081a3c8ca9c3aeed267999f460dcb
info: [adv-ss] curl loaded successfully
info: [adv-ss] found curl library
warning: Failed to load 'en-US' text for module: 'decklink-captions.so'
warning: Failed to load 'en-US' text for module: 'decklink-ouput-ui.so'
info: [Downstream Keyer] loaded version 0.2.1
info: [Freeze Filter] loaded version 0.3.2
info: [Gradient Source] loaded version 0.2.0
warning: Failed to load 'en-US' text for module: 'liblooking-glass-obs.so'
Looking Glass OBS Client (B4)
info: [pango]: Loaded system fontconfig
libDeckLinkAPI.so: cannot open shared object file: No such file or directory
warning: A DeckLink iterator could not be created. The DeckLink drivers may not be installed
info: No blackmagic support
error: [linux-vkcapture] linux-vkcapture cannot run on non-EGL platforms
warning: Failed to initialize module 'linux-vkcapture.so'
info: [Move Transition] loaded version 2.5.2
warning: Failed to load 'en-US' text for module: 'obs-audio-pan-filter.so'
info: [obs-audio-pan-filter] plugin loaded successfully (version 0.1.2)
warning: Failed to load 'en-US' text for module: 'obs-backgroundremoval.so'
info: [obs-backgroundremoval] plugin loaded successfully (version 0.4.0)
info: [obs-browser]: Version 2.16.3
info: [obs-browser]: CEF Version 87.1.14+ga29e9a3+chromium-87.0.4280.141
info: NVENC supported
info: FFMPEG VAAPI supported
warning: Failed to load 'en-US' text for module: 'obs-gphoto.so'
info: obs-gstreamer build: 219a629
info: [obs-ndi] hello ! (version 4.9.1)
info: [obs-ndi] Trying ''
info: [obs-ndi] Trying '/usr/lib'
info: [obs-ndi] Trying '/usr/local/lib'
info: [obs-ndi] Found NDI library at '/usr/local/lib/libndi.so.4'
info: [obs-ndi] NDI runtime loaded successfully
info: [obs-ndi] NDI library initialized successfully (NDI SDK LINUX 18:32:11 Jun 30 2020 4.5.3)
warning: Failed to load 'en-US' text for module: 'obs-vnc.so'
info: [obs-vnc] plugin loaded successfully (version 0.4.0)
info: [obs-websocket] you can haz websockets (version 4.9.1)
info: [obs-websocket] qt version (compile-time): 5.15.2 ; qt version (run-time): 5.15.2
info: [obs-websocket] module loaded!
info: [Replay Source] loaded version 1.6.9
info: [Source Copy] loaded version 0.1.3
info: [Source Record] loaded version 0.2.6
info: [Source Switcher] loaded version 0.3.0
info: [spectralizer] Loading v1.3.2 build time 2021.12.20 11:59
info: [TimeWarpScan] loaded version 0.1.6
info: [Transition Table] loaded version 0.2.2
info: VLC found, VLC video source enabled
info: ---------------------------------
info: Loaded Modules:
info: vlc-video.so
info: transition-table.so
info: time-warp-scan.so
info: text-freetype2.so
info: spectralizer.so
info: source-switcher.so
info: source-record.so
info: source-copy.so
info: sndio.so
info: scale-to-sound.so
info: rtmp-services.so
info: replay-source.so
info: recursion-effect.so
info: obs-x264.so
info: obs-websocket.so
info: obs-vst.so
info: obs-vnc.so
info: obs-transitions.so
info: obs-rtspserver.so
info: obs-rgb-levels-filter.so
info: obs-outputs.so
info: obs-ndi.so
info: obs-libfdk.so
info: obs-gstreamer.so
info: obs-gphoto.so
info: obs-filters.so
info: obs-ffmpeg.so
info: obs-browser.so
info: obs-backgroundremoval.so
info: obs-audio-pan-filter.so
info: nvfbc.so
info: move-transition.so
info: linux-vkcapture.so
info: linux-v4l2.so
info: linux-pulseaudio.so
info: linux-jack.so
info: linux-decklink.so
info: linux-capture.so
info: linux-alsa.so
info: libtext-pango.so
info: liblooking-glass-obs.so
info: image-source.so
info: gradient-source.so
info: frontend-tools.so
info: freeze-filter.so
info: dynamic-delay.so
info: dvd-screensaver.so
info: downstream-keyer.so
info: dir-watch-media.so
info: decklink-ouput-ui.so
info: decklink-captions.so
info: advanced-scene-switcher.so
info: StreamFX.so
info: ---------------------------------
info: ==== Startup complete ===============================================
info: All scene data cleared
info: ------------------------------------------------
info: pulse-input: Server name: 'pulseaudio 13.99.1'
info: pulse-input: Audio format: s16le, 44100 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_output.pci-0000_00_1f.3.analog-stereo.monitor'
info: [Loaded global audio device]: 'Desktop Audio out to mixer'
info: - filter: 'Noise Suppression' (noise_suppress_filter_v2)
info: pulse-input: Server name: 'pulseaudio 13.99.1'
info: pulse-input: Audio format: s16le, 44100 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_input.pci-0000_00_1f.3.analog-stereo'
info: pulse-am: Server name: 'pulseaudio 13.99.1'
info: pulse-am: Audio format: s16le, 44100 Hz, 2 channels
info: pulse-am: Started Monitoring in 'alsa_output.pci-0000_00_1f.3.analog-stereo.monitor'
info: [Loaded global audio device]: 'Mixer in'
info: - filter: 'Noise Suppression' (noise_suppress_filter_v2)
info: - monitoring: monitor and output
info: [Media Source 'Platform camera']: settings:
input: /dev/video1
input_format: (null)
speed: 100
is_looping: no
is_linear_alpha: no
is_hw_decoding: no
is_clear_on_media_end: yes
restart_on_activate: yes
close_when_inactive: yes
info: [Media Source 'Congregation Camera']: settings:
input: /dev/video3
input_format: (null)
speed: 100
is_looping: no
is_linear_alpha: no
is_hw_decoding: no
is_clear_on_media_end: yes
restart_on_activate: yes
close_when_inactive: yes
[0430/154734.442985:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446490:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446527:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446546:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446564:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446581:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446598:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446615:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446634:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446652:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446678:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446696:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446715:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446733:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446750:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446766:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446785:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446804:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446821:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446839:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446857:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446875:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446894:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446911:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446928:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446946:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446965:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.446982:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.447001:WARNING:task_impl.cc(31)] No task runner for threadId 0
[0430/154734.447020:WARNING:task_impl.cc(31)] No task runner for threadId 0
info: Switched to scene 'Camera Operator'
info: [adv-ss] trying to reconnect to in 10 seconds.
info: [adv-ss] started
info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Podium Tight':
<scene loading deleted>
info: ------------------------------------------------
Attempted path: share/obs/obs-studio/images/overflow.png
Attempted path: /usr/share/obs/obs-studio/images/overflow.png
warning: MP: Failed to seek: Invalid argument
info: adding 64 milliseconds of audio buffering, total audio buffering is now 64 milliseconds (source: Desktop Audio out to mixer)
info: User switched to scene 'Congregation'
info: [adv-ss] detected busy loop - refusing to sleep less than 1ms
info: adding 128 milliseconds of audio buffering, total audio buffering is now 192 milliseconds (source: Mixer in)
If the plugin is loaded, you'll see a message in the OBS log file. It if fails to load any errors, such as unsatisfied dependencies, will also be logged.
What happened?
OBS does not load a 3rd-party plugin that I have installed in the location prescribed by this page: https://snapcraft.io/obs-studio. On my machine this is
~/snap/obs-studio/1284/.config/obs-studio/plugins
The plugin binary is ptz-controls.so, built from https://github.com/glikely/obs-ptz
Note that I built it on a different machine, using the PPA install of OBS, because I couldn't figure out how to do so with a snap installation (are all the OBS headers included in the snap package?? If so, how does one point to them???)
From the logs, I can't even tell if OBS is finding that file and trying to open it.
What should have happened?
I would expect either:
A "PTZ Controls" dock to appear in View|Docks as per the behavior described at https://github.com/glikely/obs-ptz#readme
The log to give me some indication that OBS has tried to load the plugin and failed for some reason (e.g., a dlopen failure).
Neither of these things occurs.
Output of
snap info $snap_name
Output of
snap connections $snap_name
Output of
snap version
Relevant log output
Teminal output of app