我使用的是版本为"1.1.29400"的"GoogleWebRTC"pod。我在关闭对等连接时遇到了问题。无论哪一个线程试图关闭连接,都会永远被下面的行卡住。
self.peerConnection?.close()
因此,我选择不关闭对等连接,而是手动销毁捕获器、轨迹、渲染器、收发器,并将引用设置为零。我以为我解决了这个问题,但我没有。
现在开始面临"RTCPeerConnectionFactory"的问题。在从工厂生成一些对等连接后,从工厂请求新对等连接的线程将永远被卡住。
以下是我初始化工厂的方法,
static let factory: RTCPeerConnectionFactory = {
RTCInitializeSSL()
let videoEncoderFactory = RTCDefaultVideoEncoderFactory()
let videoDecoderFactory = RTCDefaultVideoDecoderFactory()
return RTCPeerConnectionFactory(encoderFactory: videoEncoderFactory, decoderFactory: videoDecoderFactory)
}()
以下是我如何初始化对等连接,
let config = RTCConfiguration()
config.iceServers = iceServers
config.sdpSemantics = .unifiedPlan
config.continualGatheringPolicy = .gatherOnce
config.iceTransportPolicy = iceTransportPolicy
let constraints = RTCMediaConstraints(mandatoryConstraints: nil, optionalConstraints: ["DtlsSrtpKeyAgreement": kRTCMediaConstraintsValueTrue])
let factory = WebRtcClient.factory
self.peerConnection = factory.peerConnection(with: config, constraints: constraints, delegate: nil)
可能出了什么问题?
并行对等连接的数量有限制吗?
创建/操作/销毁peerConnection的线程类型是否有任何限制?
我应该设置对这些对象的同步访问吗?
看来我并不孤单!
我设法在2020年解决了这个问题。离开SO有一段时间了,很抱歉回答晚了。虽然我目前没有在WebRTC上工作,但让我回忆并回答我的问题。希望它能帮助别人,或者至少能给人一个方向。
我发现打开的peerConnections的数量存在某种端口限制。这就是为什么从工厂请求新peerConnection的线程在某个限制后被卡住的原因。
我们必须使用peerConnection.close()
API正确关闭peerConnections。
阻止我关闭peerConnection的根本问题是,我正在通过在WebRTC信号线程上运行的peerConnection回调之一关闭peer连接。结果陷入僵局。
切换到WebRTC以外的线程以关闭连接似乎是解决方案