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 は、繰り返しバックグラウンドに移行するまで正常に実行されます。その後、停止し、再び機能させる唯一の方法は、デバイスを再起動することです。