1

我正在开发视频通话(会议)应用程序,其中,我想根据用户音频级别交换视图,这意味着如果我在会议中总共有 5 个用户,那么谁在说话,需要在视图中间,意味着中间根据更高的音频级别与其他视图交换视图。(电话会议工作正常,但我只是交换视图问题)

我的问题是,

在我的三行 xml 中,

第一行包含三个订阅视图

第二行(中间和大)包含发布者视图

第三行包含两个订阅视图。

表示总共 5 个订阅者和 1 个中间发布者。

我将订阅视图设置如下:

    val container = findFirstEmptyContainer()
    if (container == null) {
        Toast.showLongToast(context, "New subscriber ignored. MAX_NUM_SUBSCRIBERS limit reached.")
        return
    }

    container.subscriber = subscriber
    container.container.addView(subscriber.view)
    container.txtName.text = name
    subscriber.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)

findFirstEmptyContainer() 方法用于填充 5 个视图中的任何空视图。目前我正在按空视图的顺序添加视图。

对于出版商,

     mPublisher = Publisher.Builder(this@VideoChatActivity).name(Prefs.getString(context, PrefsKey.BASIC_INFO_FIRST_NAME, "")).build()
     mPublisher?.setPublisherListener(this@VideoChatActivity)
     mPublisher?.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
     publisherView?.addView(mPublisher?.view)
     mSession?.publish(mPublisher)

现在,我添加了发布者和订阅者的 setAudioLevelListener,如下所示,

    mPublisher?.setAudioLevelListener(object : PublisherKit.AudioLevelListener {
            override fun onAudioLevelUpdated(p0: PublisherKit?, p1: Float) {

                publisherAudioLevel = p1.toDouble()

            }
        })

和,

    subscriber.setAudioLevelListener(object : SubscriberKit.AudioLevelListener {
        override fun onAudioLevelUpdated(p0: SubscriberKit?, p1: Float) {

            subscriberAudioLevel = p1.toDouble()
            subscriberViewShow = p0!!.stream    ( Adding stream of subscriber )
        }

    })

现在,我正在比较订阅者和发布者的音频级别,如下所示,

   if (subscriberViewShow != null) {
         if (subscriberAudioLevel > publisherAudioLevel) {
                val subscriberInn = Subscriber.Builder(this@VideoChatActivity, subscriberViewShow).build()

                publisherView.removeAllViews()
                publisherView?.addView(subscriberInn.view)
                mSession?.publish(mPublisher)
            }
        }

我要删除所有发布者视图,然后添加从订阅者 setAudioLevelListener 获取的订阅者视图,例如 publisherView?.addView(subscriberInn.view) ,

但是在添加此视图后,我的发布者视图显示为黑色,所以,我被困在这里,我根据音频级别获取视图并用订阅者替换视图,这里出了什么问题,如果有人在这里提供帮助,那么非常感谢。

4

0 回答 0