我正在开发视频通话(会议)应用程序,其中,我想根据用户音频级别交换视图,这意味着如果我在会议中总共有 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) ,
但是在添加此视图后,我的发布者视图显示为黑色,所以,我被困在这里,我根据音频级别获取视图并用订阅者替换视图,这里出了什么问题,如果有人在这里提供帮助,那么非常感谢。