2

我正在使用版本为“1.1.29400”的“GoogleWebRTC”吊舱。我一直面临关闭对等连接的问题。无论哪个线程试图关闭连接,都会永远卡在下面的行中。

self.peerConnection?.close()

所以我选择不关闭对等连接,而是手动销毁捕获器、轨道、渲染器、收发器并将引用设置为 nil。以为我解决了这个问题,但我没有。

现在开始面临“RTCPeerConnectionFactory”的问题。在从工厂生成一些对等连接后,从工厂请求新的 peerConnection 的线程永远卡住了。

这是我初始化工厂的方法,

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)

可能出了什么问题?

并行 peerConnections 的数量是否有限制?

对创建/操作/销毁 peerConnection 的线程类型是否有任何限制?

我应该设置对这些对象的同步访问吗?

4

1 回答 1

0

看来我不是一个人!

我设法在 2020 年自己解决了这个问题。离开 SO 有一段时间了,抱歉回答迟了。虽然我目前不在 WebRTC 上工作,但让我回忆一下并回答我的问题。希望它可以帮助某人或至少给出一个方向。

我发现打开的 peerConnections 的数量存在某种端口限制。这就是为什么从工厂请求新的 peerConnection 的线程在某个限制后卡住了。

我们必须使用peerConnection.close()API 正确关闭 peerConnections。

阻止我关闭 peerConnections 的根本问题是我正在从在 WebRTC 信令线程上运行的 peerConnection 的回调之一中关闭 peerConnection。这导致了僵局。

切换到 WebRTC 以外的线程以关闭连接似乎是解决方法。

于 2021-07-04T12:49:29.780 回答