背景
当前录制的音源是 Mac 麦克风(RecordingService 用 AVAudioRecorder)。但本工具是投屏录制工具,录制意义是留存设备屏幕上发生了什么。有意义的音源应是设备本身的声音(App 音效、视频、通话),而非麦克风采到的房间环境音。
更糟:设备音频正通过 Mac 扬声器外放,麦克风又把外放录回去 → 回声 + 环境噪音,对回看测试无价值。
现状:设备音频已在管线中,仅用于播放未落盘
- iOS(
IOSDeviceSource.handleAudioSampleBuffer):拿到设备音频 CMSampleBuffer,现仅喂 AudioPlayer 播放。CMSampleBuffer 是 AVAssetWriter 标准输入,接 writer 即可落盘。
- Android(
ScrcpyDeviceSource opusDecoder.onDecodedAudio):拿到解码后 PCM,现仅推播放器。同一路 PCM 分流做 AAC 编码即可写文件。
方案(已与维护者确认)
待确认 / 待验证
- iOS
CMSampleBuffer 音频是否始终可得(ReplayKit/CoreMediaIO 采集路径与授权),需实测。
- 多设备同时录:每设备一条音轨(契合现有
iOS-xxx/、Android-xxx/ 目录),还是混一路。
- 回放端多音轨/音轨选择的 UI 与
ReplayClock 适配。
相关
背景
当前录制的音源是 Mac 麦克风(
RecordingService用AVAudioRecorder)。但本工具是投屏录制工具,录制意义是留存设备屏幕上发生了什么。有意义的音源应是设备本身的声音(App 音效、视频、通话),而非麦克风采到的房间环境音。更糟:设备音频正通过 Mac 扬声器外放,麦克风又把外放录回去 → 回声 + 环境噪音,对回看测试无价值。
现状:设备音频已在管线中,仅用于播放未落盘
IOSDeviceSource.handleAudioSampleBuffer):拿到设备音频CMSampleBuffer,现仅喂AudioPlayer播放。CMSampleBuffer是AVAssetWriter标准输入,接 writer 即可落盘。ScrcpyDeviceSourceopusDecoder.onDecodedAudio):拿到解码后 PCM,现仅推播放器。同一路 PCM 分流做 AAC 编码即可写文件。方案(已与维护者确认)
RecordingSession.audioURL?、ReplayClock抽象(无音频用VirtualReplayClock)—— 音源换成设备音频后直接复用。待确认 / 待验证
CMSampleBuffer音频是否始终可得(ReplayKit/CoreMediaIO 采集路径与授权),需实测。iOS-xxx/、Android-xxx/目录),还是混一路。ReplayClock适配。相关