LiveKit integration: real camera feed pipeline #1

Merged
jknapp merged 17 commits from feat/livekit-integration into main 2026-09-07 06:06:50 +00:00
3 changed files with 49 additions and 16 deletions
Showing only changes of commit edb0c02be2 - Show all commits
+1
View File
@@ -79,6 +79,7 @@ jobs:
- name: Show what was built - name: Show what was built
run: | run: |
ls -la .deps/Frameworks/libobs.framework/Resources/cmake || true
ls -la build/package/bin || true ls -la build/package/bin || true
otool -L build/package/bin/streamer-tools-camera.so || true otool -L build/package/bin/streamer-tools-camera.so || true
+11
View File
@@ -35,6 +35,17 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/common")
# a from-source libobs build. # a from-source libobs build.
option(STPLUGIN_BOOTSTRAP_OBS "Download and build libobs from source (macOS/Windows)" ON) option(STPLUGIN_BOOTSTRAP_OBS "Download and build libobs from source (macOS/Windows)" ON)
# Fallbacks for imported targets that were exported under a different
# configuration name than the one being built, lifted from
# obs-plugintemplate's cmake/common/bootstrap.cmake. Without these, an
# imported libobs exported as (say) RelWithDebInfo fails a Release build with
# "IMPORTED_LOCATION or IMPORTED_IMPLIB not set for imported target
# OBS::libobs configuration Release".
set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE Release RelWithDebInfo MinSizeRel None "")
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO RelWithDebInfo Release MinSizeRel None "")
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL MinSizeRel Release RelWithDebInfo None "")
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Debug RelWithDebInfo Release MinSizeRel None "")
include(osconfig) include(osconfig)
if(STPLUGIN_BOOTSTRAP_OBS AND (OS_MACOS OR OS_WINDOWS)) if(STPLUGIN_BOOTSTRAP_OBS AND (OS_MACOS OR OS_WINDOWS))
if(OS_MACOS) if(OS_MACOS)
+36 -15
View File
@@ -163,11 +163,19 @@ function(_setup_obs_studio)
if(OS_WINDOWS) if(OS_WINDOWS)
set(_cmake_generator "${CMAKE_GENERATOR}") set(_cmake_generator "${CMAKE_GENERATOR}")
if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION) # Plain "-A x64", NOT upstream's "-A x64,version=<Windows SDK>". With a
list(APPEND _cmake_arch -A "${arch},version=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}") # current CMake the ",version=" suffix comes back out verbatim in the
else() # sub-build's CMAKE_VS_PLATFORM_NAME, and obs-studio's OWN dependency
# downloader keys its release assets off that value -- so the sub-configure
# goes looking for a file that cannot exist:
#
# string sub-command JSON member 'hashes windows-x64,version=10.0.26100.0'
# not found
# Unable to download .../windows-deps-2023-11-03-x64,version=10.0.26100.0.zip
#
# The Windows SDK is selected automatically anyway ("Selecting Windows SDK
# version 10.0.26100.0"), and CMAKE_SYSTEM_VERSION is passed below.
list(APPEND _cmake_arch -A "${arch}") list(APPEND _cmake_arch -A "${arch}")
endif()
list(APPEND _cmake_extra "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}") list(APPEND _cmake_extra "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}")
elseif(OS_MACOS) elseif(OS_MACOS)
# Ninja, not upstream's Xcode generator. A runner with only the Command # Ninja, not upstream's Xcode generator. A runner with only the Command
@@ -216,25 +224,38 @@ function(_setup_obs_studio)
) )
message(STATUS "Build ${label} (Release - ${arch}) - done") message(STATUS "Build ${label} (Release - ${arch}) - done")
# Install only libobs's own rules, not the whole build tree's. Installing # Install the whole build tree, and tolerate a non-zero exit.
# from the top-level build directory walks every subproject's #
# cmake_install.cmake, including UI/obs-frontend-api's, which then fails on # Installing from the top-level build directory walks every subproject's
# a binary that was deliberately never built: # cmake_install.cmake, including UI/obs-frontend-api's, which fails on a
# binary this build deliberately never produced (that is the whole point of
# dropping Qt):
# #
# file INSTALL cannot find ".../obs-frontend-api.dylib": No such file # file INSTALL cannot find ".../obs-frontend-api.dylib": No such file
# #
# Pointing --install at the libobs subdirectory installs the framework / # Restricting --install to the libobs subdirectory avoids that error, but
# import library, the headers, and libobsConfig.cmake + libobsTargets.cmake # then the per-configuration export file (libobsTargets-release.cmake) never
# -- everything find_package(libobs) needs -- and nothing else. # lands, and every consumer fails with "IMPORTED_LOCATION or IMPORTED_IMPLIB
# not set for imported target OBS::libobs configuration Release". So run the
# full install exactly as upstream does, let it get through libobs, and
# ignore the error it hits afterwards. If libobs really did not install, the
# find_package(libobs) in the top-level CMakeLists is where that surfaces --
# loudly, and with a far more useful message than a half-installed tree.
message(STATUS "Install ${label} (${arch})") message(STATUS "Install ${label} (${arch})")
execute_process( execute_process(
COMMAND COMMAND
"${CMAKE_COMMAND}" --install build_${arch}/libobs --component Development --config Release --prefix "${CMAKE_COMMAND}" --install build_${arch} --component Development --config Release --prefix "${dependencies_dir}"
"${dependencies_dir}"
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}" WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
RESULT_VARIABLE _process_result RESULT_VARIABLE _install_result
COMMAND_ERROR_IS_FATAL ANY OUTPUT_QUIET
) )
if(NOT _install_result EQUAL 0)
message(
STATUS
"Install ${label} (${arch}) reported errors; expected, because install rules exist for "
"targets this build skips. Continuing -- find_package(libobs) is the real check."
)
endif()
message(STATUS "Install ${label} (${arch}) - done") message(STATUS "Install ${label} (${arch}) - done")
endfunction() endfunction()