现场即兴编曲演唱直播技术的实现

前言

闲来无事, 打算开现场编曲直播, 这不, 记录生活的同时顺带完成了编曲写歌的活儿, 一举多得, 至于会不会翻车, 管他呢, 谁规定唱歌不能跑调了😁

主要还是因为比较懒, 不太喜欢挨个乐器录制剪辑, 这种一步到位的方式比较适合我😂

设备清单

  • 运行环境:macOS 10.15.4
  • 推流工具: OBS 29.01版本/抖音直播伴侣
  • 音频宿主:Reaper
  • 声卡: M-Audio M-Track Duo
  • 画面采集: 手机摄像头
  • 平台:抖音直播

关于虚拟声卡

由于M-Audio M-Track Duo声卡不带lookback通道, 也就是说OBS只能录制声卡输入的声音, 但无法录制乐器和人声混合的声音, 所以需要下载一个虚拟声卡做一个中转桥

当然了, 你如果使用高端声卡, 内置lookback, 可以跳过安装虚拟声卡这一步骤

Mac平台能用的免费虚拟声卡有:

  • VB-CABLE macOS 版
  • BlackHole 2ch: 直接使用brew install blackhole-2ch安装 或 GitHub下载 release pkg安装包
  • NNA Virtual Audio:支持 10.15 Catalina+,免费、可配通道数,Intel 通用
  • LitLink:macOS 14 Sonoma+
  • OBS 自带「macOS Audio Capture」: 要求OBS 30+ 版本且 macOS 13 Ventura+
  • Soundflower:: 10.15.4 基本加载不了

我的MacIntel的芯片, 系统也比较老, 能适配的只有VB-CABLEBlackHoleNNA Virtual Audio这三个, 秉着哪个能用用哪个的原则, 最后安装了VB-CABLE:

image-20260902205352039

VB-CABLE: 点击进入下载页面

声卡配置

虚拟声卡安装完毕后, 要对Mac系统、OBSReaper进行相应的设置

  1. OBS音频设置

    OBS → 来源 → 添加 音频输入采集→ 设备选 VB-CABLE → 高级音频属性里把它设推流音轨 1

    image-20260902214202583

    image-20260902214439596

    image-20260902214455445

    image-20260902214659015

    统一采样率为44.1KHZ:

    image-20260902213843926

    image-20260902215507113

  2. Mac系统音频设置

    前往→实用工具→音频MIDI设置→创建多输出设备:

    image-20260902215615268

    image-20260902215644568

    勾选使用VB-CableUSB AUDIO CODEC(这个是M-Audio声卡名称), 然后将USB AUDIO CODEC设为主设备, 并开启VB-Cable的漂移校正功能, 让其跟随主设备同步, 同时采样率也需要统一成44.1KHZ:

    image-20260902215846140

    我将该多输出设备重命名为LiveStrem, 以便于区分

    同时声音偏好设置中, 将输入设为选择为USB AUDIO CODEC, 输出设备选择为刚创建的LiveStrem:

    image-20260902223218571

    image-20260902223238281

  3. Reaper宿主音频设置

    进入Preferences→Audio→Device页面, 将输入设备选择为USB AUDIO CODEC, 输出设备选为LiveStrem, 并统一采样率为44.1kHz:

    image-20260902222334469

注意: 采样率要确保三端统一, 要么统一48kHz, 要么44.1kHz, 如果混用, 可能会出现音画不同步或者声音音高偏移的问题

声卡信号原理

为什么要做上面这些复杂的设置, 我们需要明白音频的信号流程, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
吉他 / 话筒 / MIDI键盘


M-Track Duo 输入 (Input 1/2, MIDI走USB不算声卡输入)


Reaper(各轨 → STREAM BUS → Master)


多输出设备 LiveStream-Mix(Reaper 输出指向它)
├─→ M-Track Duo Out → 你耳机(物理监听,零延迟)
└─→ VB-CABLE Out →(驱动内环回)→ VB-CABLE In → OBS 音频输入捕获 → 推流给观众

虽然OBS音频采集设置中可以选择USB AUDIO CODEC, 也就是外置的M-Audio声卡, 但实际捕获的是输入的声音, 假如你是单纯的直播聊天, 那完全没问题, 只需要将麦克风接到声卡, 观众就能听到你讲话.

但是我们的需求是: 人声不直接通过OBS出去, 而是先作为输入内容进入到Reaper宿主, 经过一系列的效果插件与乐器声音混合后在作为输出内容传到OBS, 进而传递给观众. 问题就出在这一步, OBS采集不到USB AUDIO CODEC的输出内容, 只能采集输入.

因此, 我们需要借助虚拟声卡, 将USB AUDIO CODEC的输出内容复制一份给VB-CABLE虚拟声卡, 然后以输入端的身份进入到OBS, 以此来骗过系统, 而多输出设备的目的就是保证输出信号复制的同时不影响原有USB AUDIO CODEC声卡的输入输出, 堪称完美👍

