как приостановить и отменить передачу видео с помощью Android Pjsua 2?

#java #android #sip #pjsip #pjsua2

#java #Android #sip #pjsip #pjsua 2

Вопрос:

Я хочу приостановить и отменить передачу видео при видеовызове на лету, не прерывая аудиовызов, используя библиотеку Android Pjsua 2. Но я не могу понять, как реализовать эту функцию для примера приложения Android pjsua 2. Любая помощь была бы высоко оценена.

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

перечисление pjsua_call_vid_strm_op Это перечисление представляет операцию видеопотока при вызове.

PJSUA_CALL_VID_STRM_START_TRANSMIT Начать передачу видеопотока. Это приведет к тому, что ранее остановленный поток снова начнет передачу. Обратите внимание, что повторное ПРИГЛАШЕНИЕ / ОБНОВЛЕНИЕ не должно передаваться на удаленный, поскольку эта операция выполняется только в локальном потоке.

PJSUA_CALL_VID_STRM_STOP_TRANSMIT Прекращает передачу видеопотока. Это приведет к приостановке потока в направлении передачи данных, в результате чего он прекратит отправку любых видеопакетов. Повторное ПРИГЛАШЕНИЕ / ОБНОВЛЕНИЕ не должно передаваться на удаленный с помощью этой операции.

ссылка на документацию

Ответ №1:

Рассмотрим этот код:

 fun strmStopTransmit() {
    if (manager.isCaptureActive(camDevId)) {
        val callVidPrm = CallVidSetStreamParam()
        callVidPrm.setCapDev(camDevId)
        call.vidSetStream(pjsua_call_vid_strm_op.PJSUA_CALL_VID_STRM_STOP_TRANSMIT, callVidPrm)
    }
}
  

Где manager находится экземпляр pj::VidDevManager (ссылка) (вы можете получить его из pj::Endpoint (ссылка)) и call является экземпляром pj::Call (ссылка).

Реализация обратной функции (возобновление передачи) очевидна.

Удачи!

Комментарии:

1. Привет, Daszuone, как я могу получить идентификатор устройства камеры — в вашем случае camDevId

2. VidDevManager имеет функцию getDevInfo. Вы можете перебирать все камеры (например. в цикле for 0, чтобы получить devcount из диспетчера) и захватить идентификаторы нужных вам устройств.

3. не могли бы вы привести пример кода для получения идентификатора устройства. getDevCount() выдает только номер устройства, а getDefInfo требует идентификатор устройства .. ?

Ответ №2:

Этот документ слишком длинный и неправильный. Я столкнулся с той же проблемой.

Вам может помочь следующее:

 SipManager.getInstance()?.activeCalls?.get(callId)?.mVideoPreview?.stop()
  

Здесь activeCalls является экземпляром MyCall.