Как правильно закрыть WebRT C peerConnection в iOS? - PullRequest
1 голос
/ 16 апреля 2020

Я использую модуль 'GoogleWebRT C' с версией '1.1.29400'. Я столкнулся с проблемами при закрытии одноранговых соединений. Какой бы поток не пытался закрыть соединение, он застревает со следующей строкой навсегда.

self.peerConnection?.close()

Поэтому я решил не закрывать одноранговое соединение, вместо этого я вручную уничтожил устройство захвата, треки, средства визуализации, трансиверы и установил ссылку до нуля Я думал, что решил проблему, но не сделал.

Теперь у меня возникли проблемы с 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)

Что могло пойти не так?

Существуют ли ограничения на количество параллельных одноранговых соединений?

Существуют ли ограничения на типы потоки, которые создают / манипулируют / уничтожают peerConnection?

Должен ли я установить синхронный доступ к этим объектам?

...