关于OBS智能采集输入信号的问题, 主要是Mac系统权限导致的, Windows平台不存在这种问题.

直播架构分析

整个直播从技术层面分为三个端。所有音频最终汇聚到声卡,由声卡统一送入 OBS;视频则由多个独立视频源在 OBS 内与音频对齐合成一路后推流。

端口 角色 在本方案中的具体载体
推流端 采集、编码、上传音视频 本地台式电脑:OBS(编码推流)+ Reaper(编曲混音)
中转端 接收、转码、复制、CDN 分发 抖音流媒体服务器 / 直播伴侣接入节点
播放端 拉流、解码、渲染画面 观众手机抖音 App(含拉流模块 + 播放器)

链路:吉他/贝斯/话筒/MIDI → 声卡 → Reaper(STREAM BUS) → 声卡 Loopback → OBS → 抖音服务器(中转) → CDN → 观众手机(播放)。


画面采集

关于人脸和背景画面的采集, 我直接使用手机自带的摄像头, 通过Wifi的形式与电脑OBS相连, 要确保两个设备在同一个网络下

这里需要借助一个桥接工具, 那就是Droidcam, 电脑和手机需要同时安装该应用

电脑端的话直接下载OBS专属的Droidcam插件即可, 由于我使用的是OBS29.01的版本, 所以我选择Droidcam2.02的适配版本:

image-20260904082824000

iShot_2026-09-03_22.25.53

而手机端, 直接去APP Store应用市场搜索下载安装即可

两端的Droidcam下载安装完毕后, 打开手机端的Droidcam获取IP地址和端口号:

feem_66886_IMG_0505

然后启动电脑端OBS, 添加DroidCam OBS采集:

image-20260904083900783

image-20260904083933584

在IP和端口一栏内填入手机端显示的IP和端口地址:

image-20260904084114652

image-20260904084147669

配置好后点击Activate激活按钮开启连接:

image-20260904084358707

此时我们就能在OBS上实时看到手机拍摄的画面了:

image-20260904084525005

关于音画同步的问题

由于音频和画面走的是两条不同的通道, 加上WIFI网络的不稳定性, 势必会存在延迟问题, 画面比声音晚到, 流程图如下:

1
2
3
音频:Reaper 混音 → VB-CABLE → OBS,延迟 ≈ 0ms

视频:手机 → USB/Wi-Fi → OBS,延迟 ≈ 80–250ms

假如视频比声音先到, 那么我们可以直接在OBS中给视频添加滤镜延迟, 让其晚一些播出去:

image-20260904085951505

image-20260904090043208

但问题是视频滤镜延迟时间只能填正数而填不了负数, 所以视频比音频晚的问题, 无法通过该方式解决

我们只能考虑将音频推迟, 好在OBS也支持音频时间的偏移设置, 因此, 只需要在高级音频设置中对音频同步偏移数值进行调整即可:

image-20260904092227902

image-20260904092307710

该属性支持正负数设置, 具体设置为多少, 根据自己的实际情况而定,在直播测试过程中进行调整观察从而获取自己满意的点

由于WIFI信号的波动性, 如果换成USB有线连接延迟会更低更稳定, 不过有条件的话最好使用电脑专用摄像头, 体验会更好, 手机毕竟多了一层Droidcam的中转, 这部分的延迟少不了

手机DroidCam USB 和电脑专用摄像头信号链路对比:

1
2
3
4
5
6
手机摄像头传感器
→ 手机 SoC 编码(H.264/MJPEG)
→ USB 隧道协议(ADB/usbmuxd)
→ Mac 端 USB 驱动
→ DroidCam OBS 插件解码
→ OBS 视频源

每一层都吃时间:编码约20–40msUSB 传输约 10–20ms,插件解码约10–20ms,合计 60–100ms起步。

1
2
3
4
摄像头传感器
→ UVC 标准协议(USB 视频类)
→ Mac 系统原生驱动(免驱)
→ OBS 视频源

UVC 设备把原始 YUV 帧直接通过 USB 推给系统,没有编码、没有隧道、没有插件解码,系统拿到就是能直接用的帧,合计 30–50ms

硬件接线

  • MIDI 键盘 → 电脑 USB(直接进主机,用于触发鼓、和弦音源)
  • 吉他、贝斯 → 声卡高阻输入(INST / HI-Z)
  • 话筒 → 声卡 XLR 输入(如为电容麦,打开 48V 幻象电源)
  • 耳机监听 → 声卡耳机孔(关键:必须硬件直出,绕过系统与 OBS,实现零延迟监听)
  • 手机(临时摄像头)→ 与电脑同一 WiFi,装 DroidCam / Iriun App;后期购入 USB 摄像头直接插电脑
  • 电脑 → 路由器 → 互联网(上传带宽建议 ≥ 10 Mbps,直播全程有线连接)
  • Mac 系统权限:首次使用需到「系统设置 → 隐私与安全性」中,给 OBS 开启「麦克风」「屏幕录制」「辅助功能」三项权限,否则 OBS 抓不到设备和桌面

信号流向

