Quickblox 错误,远程/本地视频轨道未在 QBRTCSurfaceView 中呈现

Posted

技术标签:

【中文标题】Quickblox 错误,远程/本地视频轨道未在 QBRTCSurfaceView 中呈现【英文标题】:Quickblox error, & remote/local video track is not rendering in QBRTCSurfaceView 【发布时间】:2021-04-10 01:02:34 【问题描述】:

2021-03-06 17:56:41.069 2475-3124/com.example.app I/org.webrtc.Logging: E​​glRenderer: local_video_viewDropping 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 推送一个新的 Fragment (FragmentB) 时,会显示一个包含 QBRTCSurfaceView 的 BottomSheetDialogFragment (FragmentC); QBRTCSurfaceViews 不渲染本地(部分)或远程轨道,而是仅渲染 QBRTCSurfaceViews 的红色背景。但是底部的本地轨道正在渲染,但它只显示了部分渲染。

Local Track 手机是三星 SM-S111DL。 Remote Track Phone 是 Google Pixel 2。

Local Track 仅在具有主页和向上按钮的手机屏幕部分呈现(位于 MainActivity 之外,所以这很奇怪)。

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

如: MainActivity 显示 CallActivity->FirstFragment-> QBRTCSurfaceViews

目前我有: MainActivity -> 使用 nav_graph 的多个片段 -> 我推送一个包含 QBRTCSurfaceViews 的 BottomSheetDialogFragment

此外,音频工作 100% 正常,所有 Quickblox 回调都正确触发,只是渲染在本地被切断,远程渲染没有显示,我相信这是因为我的 QBRTCSurfaceViews 不在里面Activity 的第一个子片段,与 Quickblox 示例一样。

我检查了示例,示例应用程序不是单个活动应用程序。这意味着它在创建 android 应用程序时没有遵循最新推荐的最佳实践。如果我需要显示一个 CallingActivity,然后是一个 Fragment,然后将我的 QBRTCSurfaceViews 添加到该 Fragment,那很好,但文档并没有告诉用户这个限制。另外,QBRTCSurfaceViews 是否与 BottomSheetDialogFragment 一起工作? https://docs.quickblox.com/docs/android-video-calling

【问题讨论】:

【参考方案1】:

我找到了答案,如果您对 QBRTCSurfaceViews 有疑问,请检查 android SurfaceView 选项以根据您的设置进行配置https://developer.android.com/reference/android/view/SurfaceView

【讨论】:

以上是关于Quickblox 错误,远程/本地视频轨道未在 QBRTCSurfaceView 中呈现的主要内容,如果未能解决你的问题,请参考以下文章

Quickblox 使用 QBRTCRemoteVideoView 填充完整视频

如何在 Quickblox iOS 中从远程视频中捕获视频帧

Swift 3、iOS 10+、xCode 8.3+、Quickblox - 在保持纵横比/视频分辨率的同时切换全屏远程流

QuickBlox 示例视频聊天未经授权的错误

Android Quickblox 视频聊天错误

如何将过滤器附加到 QuickBlox 的 videoTrack?