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