F7d14bcce10a904c77ee20588b2003ec
WWDC20 10633 - 在 Mac 上使用 ReplayKit 录制屏幕内容

本文基于 Session 10633 - Capture and Stream Apps on the Mac with ReplayKit

概览

ReplayKit 是苹果在 2015 年推出的屏幕录制框架,开发者可通过 ReplayKit 将屏幕的内容、App 声音及麦克风声音录制到指定的视频文件中,并且可以捕获相应的流数据,同时 ReplayKit 支持这些内容广播到第三方服务。ReplayKit 最初于 2015年推出了 iOS 版,2016 年推出 tvOS 版,在 2020 年 ReplayKit 也支持 MacOS 系统。

ReplayKit 能力


ReplayKit 主要提供三种能力:屏幕录制、屏幕捕获及屏幕广播。

屏幕录制

屏幕录制支持以下功能:

  • 录制 App 内容和 App 声音
  • 录制麦克风声音
  • 保存、修改、分享录制完的文件

开发者通过 RPScreenRecorder 单例的 startRecording 方法开启屏幕录制,开启录制后系统会将屏幕的内容、App 声音及麦克风输入的声音录制到同一个文件。结束录制后系统提供了一个录制结果预览的 RPPreviewViewController ,通过这个 ViewController ,用户可以对录制的视频进行保存、编辑及分享。

开启录制

func startRecording() {
    RPScreenRecorder.shared().startRecording { error in
        if error == nil {
            // do somethings
        } else {
            // Print the error.
            print("Error starting recording")
        }
    }
}

结束录制

func stopRecording() {
   RPScreenRecorder.shared().stopRecording { previewViewController, error in
        if error == nil {
            // do somethings
        } else {
           print("Error starting recording")
       }
   }
}

结束录制后系统通过回调提供了 previewViewController,present 该 ViewController 后可以在该页面对视频进行保存、编辑和分享。

屏幕捕获


相比于屏幕录制将音视频数据写入到文件中,屏幕捕获能力能让开发者很方便的拿到屏幕录制的音视频流,通过这些原始数据流,开发者可以做很多事,比如将数据流推到 CDN 服务器,实现录屏直播。

开始捕获
```
func startCapture() {
RPScreenRecorder.shared().startCapture { sampleBuffer, sampleBufferType, error in
switch sampleBufferType {
case .video:
self.processAppVideoSample(sampleBuffer: sampleBuffer)
case .audioApp:
self.processAppAudioSample(sampleBuffer: sampleBuffer)
case .audioMic:
self.processAppMicSample(sampleBuffer: sampleBuffer)
default:
print("Unable to process sample buffer")

top Created with Sketch.