snapcrafters / obs-studio

This is a community-supported modified build of OBS Studio.
https://snapcraft.io/obs-studio
111 stars 37 forks source link

[Question]: How do I make sure obs-studio is loading a 3rd-party plugin? #158

Closed splaestro closed 8 months ago

splaestro commented 2 years ago

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:

  1. A "PTZ Controls" dock to appear in View|Docks as per the behavior described at https://github.com/glikely/obs-ptz#readme

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

Output of snap connections $snap_name

Interface                 Plug                                 Slot                            Notes
alsa                      obs-studio:alsa                      -                               -
audio-playback            obs-studio:audio-playback            :audio-playback                 -
audio-record              obs-studio:audio-record              :audio-record                   -
avahi-control             obs-studio:avahi-control             -                               -
browser-support           obs-studio:browser-support           :browser-support                -
camera                    obs-studio:camera                    :camera                         -
content[gtk-3-themes]     obs-studio:gtk-3-themes              gtk-common-themes:gtk-3-themes  -
content[icon-themes]      obs-studio:icon-themes               gtk-common-themes:icon-themes   -
content[sound-themes]     obs-studio:sound-themes              gtk-common-themes:sound-themes  -
desktop                   obs-studio:desktop                   :desktop                        -
desktop-legacy            obs-studio:desktop-legacy            :desktop-legacy                 -
gsettings                 obs-studio:gsettings                 :gsettings                      -
hardware-observe          obs-studio:hardware-observe          -                               -
home                      obs-studio:home                      :home                           -
jack1                     obs-studio:jack1                     -                               -
joystick                  obs-studio:joystick                  -                               -
kernel-module-observe     obs-studio:kernel-module-observe     -                               -
network                   obs-studio:network                   :network                        -
network-bind              obs-studio:network-bind              :network-bind                   -
opengl                    obs-studio:opengl                    :opengl                         -
password-manager-service  obs-studio:password-manager-service  -                               -
process-control           obs-studio:process-control           -                               -
pulseaudio                obs-studio:pulseaudio                :pulseaudio                     -
raw-usb                   obs-studio:raw-usb                   :raw-usb                        manual
removable-media           obs-studio:removable-media           -                               -
screen-inhibit-control    obs-studio:screen-inhibit-control    :screen-inhibit-control         -
screencast-legacy         obs-studio:screencast-legacy         -                               -
system-observe            obs-studio:system-observe            -                               -
unity7                    obs-studio:unity7                    :unity7                         -
upower-observe            obs-studio:upower-observe            :upower-observe                 -
wayland                   obs-studio:wayland                   :wayland                        -
x11                       obs-studio:x11                       :x11

Output of snap version

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)
flexiondotorg commented 8 months ago

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.