Я занимаюсь разработкой приложения для видеовызовов (конференций), в котором я хочу поменять местами представление, основанное на уровне звука пользователя. Это означает, что если у меня всего 5 пользователей в конференции, то, кто когда-либо говорит, это должно быть в середине обзора , означает смену среднего вида на другой, основанный на более высоком уровне звука. (конференц-связь работает нормально, но у меня просто проблема с отображением подкачки)
Моя проблема:
В My xml, имеющем три строки,
Первая строка содержит три подписки представление
Вторая строка (средняя и большая) содержит представление издателя
Третья строка содержит два представления подписки.
Всего 5 подписчиков и один средний издатель.
Я установил представление подписки, как показано ниже:
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)
}
}
Я удаляю все представления издателя, а затем добавляю представление подписчика, как publisherView? .addView (subscriberInn.view), получаемый от подписчика setAudioLevelListener,
, но после добавления этого представления мое представление издателя отображается черным. Итак, я застрял здесь, я получаю представление и заменяю представление подписчиком на основе уровень звука, что здесь не так, если кто-то здесь поможет, то это очень ценится.