#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.