diff --git a/Sources/Media/IOMixer.swift b/Sources/Media/IOMixer.swift index f081a3f5b..8e6f1c8e2 100644 --- a/Sources/Media/IOMixer.swift +++ b/Sources/Media/IOMixer.swift @@ -19,6 +19,7 @@ protocol IOMixerDelegate: AnyObject { func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) #endif + func mixerSessionWillResume(_ mixer: IOMixer) } /// An object that mixies audio and video for streaming. @@ -323,6 +324,11 @@ extension IOMixer: Running { isRunning.mutate { $0 = session.isRunning } } + func startCaptureSession() { + session.startRunning() + isRunning.mutate { $0 = session.isRunning } + } + private func addSessionObservers(_ session: AVCaptureSession) { NotificationCenter.default.addObserver(self, selector: #selector(sessionRuntimeError(_:)), name: .AVCaptureSessionRuntimeError, object: session) #if os(iOS) @@ -438,8 +444,7 @@ extension IOMixer: Running { guard isRunning.value && !session.isRunning else { return } - session.startRunning() - isRunning.mutate { $0 = session.isRunning } + delegate?.mixerSessionWillResume(self) } } #else diff --git a/Sources/RTMP/RTMPStream.swift b/Sources/RTMP/RTMPStream.swift index 312a801ab..b657e3d62 100644 --- a/Sources/RTMP/RTMPStream.swift +++ b/Sources/RTMP/RTMPStream.swift @@ -650,6 +650,12 @@ extension RTMPStream: IOMixerDelegate { delegate?.stream(self, didOutput: audio, presentationTimeStamp: presentationTimeStamp) } + func mixerSessionWillResume(_ mixer: IOMixer) { + lockQueue.async { + mixer.startCaptureSession() + } + } + #if os(iOS) func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) { delegate?.stream(self, sessionWasInterrupted: session, reason: reason)