Android Quickblox错误,&;未在QBRTCSurfaceView中渲染远程/本地视频曲目

Android Quickblox错误,&;未在QBRTCSurfaceView中渲染远程/本地视频曲目,android,kotlin,quickblox,Android,Kotlin,Quickblox,2021-03-06 17:56:41.069 2475-3124/com.example.app I/org.webrtc.Logging:EglRenderer:local\u video\u viewDroping frame-无表面 这就是我遇到的错误/警告。并且远程/本地视频轨迹未在QBRTCSurfaceView中渲染 fun onCreateView() { .... binding?.remoteVideoView?.init(QBRTCClient.getInstance(r

2021-03-06 17:56:41.069 2475-3124/com.example.app I/org.webrtc.Logging:EglRenderer:local\u video\u viewDroping frame-无表面

这就是我遇到的错误/警告。并且远程/本地视频轨迹未在QBRTCSurfaceView中渲染

fun onCreateView() {
 ....
binding?.remoteVideoView?.init(QBRTCClient.getInstance(requireContext()).eglContext.eglBaseContext, null)
    binding?.remoteVideoView?.setZOrderMediaOverlay(true)

binding?.localVideoView?.init(QBRTCClient.getInstance(requireContext()).eglContext.eglBaseContext, null)
    binding?.localVideoView?.setZOrderMediaOverlay(true)
 return binding?.root
}

//region QBRTCClientVideoTracksCallbacks
    override fun onLocalVideoTrackReceive(qbrtcSession: QBRTCSession?, videoTrack: QBRTCVideoTrack) {
        localVideoTrack = videoTrack
        localVideoTrack?.let {
            binding?.localVideoView?.let { v ->
                fillVideoView(v, videoTrack)

            }
        }
    }

    override fun onRemoteVideoTrackReceive(session: QBRTCSession?, videoTrack: QBRTCVideoTrack, userID: Int?) {
        remoteVideoTrack = videoTrack
        binding?.remoteVideoView?.let { v ->
            fillVideoView(v, videoTrack)
        }
    }

    private fun fillVideoView(videoView: QBRTCSurfaceView?, videoTrack: QBRTCVideoTrack) {
        videoTrack.cleanUp()
        if (videoView != null) {
            videoTrack.addRenderer(videoView)
            updateVideoView(videoView)
        }
    }

    private fun updateVideoView(videoView: SurfaceViewRenderer) {
        val scalingType = RendererCommon.ScalingType.SCALE_ASPECT_FILL
        videoView.setScalingType(scalingType)
        videoView.setMirror(false)
        videoView.requestLayout()
    }

以下是关于我的问题的更新:

那么,QBRTCSurfaceViews是否可以在单个活动应用程序中工作,在类型为“BottomSheetDialogFragment”的片段中

我有一个带有MainFragment的单一活动应用程序,当我使用NavDirections推送一个新片段(FragmentB)时,会显示一个BottomSheetDialogFragment(FragmentC),其中包含QBRTCSurfaceView;QBRTCsurfaceview不渲染本地(部分)或远程轨迹,而仅渲染QBRTCsurfaceview的红色背景。但是局部轨迹的底部正在渲染,但它只显示渲染的一部分

本地轨道电话是三星SM-S111DL。 远程跟踪电话是谷歌像素2

本地曲目仅在手机屏幕上具有home&up按钮的部分进行渲染(该按钮位于Main活动之外,因此这很奇怪)

这是否意味着我必须在活动的第一个子片段内显示QBRTCSurfaceView

例如: MainActivity以显示CallActivity->FirstFragment->QBRTCsurface视图

目前我有: MainActivity->Multiple Fragment using nav_graph->i push一个包含QBRTCsurfaceView的BottomSheetDialogFragment

此外,音频工作100%正常,所有Quickblox回调都正确启动,只是本地渲染被切断,远程渲染没有显示,我相信这是因为我的QBRTCsurfaceView不在活动的第一个子片段内,就像Quickblox示例一样


我检查了示例,示例应用程序不是单个活动应用程序。这意味着它在创建android应用程序时没有遵循最新推荐的最佳实践。如果我需要显示一个CallingActivity,然后是一个片段,然后将我的QBRTCsurfaceView添加到该片段中,这很好,但是文档没有告诉用户这个限制。另外,QBRTCsurfaceview是否与BottomSheetDialogFragment一起工作

我找到了我的答案,如果您对QBRTCsurfaceView有问题,请检查android SurfaceView选项,以便根据您的设置进行配置