OBS Studio — 开源直播录制与推流
是什么
OBS Studio(Open Broadcaster Software)是跨平台 直播推流 + 本地录制 软件:把摄像头、屏幕、图片等源合成一路视频,编码后推到 Twitch / YouTube 或存成文件。
日常类比:电视台导播间有一排监视器和一个切换台。OBS 把导播台搬到电脑上——场景是节目单,源是机位,推流是把信号送到发射塔。
典型工作流:添加「显示器捕获」+「麦克风」→ 选 x264 或 NVENC 编码 → 设置 RTMP 服务器 URL → 开始直播。
安装:从 obsproject.com 下载安装包,或使用发行版社区包;首次启动运行「自动配置向导」测上行带宽。
为什么重要
不理解 OBS,直播技术栈会缺「制作端」:
- 事实标准主播工具:与 nginx-rtmp-module、Twitch ingest 对接的默认客户端
- 场景与滤镜可编程:Lua/Python 脚本插件扩展自动化
- 理解编码参数:码率、关键帧、B 帧对下游 [[hls.js]] 播放体验直接影响
- 与 ffmpeg 同族逻辑:OBS 内置 ffmpeg 做 remux 与部分滤镜
核心要点
-
场景(Scene)与源(Source):一个场景多图层叠加;切换场景=切节目。
-
编码器选择:x264 吃 CPU;NVENC / QuickSync 硬编省资源,画质略逊可调参弥补。
-
输出模块:串流(RTMP/SRT)、录制(mkv/mp4)、虚拟摄像头输出到 Zoom 等。
-
音频混音器:每路源独立音量、降噪、侧链压缩,避免游戏声盖过人声。
-
滤镜链:色彩校正、色键抠绿、降噪,顺序影响延迟与画质。
-
工作室模式:预览与节目分离,切场景前先看效果,减少直播事故。
实践案例
案例 1:推流到自建 nginx-rtmp-module
设置 → 串流 → 服务选「自定义」:
服务器 rtmp://your-host/live串流密钥 stream1nginx 侧 application live { live on; } 收流后可再转 HLS。
案例 2:录制同时推流
「高级」里勾选「录制」与「串流」并行;录制用 mkv 防崩溃丢文件,结束再 remux mp4。
案例 3:虚拟摄像头
工具 → 虚拟摄像头启动,Zoom/Teams 选 OBS-Camera 作为视频源,复用滤镜与场景。
案例 4:用 Replay Buffer 做精彩瞬间
设置 → 回放缓冲区 20s,快捷键保存最近片段,无需全程录盘。
案例 5:用 WebSocket 插件做弹幕叠加
社区插件可把浏览器源或文本源绑外部 API;理解「源更新频率」与 CPU 占用关系,避免直播中途卡死。
OBS 输出「高级」页可设重连间隔,推流断线自动恢复,减少人工盯盘。
「工具 → 自动配置向导」会测上行并推荐初始码率,新手先跑一遍再手调。
踩过的坑
-
管理员权限与捕获:部分游戏需 OBS 以管理员运行才能抓全屏。
-
双显卡笔记本:需指定 OBS 用独显/集显,否则黑屏捕获。
-
关键帧间隔与 RTMP:一般 2s GOP;过大导致直播 seek 与切片差。
-
音画不同步:蓝牙麦克风延迟大,尽量有线或调同步偏移。
-
macOS 屏幕录制权限:系统设置里须授权,否则源黑屏。
-
升级插件兼容性:大版本升级后第三方插件可能失效,先备份场景集合。
-
多路推流插件:官方单路串流,要多平台同时推需社区插件或外部分流。
-
笔记本散热:x264 长时间 1080p60 易降频,优先硬编或降分辨率。
适用 vs 不适用场景
适用:
- 个人/小团队直播、网课、演示录制
- 学习推流编码与场景管理
- 虚拟摄像头、本地混流
不适用:
历史小故事(可跳过)
- 2012 前后:Hugh Bailey 创建 OBS,解决开源抓屏推流空白
- 2016+:OBS Studio 重写,插件 API 与跨平台成熟
- 社区极大:主播、教育者默认装机;与 Twitch growth 同步
- GPL v2:衍生遵守许可证,商业封装须合规
学到什么
- 直播全链路有「制作端」:OBS 管信号生产,CDN 管分发
- 编码参数不是越高越好:上传带宽与观众缓冲要平衡
- 场景化思维可迁移到云导播:概念通用
- 与 nginx-rtmp-module 联调是自建直播第一课
- 虚拟摄像头是隐藏技能:非直播场景也常用
- 统计面板看丢帧:「Dropped Frames」升高先降码率或换硬编
- Profile 可导出分享:场景集合 json 便于团队复用同一套布局
- SRT 输出逐渐普及:新版本支持 SRT 推流,弱网比纯 RTMP 稳
- NV12 vs RGB 源格式:显示器捕获默认格式影响 CPU,卡顿时可换
延伸阅读
- OBS Wiki
- 官方文档
- nginx-rtmp-module —— 自建 RTMP 收流
- ffmpeg —— 录制后处理
- streamlink —— 观看端提取流
关联
- nginx-rtmp-module —— 推流目的地
- ffmpeg —— 转码 remux
- streamlink —— 拉流观看
- [[hls.js]] —— 观众浏览器播放
- [[video.js]] —— 网站嵌入播放器
- mediasoup —— 会议 SFU 另一路线
- shaka-player —— 点播 DRM 播放
- pion —— WebRTC 低延迟互补路线
- [[dash.js]] —— 网页播放下游
- flac —— 仅音频归档与直播无关但同属媒体制作链
- aubio —— 音频分析扩展
反向链接
- ant-media-server —— Ant Media Server — WebRTC / CMAF 直播服务
- aubio —— aubio — 实时音频事件检测库
- [[dash.js]] —— dash.js — 浏览器 MPEG-DASH 参考播放器
- dav1d —— dav1d — 速度优先的 AV1 解码器
- ffmpeg —— FFmpeg — 多媒体转码与封装瑞士军刀
- flac —— FLAC — 无损音频压缩格式与参考实现
- gstreamer —— GStreamer — 流水线式多媒体框架
- [[hls.js]] —— hls.js — 浏览器里播放 HLS 直播
- janus-gateway —— Janus WebRTC Gateway
- jellyfin —— Jellyfin — 自托管媒体服务器
- livekit —— LiveKit — 开源实时多媒体 SFU
- mediasoup —— mediasoup — WebRTC 选择性转发 SFU
- mlt —— MLT — 多媒体编辑框架
- nginx-rtmp-module —— nginx-rtmp-module — 用 nginx 搭 RTMP/HLS 直播服务
- opus —— Opus — 低延迟全频带音频编解码
- pion —— Pion — 纯 Go 实现的 WebRTC 协议栈
- salsify-2018 —— Salsify: Low-Latency Network Video Through Tighter Integration Between a Video Codec and a Transport Protocol
- scrcpy —— scrcpy — Android 屏幕镜像 / 录制
- shaka-player —— Shaka Player — Google 自适应流媒体播放器
- shotcut —— Shotcut — 基于 MLT 的开源非线性编辑器
- sox —— SoX — 命令行音频处理瑞士军刀
- streamlink —— Streamlink — 把网页直播流接到本地播放器
- [[video.js]] —— Video.js — Web 视频播放器框架
- x264 —— x264 — 开源 H.264/AVC 软件编码器