Я использую модуль '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?
Должен ли я установить синхронный доступ к этим объектам?