取代 #17。#17 把主/次音轨弄反了(主张设备音频作主轨),本 issue 为方向修正后的版本。
定位
本工具录制的核心音源是麦克风(讲解 / 口述 / QA 旁白),这也是当前 RecordingService(AVAudioRecorder + 麦克风)已实现并随 PR #16 发布的行为,不改。
本 issue 只做一件增量的事:在麦克风主音轨之外,新增一条可选的「设备音频」第二音轨(App 音效 / 视频 / 通话声),默认关闭,由用户在偏好里单独开启。用于需要同时留存设备原声的场景。
- 麦克风:主音轨,默认开,核心。
- 设备音频:可选第二音轨,默认关。
现状:设备音频已在管线中,仅用于播放未落盘
- iOS(
IOSDeviceSource.handleAudioSampleBuffer):已拿到设备音频 CMSampleBuffer,现仅喂 AudioPlayer 播放。CMSampleBuffer 是 AVAssetWriter 标准输入,接 writer 即可落盘。
- Android(
ScrcpyDeviceSource opusDecoder.onDecodedAudio):已拿到解码后 PCM,现仅推播放器。同一路 PCM 分流做 AAC 编码即可写文件。
地基(PR #16 / #10 已就绪)
- 音频可选化、
RecordingSession.audioURL?、ReplayClock 抽象(无音频用 VirtualReplayClock)。
- 偏好已有「投屏录制」分页与麦克风开关,可平行加"录制设备音频"开关。
待确认 / 待验证
- 多音轨落盘形态:麦克风与设备音频各存一个文件,还是合成多轨容器。回放端需能区分/选择。
- iOS
CMSampleBuffer 音频是否始终可得(ReplayKit / CoreMediaIO 采集路径与授权),需实测。
- 多设备同时录:设备音频每设备一条(契合现有
iOS-xxx/、Android-xxx/ 目录)还是混一路。
- 回放端多音轨的 UI 与
ReplayClock 适配(音轨选择 / 混音)。
- 外放回声:设备音频经扬声器外放时,麦克风会录进外放声。是否需提示用户用耳机,或仅在开启设备音轨时告警。
相关
定位
本工具录制的核心音源是麦克风(讲解 / 口述 / QA 旁白),这也是当前
RecordingService(AVAudioRecorder+ 麦克风)已实现并随 PR #16 发布的行为,不改。本 issue 只做一件增量的事:在麦克风主音轨之外,新增一条可选的「设备音频」第二音轨(App 音效 / 视频 / 通话声),默认关闭,由用户在偏好里单独开启。用于需要同时留存设备原声的场景。
现状:设备音频已在管线中,仅用于播放未落盘
IOSDeviceSource.handleAudioSampleBuffer):已拿到设备音频CMSampleBuffer,现仅喂AudioPlayer播放。CMSampleBuffer是AVAssetWriter标准输入,接 writer 即可落盘。ScrcpyDeviceSourceopusDecoder.onDecodedAudio):已拿到解码后 PCM,现仅推播放器。同一路 PCM 分流做 AAC 编码即可写文件。地基(PR #16 / #10 已就绪)
RecordingSession.audioURL?、ReplayClock抽象(无音频用VirtualReplayClock)。待确认 / 待验证
CMSampleBuffer音频是否始终可得(ReplayKit / CoreMediaIO 采集路径与授权),需实测。iOS-xxx/、Android-xxx/目录)还是混一路。ReplayClock适配(音轨选择 / 混音)。相关