我正在尝试使用 ReplayKit 在我的应用程序中创建直播。基本上我想分享我的屏幕并查看其他用户的屏幕。
为了获得缓冲区,ReplayKit 提供了下一个函数:
func startCapture(handler captureHandler: ((CMSampleBuffer, RPSampleBufferType, Error?) -> Void)?, completionHandler: ((Error?) -> Void)? = nil)
所以这是我启动 ReplayKit 并获取缓冲区的方法:
private func startRecording() {
RPScreenRecorder.shared().startCapture(handler: { (sampleBuffer, bufferType, error) in
switch bufferType {
case RPSampleBufferType.video:
// Handle buffer and send it to server
break
case RPSampleBufferType.audioApp:
break
case RPSampleBufferType.audioMic:
break
}
}, completionHandler: nil)
}
这很有效,但我面临下一个问题;如果屏幕不断变化,比如一个闪烁的按钮,当我将应用程序发送到后台并返回几次时,ReplayKit 会停止调用其捕获处理程序。
可能问题是这个功能startCapture
是为了在有限的时间内录屏,而不是为了直播。
我在 Github 中做了一个示例,带有一个闪烁的按钮,显示了我遇到的问题;ReplayKit 正常运行,直到反复进入后台;然后它停止,让它再次工作的唯一方法是重新启动设备。