(packet_buffer.cc:101): Packet buffer flushed after reset media services

52 views
Skip to first unread message

Jeff Lu

unread,
Oct 2, 2023, 11:07:13 AM10/2/23
to discuss-webrtc
Hi Folks, 

I am working on project embedded WebRTC on our native iOS app to voice calling feature.
we are taking Peer 2 Peer connection integrated with iOS CallKit.

During call, user goes to iOS setting -> developer and simulate reset media service.
audio will become silent. 

After doing research: Looks like app need to reactivate audio session. 
I tried to reactivate audio session and RTCAudiosession, However, I received

(packet_buffer.cc:101): Packet buffer flushed


please share some experience how to handle media reset event on WebRTC?

my code:

final class RTCAudioSessionDelegateHandler: NSObject, RTCAudioSessionDelegate {

    

    override init() {

        super.init()

    }

    

    @objc

    public func audioSessionMediaServerReset(_ rtcAudioSession: RTCAudioSession) {

        NSLog("---Media Service--- \(#function) isMainThread \(Thread.isMainThread) 1" )

        let session = rtcAudioSession.session

        do {

            try session.setCategory(.playAndRecord, mode: .voiceChat, options: [.allowBluetooth, .allowBluetoothA2DP, .mixWithOthers])

            try session.setActive(true)

            

            adjustSessionCategoryForWebRTC()

            

            NSLog("---Media Service--- \(#function) isMainThread \(Thread.isMainThread) 2" )


            DispatchQueue.main.asyncAfter(deadline: .now() + 2) {

                RTCDispatcher.dispatchAsync(on: .typeAudioSession) {

                    RTCDispatcher.dispatchAsync(on: .typeAudioSession) {

                        if RTCAudioSession.sharedInstance().isAudioEnabled {

                            NSLog("---Media Service--- \(#function) isMainThread \(Thread.isMainThread) 3" )

                            RTCAudioSession.sharedInstance().audioSessionDidActivate(AVAudioSession.sharedInstance())

                        }

                    }

                }

            }


        } catch let e {

            NSLog("---Media Service--- \(#function) with error \(e.localizedDescription)")

        }

    }


    @objc

    public func audioSessionMediaServerTerminated(_ session: RTCAudioSession) {

        NSLog("---Media Service--- \(#function)")

    }


    @objc

    public func audioSessionMediaServicesWereLost(_ session: RTCAudioSession) {

        NSLog("---Media Service--- \(#function)")

    }

}



Thanks,

Reply all
Reply to author
Forward
0 new messages