Не удается повторно использовать PeerConnectionClient после восстановления активности - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь правильно обрабатывать поворот экрана во время вызова WebRTC на Android.Но после первого поворота местный видео перевод прекратился.После создания (или воссоздания) актива я создаю SurfaceViewRenderers для локальных и удаленных представлений:

ourView.init(eglBase.eglBaseContext, null)
ourView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
ourView.setZOrderMediaOverlay(true)
ourView.setEnableHardwareScaler(true)
ourView.setMirror(true)


theirView.init(eglBase.eglBaseContext, null)
theirView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
theirView.setEnableHardwareScaler(false)
theirView.setMirror(true) 

localVideoSyncer.setTarget(ourView)
remoteVideoSyncer.setTarget(theirView)

После этого, если это соединение создается впервые, я инициализирую одноранговое соединение:

iceConnected = false
 val dataChannelParameters = CallUtils.createChannelParameters()
 peerConnectionParameters = CallUtils.createConnectionParameters(videoWidth, videoHeight, dataChannelParameters)
 if(appRTCClient == null) {
 appRTCClient = CallUtils.createAppRTCClient(roomId, this, info?.ice ?: emptyList())
 }
 roomConnectionParameters = CallUtils.createRoomConnectionParameters(info?.address, roomId)
 if(peerConnectionClient == null) {
 peerConnectionClient = PeerConnectionClient(
 applicationContext, eglBase, peerConnectionParameters, this)
 }
 val options = PeerConnectionFactory.Options()
 peerConnectionClient!!.createPeerConnectionFactory(options)
 if (appRTCClient == null) {
 NetworkLogger.log(TAG,"AppRTC client is not allocated for a call.")
 return
 }
 if(callStartedTimeMs == 0L)
 callStartedTimeMs = System.currentTimeMillis()

 appRTCClient!!.connectToRoom(roomConnectionParameters!!)

 if(audioManager == null)
 audioManager = AppRTCAudioManager(applicationContext)

Если активность воссоздается, PeerConnectionClient больше не может отправлять видео на удаленную цель.Я пытался переназначить localRender и videoCapturer, но это не имеет никакого эффекта.Можно ли повторно использовать существующее соединение после восстановления активности?

1 Ответ

0 голосов
/ 20 сентября 2018

Я думаю, что лучшее решение здесь - это поместить appRTCClient и связанные объекты вне деятельности и сделать их независимыми от жизненного цикла деятельности.Вы используете applicationContext, поэтому вы можете хранить его в некотором синглтоне, который зависит от жизненного цикла приложения.Другой способ - использовать фрагмент внутри вашей деятельности для отображения окон чата и вручную обрабатывать вращение внутри метода onConfigurationChanged, поэтому вам придется заменить фрагмент портрета на альбомный.

...