You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Xcode中如何从RPSystemBroadcastPicker获取录屏CMSampleBuffer

录屏获取CMSampleBuffer解决方案

RPSystemBroadcastPickerView本身仅作为系统录屏功能的触发入口控件,不提供录屏数据流的回调能力,你需要配合Broadcast Upload Extension实现CMSampleBuffer的获取,具体实现步骤如下:

1. 新建Broadcast Upload Extension扩展

  • 打开Xcode主项目配置页,点击Targets列表左下角的+按钮,选择Broadcast Upload Extension模板创建新的扩展Target,不需要自定义录屏UI的话不要勾选「Include UI Extension」选项
  • 创建完成后系统会自动生成SampleHandler.swift文件,该类为接收录屏数据流的核心类

2. 实现SampleHandler回调获取CMSampleBuffer

SampleHandler继承自RPBroadcastSampleHandler,录屏启动后系统会通过该类的对应方法回调音视频帧数据,你可以在回调中直接获取CMSampleBuffer:

import ReplayKit

class SampleHandler: RPBroadcastSampleHandler {
    override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
        // 录屏启动后的初始化逻辑
    }
    
    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
        switch sampleBufferType {
        case .video:
            // 此处即可获取到视频帧对应的CMSampleBuffer
        case .audioApp:
            // 应用内产生的音频帧CMSampleBuffer
            break
        case .audioMic:
            // 麦克风录入的音频帧CMSampleBuffer
            break
        @unknown default:
            break
        }
    }
    
    override func broadcastFinished() {
        // 录屏结束后的清理逻辑
    }
    
    override func broadcastAnnotated(withError error: Error) {
        // 录屏异常报错处理
    }
}

3. 实现扩展与主App的跨进程数据传输

Broadcast Upload Extension是独立运行的进程,和主App不共享内存空间,你拿到的CMSampleBuffer无法直接传递给主App,需要通过跨进程通信方案传输:

  • 优先使用CFMessagePort或App Group共享内存实现低延迟数据传输
  • CMSampleBuffer无法直接序列化传递,建议先将CMSampleBuffer编码为H.264/HEVC裸流数据后再传递给主App,主App解码后即可使用

4. 配置RPSystemBroadcastPickerView指定扩展

为了避免用户点击录屏按钮后手动选择扩展,你可以给RPSystemBroadcastPickerView指定你创建的扩展的Bundle ID:

// 替换为你自己创建的Broadcast Upload Extension的Bundle ID
picker.preferredExtension = "com.your.own.app.broadcast.extension"

注意事项

  • 主App和Broadcast Upload Extension都需要开启App Groups能力,且配置同一个Group ID用于跨进程通信
  • 该方案仅支持iOS 12及以上系统
  • 录屏的原始帧率、分辨率由系统控制,你可以在拿到CMSampleBuffer后自行做裁剪、缩放等二次处理

内容的提问来源于stack exchange,提问作者Oscar Junius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:04