OBS Studio 中的平台抽象层 (PAL) 为 Windows、macOS 和 Linux 上的平台特定操作提供了统一的接口。此层使核心应用程序代码能够通过一致的 API 与平台特定功能交互,从而抽象出操作系统之间的底层差异。
有关特定平台实现的更多信息,请参阅 libobs 目录中操作系统特定的文件,例如 obs-windows.c obs-cocoa.m 和 obs-nix.c
平台抽象层位于 OBS 核心组件和底层操作系统之间,为平台特定功能提供一致的抽象。
来源:libobs/util/platform.h libobs/util/platform-windows.c libobs/util/platform-nix.c libobs/util/platform-cocoa.m
平台抽象层提供了以下关键功能组
来源:libobs/util/platform.h16-223
PAL 提供了跨平台一致支持 UTF-8 的文件和目录操作函数
| 功能组 | 关键函数 | 描述 |
|---|---|---|
| 文件操作 | os_fopen, os_wfopen, os_fgetsize | 打开和读取文件 |
| 文件内容 | os_fread_utf8, os_quick_read_utf8_file | 支持 UTF-8 读取文件内容 |
| 目录操作 | os_opendir, os_readdir, os_closedir | 导航目录 |
| 文件系统操作 | os_mkdir, os_rmdir, os_unlink, os_rename | 修改文件系统 |
| 路径工具 | os_get_abs_path, os_get_path_extension | 路径操作 |
来源:libobs/util/platform.h33-58 libobs/util/platform.h112-166
PAL 最重要的功能之一是加载平台特定的动态库(Windows 上的 DLL、Linux 上的 .so 文件以及 macOS 上的 .dylib 文件或 bundles)
来源:libobs/util/platform-windows.c65-135 libobs/util/platform-nix.c68-111 libobs/util/platform-cocoa.m
PAL 提供了计时功能和系统信息检索的一致性
| 功能 | 描述 | Windows 实现 | Unix/Linux 实现 | macOS 实现 |
|---|---|---|---|---|
os_gettime_ns | 高精度时间戳 | QueryPerformanceCounter | clock_gettime | clock_gettime_nsec_np |
os_sleep_ms | 休眠毫秒 | Sleep | usleep | usleep |
os_sleepto_ns | 休眠至时间戳 | QueryPerformanceCounter + Sleep | nanosleep | nanosleep |
os_get_physical_cores | 获取物理 CPU 核心数 | PSYSTEM_LOGICAL_PROCESSOR_INFORMATION | /proc/cpuinfo 解析 | sysctl machdep.cpu.core_count |
os_get_logical_cores | 获取逻辑 CPU 核心数 | PSYSTEM_LOGICAL_PROCESSOR_INFORMATION | sysconf(_SC_NPROCESSORS_ONLN) | sysctl machdep.cpu.thread_count |
来源:libobs/util/platform-windows.c401-459 libobs/util/platform-nix.c221-263 libobs/util/platform-cocoa.m41-44 libobs/util/platform-windows.c1259-1327 libobs/util/platform-nix.c845-987 libobs/util/platform-cocoa.m312-342
PAL 处理配置和应用程序数据的平台特定路径管理
来源:libobs/util/platform-windows.c460-541 libobs/util/platform-nix.c274-434 libobs/util/platform-cocoa.m47-134
Windows 实现广泛使用 Win32 API
LoadLibrary、GetProcAddress 和 FreeLibrarySetThreadExecutionState 来阻止系统休眠来源:libobs/util/platform-windows.c libobs/obs-windows.c
Linux/Unix 实现主要使用符合 POSIX 标准的函数
dlopen、dlsym 和 dlclose/proc 并在 BSD 系统上使用 sysctlxdg-screensaver 或 D-Bus 来阻止系统休眠来源:libobs/util/platform-nix.c libobs/obs-nix.c libobs/obs-nix-x11.c
macOS 实现使用 Cocoa 和 Core Foundation
dlopen、dlsym 和 dlclose,并对框架进行特殊处理sysctl 获取系统信息IOPMAssertionCreate 来阻止系统休眠来源:libobs/util/platform-cocoa.m libobs/obs-cocoa.m
平台抽象层主要用于 OBS Studio 的以下关键领域
加载插件的示例用法
来源:libobs/obs-internal.h libobs/obs-module.c
平台抽象层还为平台特定的 UI 相关功能(尤其是快捷键)提供了抽象
来源:libobs/obs-windows.c369-1006 libobs/obs-nix.c418-495 libobs/obs-cocoa.m219-966 libobs/obs-nix-x11.c77-1290
当向 OBS 添加需要平台特定实现的新功能时
platform.h 中定义通用接口platform-windows.cplatform-nix.cplatform-cocoa.m对于不适合通用抽象的平台特定功能,请使用平台特定文件
obs-windows.cobs-nix.c 和 obs-nix-x11.cobs-cocoa.m刷新此 Wiki
最后索引时间2025 年 4 月 18 日(cfb23a)