媒体源是 OBS Studio 中一个多功能组件,可以直接在场景中播放媒体文件或流。它通过 FFmpeg 框架支持各种媒体格式,包括视频文件、音频文件和网络流。
本页面记录了媒体源的实现、架构和配置选项。有关其他捕获源(如游戏捕获或窗口捕获)的信息,请参阅视频源。
媒体源提供以下关键功能
该实现是 FFmpeg 插件的一部分,并利用 FFmpeg 广泛的媒体格式支持和解码功能。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c31-67
媒体源被实现为使用 FFmpeg 进行媒体解码的 OBS 源插件。它遵循 OBS 源插件架构,同时增加了媒体特定功能。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c240-272 plugins/obs-ffmpeg/obs-ffmpeg-source.c783-807
媒体源主要由 ffmpeg_source 结构定义,该结构包含媒体播放所需的所有状态和配置。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c31-67
媒体源管理媒体数据从文件或流到 OBS 的流程。该管线涉及从打开媒体到在 OBS 中显示媒体的多个阶段。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c290-316 plugins/obs-ffmpeg/obs-ffmpeg-source.c318-333 plugins/obs-ffmpeg/obs-ffmpeg-source.c240-272
当媒体播放系统解码一个帧时,它会调用相应的回调函数,然后将该帧输出到 OBS
get_frame - 处理视频帧并通过 obs_source_output_video 输出它们preload_frame - 在需要时预加载视频帧get_audio - 处理音频数据并通过 obs_source_output_audio 输出它media_stopped - 当媒体播放结束或停止时调用来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c240-288
媒体源维护一个状态机来跟踪和控制播放状态。它使用标准的 OBS 媒体状态并提供状态转换功能。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c676-717 plugins/obs-ffmpeg/obs-ffmpeg-source.c274-288
媒体源实现了 OBS 媒体控制接口,允许用户通过 UI 或热键控制播放
ffmpeg_source_play_pause - 在播放和暂停状态之间切换ffmpeg_source_stop - 停止播放并可选择清除输出ffmpeg_source_restart - 从头开始重新播放ffmpeg_source_get_time / ffmpeg_source_set_time - 处理定位来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c676-752
对于非本地媒体(网络流),媒体源实现了重连逻辑以处理连接丢失
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c353-386 plugins/obs-ffmpeg/obs-ffmpeg-source.c335-351
媒体源提供了许多配置选项来控制播放行为和性能。
| 选项 | 描述 | 默认 |
|---|---|---|
| 本地文件 | 在本地文件和网络 URL 之间切换 | true |
| 循环播放 | 是否循环播放媒体 | false |
| 媒体结束时清除 | 播放结束时显示为空白 | true |
| 激活时重新开始 | 当源激活时重新开始播放 | true |
| 硬件解码 | 可用时使用硬件加速 | false |
| 色彩范围 | YUV 色彩范围(自动/有限/全) | 汽车 |
| 速度 | 播放速度百分比 | 100% |
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c117-128 plugins/obs-ffmpeg/data/locale/en-US.ini71-92
| 选项 | 描述 | 默认 |
|---|---|---|
| 缓冲 | 网络缓冲(MB) | 2 MB |
| 重新连接延迟 | 重新连接前的等待时间 | 10 秒 |
| 可定位 | 流是否支持定位 | false |
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c93-115 plugins/obs-ffmpeg/data/locale/en-US.ini71-92
媒体源还支持高级 FFmpeg 选项,这些选项可以直接传递给 FFmpeg 后端进行微调。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c211-214 plugins/obs-ffmpeg/data/locale/en-US.ini13-14
媒体源通过标准的 OBS 源注册机制注册到 OBS,使用定义所有回调和属性的 ffmpeg_source 结构。
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c595-633 plugins/obs-ffmpeg/obs-ffmpeg-source.c783-807
媒体源实现了核心源生命周期回调
ffmpeg_source_create - 创建并初始化源ffmpeg_source_destroy - 清理资源ffmpeg_source_update - 更新设置并重新配置播放ffmpeg_source_activate / ffmpeg_source_deactivate - 处理源激活/停用ffmpeg_source_tick - 每帧调用以处理重连和资源清理来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c595-807
媒体源通过 FFmpeg 支持多种媒体格式,包括
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c130-133
媒体源与 OBS 的多个系统集成
ffmpeg_source_getproperties 提供配置 UI来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c135-215 plugins/obs-ffmpeg/obs-ffmpeg-source.c615-629
媒体源包含多种场景的错误处理
来源: plugins/obs-ffmpeg/obs-ffmpeg-source.c217-239 plugins/obs-ffmpeg/obs-ffmpeg-source.c754-782