Android Tokbox Обмен видео в зависимости от уровня звука пользователя - PullRequest
1 голос
/ 24 января 2020

Я занимаюсь разработкой приложения для видеовызовов (конференций), в котором я хочу поменять местами представление, основанное на уровне звука пользователя. Это означает, что если у меня всего 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,

, но после добавления этого представления мое представление издателя отображается черным. Итак, я застрял здесь, я получаю представление и заменяю представление подписчиком на основе уровень звука, что здесь не так, если кто-то здесь поможет, то это очень ценится.

...