所有声音信号进入声卡后,由 Reaper 统一处理并混成一路干净的直播混音(STREAM BUS,再通过声卡Loopback或虚拟声卡交给 OBS。原则是:监听走声卡硬件,直播走 OBS,两者互不干扰

Reaper 编曲模板

需要给直播创建专用的工程模板, 每次开播直接调用

首先需要创建的基础轨道有:

在 Reaper 中建立专用工程模板(File → Project Templates → Save Project as Template)并保存,每次开播直接调用。核心是单独建立一条「STREAM BUS(直播母线)」,只把要送给观众的声音送进去。

轨道路径 承载信号 是否进 STREAM BUS
乐器轨(MIDI) MIDI 键盘 → 鼓音源 / 和弦音源
吉他轨(Audio) 声卡输入(吉他)→ 软效果器
贝斯轨(Audio) 声卡输入(贝斯)→ 效果器
话筒轨(Audio) 声卡输入(话筒)→ EQ / 压缩
节拍器 / 单听轨 排练、对点用 否(务必排除)
STREAM BUS(立体声) 上述四轨混合后的总和 只此一路送 OBS

image-20260904100811237

关于画中画布局

假设我们需要实现人脸(手机摄像头)作为主画面,Reaper 录屏小窗叠在人脸上方的画中画效果, OBS很容易能实现这一点, 只需要让Reaper窗口采集源和DroidCam OBS采集源同时存在即可:

image-20260904095250909

这两个都是独立视频源,谁在上层谁就盖住下层,直接在预览区拖动/缩放即可,无需额外软件。

层(从下到上) 来源 布局做法
底层(全屏) 手机摄像头(视频捕获设备) 铺满整个 1920×1080 画布,作为主画面
上层(画中画) 显示器捕获 / 窗口捕获(Reaper 界面) 拖到画面上方或下方,缩放到约 1/4–1/3 大小,作为编曲操作的小窗
最上层(可选) 文字 / 歌词 / 标题 放在画中画上方或下方,不遮挡操作区

image-20260904095533361

OBS 推流设置

项目 推荐值
画布分辨率 1920×1080;帧率 30 fps(编曲直播足够,60 fps 徒增显卡负担)
编码器 NVIDIA NVENC H.264(N 卡)/ AMD AMF(A 卡)
码率 700–8000 kbps(根据实际上传带宽而定)
关键帧间隔 2 秒
音频编码器 AAC,44.1kHz,192 kbps,CBR

开始直播

目前抖音和B站推流码有粉丝门槛, 既然如此, 那就先不播了, 等攒够粉丝再说, 嘿嘿罒ω罒

如果你有推流码, 那直接在OBS中设置页面的直播选项中填入即可, 服务器填直播地址, 推流码填直播密钥:

image-20260904102351975

image-20260904102247923

设置完后点击开始直播:

image-20260904103545236

右下方能看到绿色块同时有码率显示, 就说明推流成功:

image-20260904103702539

注意事项

如果你拿到的推流码是rtmp://push.example.com/live/abc123?txSecret=xxxx&txTime=yyyy这种格式的, 需要以最后一个斜杠作为分界线拆成两部分

带协议的rtmp://push.example.com/live/这部分填入服务器一栏, 后边的abc123?txSecret=xxxx&txTime=yyyy部分填入推流码一栏

OBS在推流时会自动将服务器和串流密钥内容拼接起来发出去,等价于原完整地址

分阶段落地路线表

阶段 动作 目标
阶段 1:通链 接好声卡/吉他/话筒/MIDI,Reaper 出声并听到监听(监听开关设 USB) 能弹奏演唱,自己听着不延迟
阶段 2:路由 建 STREAM BUS + 多输出设备(VB-CABLE),OBS 捕获到干净混音 OBS 音频混音器只有直播声、无系统杂音
阶段 3:视频 加入手机摄像头 + 录屏(窗口捕获) 人脸、编曲界面两个画面源齐备
阶段 4:画中画 录屏小窗叠在人脸上方,源排序、缩放到位 布局成型,可随时换 USB 摄像头
阶段 5:同步 拍手录屏测延迟,给各视频源分别加补偿滤镜 音画对齐
阶段 6:试推 先本地录制核验,再填 RTMP 试推小范围 无爆音、无漂移
阶段 7:上线 正式开播,关注电平、延迟、网络 稳定直播(如需可常驻)

常见问题与红线清单

  • 节拍器进了直播间 → STREAM BUS 路由排查,排练信号不要送观众。
  • 桌面音频没关,观众听到微信提示 → 禁用 OBS 桌面音频捕获。
  • 嘴型对不上 → 给摄像头加视频延迟滤镜,只延视频。
  • 越播越漂移 → 检查四处采样率是否统一为 48kHz。
  • 中途切场景导致断流 → 不要动音频源,只切换画面层。
  • 合规提醒:抖音对纯录播/无人挂机治理严格;本方案为真人实时编曲弹唱,属合规边内,仍建议有人值守、及时互动。

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%