ReplayKit прекращает буферизацию после повторного перехода к фону
Я пытаюсь использовать 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 работает в обычном режиме до тех пор, пока не появится фон; затем он останавливается, и единственный способ заставить его работать снова - это перезагрузить устройство.