Помощь в реализации видеосвязи на Android

crtv

New Member
Добрый день!

Пытаемся реализовать видео/аудиозвонки в приложении под андроид (kotlin), но столкнулись с некоторыми трудностями в процессе.

Ищем человека, который мог бы помочь нам с реализацией данного функционала или хотя бы проконсультировать (за оплату, естественно)
 

Max

Administrator
Staff member
Здравствуйте.

У нас в Google Play есть мини-приложения, которые используются в качестве примеров.


Первое, что вы можете сделать, это взять приложение, которое подходит для вашего кейса и протестировать это приложение с нашим demo-сервером wss://demo.flashphoner.com:8443

Для тестирования видео/аудио звонков могут подойти приложения:
- VideoChat
- PhoneVideo (для тестирования требуется SIP шлюз с поддержкой видео)
- Two Way Streaming максимально упрощенный и кастомизируемый видеочат.

Если приложение в ваших тестах работает корректно, то далее можно изучить его исходный код, понять как работает API и интегрировать в ваше приложение на kotlin.

Описание исходного кода и особенностей интеграции находится здесь: https://docs.flashphoner.com/pages/viewpage.action?pageId=9240855

Т.е.

1. Тестируем минимальное приложение.
2. Интегрируемся через API.

При возникновении вопросов, просто задайте их в этой теме.
 

crtv

New Member
При понижении Connection quality с PERFECT до BAD, у playStream регулировать VideoConstraints (minBitrate, maxBitrate и videoFps)? Или надо передать информацию публикующему, чтобы он скорректировал VideoConstraints (minBitrate, maxBitrate и videoFps) в своем publishStream?
на сколько и как корректировать minBitrate, maxBitrate и videoFps в этих случаях?

PS: делаем звонок по примеру Two Way Streaming
 

Max

Administrator
Staff member
Самое простое - это остановить Play поток и проиграть его заново с пониженным разрешением.

>регулировать VideoConstraints (minBitrate, maxBitrate и videoFps)?
Достаточно задать width и height - это снизит битрейт и нагрузку на канал плеера.
 

crtv

New Member
Подскажите, мы сейчас при создании видео звонков один-на-один столкнулись с проблемой большой нагрузки на сервер. Обязательно ли должна выполняться обработка видео на сервере именно для звонков один-на-один или мы что-то не так делаем? Пользуемся примером Two Way Streaming
 

crtv

New Member
Для звонков один-на-один можно как-то сделать, что бы трафик вообще не ходил через WCS, а шел напрямую peer-to-peer?
 

Max

Administrator
Staff member
Подскажите, мы сейчас при создании видео звонков один-на-один столкнулись с проблемой большой нагрузки на сервер. Обязательно ли должна выполняться обработка видео на сервере именно для звонков один-на-один или мы что-то не так делаем? Пользуемся примером Two Way Streaming
Для звонков один-на-один можно как-то сделать, что бы трафик вообще не ходил через WCS, а шел напрямую peer-to-peer?
Архитектура WCS предполагает, что медиатрафик идет через сервер. Это позволяет раздать один поток большому числу подписчиков (например, если вебинар смотрят значительно больше зрителей, чем участвует в звонке), или записывать звонок на сервере (потребуется микшер).
В данном случае. если Вы публикуете поток с Android, скорее всего публикуется VP8 кодек. Если при этом пытаться играть поток, как H264, на сервере включится транскодинг. Также транскодинг включается, если Вы явно указываете разрешение для проигрывания.
Пожалуйста, убедитесь, что нагрузка на сервер растет при использовании примера streaming-min-release.apk из архива сборки 1.1.0.57 (для скачивания из РФ может потребоваться VPN). Если проблема не воспроизводится, модифицируйте код примера таким образом, чтобы проблема начала воспроизводиться, и пришлите код, используя эту форму.
Другой вариант: воспроизведите проблему и соберите отчет на стороне сервера, как описано здесь, а затем пришлите, используя эту форму. Если размер файла архива превышает 30 Мб, разместите его в облаке и пришлите ссылку (укажите ее в поле Comment формы).
 

crtv

New Member
Столкнулись с ещё одной проблемой, при видео звонках появились сильные рывки и тормоза на видео. Подскажите, с чем это может быть связано и в какую сторону капать? Пробовали использовать и наш сервер и ваш demo, видео тормозит и там и там, так же игрались с битрейтом и разрешением видео, тормоза не пропадают. Тестируем звонки на двух телефонах Samsung A51
 

Max

Administrator
Staff member
Воспроизводится ли проблема в приложении streaming-min-debug.apk из архива сборки 1.1.0.57? Если да, то проверьте метрики публикации, а именно VIDEO_FPS, VIDEO_NACK, VIDEO_LOST. Если последние два счетчика растут, это говорит о потерях на канале, и необходимо переключаться на TCP транспорт, чтобы исключить потери. Если счетчики не растут, но FPS низкий, попробуйте явно установить FPS для публикации при помощи метода VideoConstraints.setVideoFps(). Пример работы с констрейнтами приведен в Media Devices.
 

crtv

New Member
Добрый день! Похоже дело было в видео кодеке - тестировал звонки на вашем сервере (demo.flashphoner.com) через приложение "Media Devices", на телефоне Samsung A51.

Проблема появляется при передаче видео с использованием кодека H264. Видео сильно тормозит (как будто FPS 3-5). При использовании VP8 всё отлично.

Далее,

На своем сервере для тестов временно установил допустимые кодеки
Code:
codecs=opus,vp8
и тормоза при звонках через наше приложение пропали.

Вопросы:

1. Можно что-то сделать сделать, что бы h264 работал без тормозов?
2. Как нам в приложении определить какой кодек выставлять? Может есть какая-то таблица рекомендуемых кодеков для различных устройств? :)

Спасибо!

PS: FPS явно указывал в приложении, не помогает
 
Last edited:

crtv

New Member
В общем понаблюдал ещё за метриками публикации. При публикации через H264 FPS низкий - 3-8 (иногда прыгает до 25-30 и сразу падает), при работе через VP8 высокий, 20-30, но иногда просаживается до 3-8 на несколько секунд и потом возрастает

VP8
1655129341464.png


H264
1655129439021.png
 

crtv

New Member
В общем обнаружил ещё одну закономерность - H264 дает низкий FPS только при плохом освещении в помещении. Если сделать яркое освещение, то всё отлично. VP8 работает норм при любом освещении. Что с этим делать? :)
 

Max

Administrator
Staff member
В общем обнаружил ещё одну закономерность - H264 дает низкий FPS только при плохом освещении в помещении. Если сделать яркое освещение, то всё отлично. VP8 работает норм при любом освещении. Что с этим делать?
Разница между этими кодеками на мобильных устройствах в следующем: для H264 используется аппаратное кодирование (с использованием GPU), а для VP8 только программное. Выглядит так, что это особенность реализации аппаратного кодирования на устройствах Samsung.
2. Как нам в приложении определить какой кодек выставлять? Может есть какая-то таблица рекомендуемых кодеков для различных устройств?
Такой таблицы нет, зависимость определяется по результатам тестов. Вы можете исключить H264 при публикации в зависимости от модели устройства
Code:
if(isSamsung) {
     streamOptions.setStripCodecs("H264");
}
 
Top