我正在尝试使用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
功能是在有限的时间内录制屏幕的,而不是在现场直播的。
I have made an example in Github,带有闪烁的按钮,显示我所遇到的问题; ReplayKit正常运行,直到反复进入后台为止。然后它停止,并且使它再次起作用的唯一方法是重新启动设备。