android sdk игнорирует параметр bitrate

Ritmius

Member
Задаем параметр битрейт в android sdk
в логах видим, что игнорирует

"bitrate":0,"minBitrate":0,"maxBitrate":0,"quality":0,"history":false,"gop":0,"fps":0,"audioBitrate":0,


Скажите что мы делаем не так?
и чем bitrate отличается от audioBitrate и какой нам задавать, если у нас только аудио? и нужно ли его через приложение задавать если у нас в конфиге есть opus.encoder.bitrate=30000
 

Attachments

Max

Administrator
Staff member
Добрый день
"bitrate":0,"minBitrate":0,"maxBitrate":0,"quality":0,"history":false,"gop":0,"fps":0,"audioBitrate":0,
Эти параметры принимают ненулевые значения только для потоков транскодера, созданных по REST API /transcoder/startup.
Посмотреть актуальный битрейт потока можно в метриках
Code:
{
    ...
    "AUDIO_RATE": 31832,
    ...
    "VIDEO_RATE": 684352,
    ...
}
Скажите что мы делаем не так?
и чем bitrate отличается от audioBitrate и какой нам задавать, если у нас только аудио?
Судя по скриншоту, вы вызываете метод audioConstraints.setBitrate, это правильно.
и нужно ли его через приложение задавать если у нас в конфиге есть opus.encoder.bitrate=30000
Настройка opus.encoder.bitrate относится к кодированию аудио на сервере и работает при транскодинге из другого кодека в Opus, либо в микшере, при кодировании аудио в выходном потоке.
 

Ritmius

Member
не понятно. в метриках где смотреть? вы дали ссылку снова на документацию не конкретно

мы уже 10-й Тикет создаем разными словами пытаемся выяснить как заставить ваш продукт нормально разговаривать, без пауз и заиканий.

Все что вы советовали в других тикетах мы настроили, У нас задержки и хрюканье.

Сервер на М9 c 10гигабитным интернетом. Вообще никак не нагружен 128 оперативки 2 процессора 2630v2

2 человека подключается на 1 микшер и не могут поговорить . Все заикается , задержка 1-4 секунды, рвется связь постоянно

Вы можете помочь пожалуйста? конкретно! пошагово! ЧТО СДЕЛАТЬ?


Настройка opus.encoder.bitrate относится к кодированию аудио на сервере и работает при транскодинге из другого кодека в Opus, либо в микшере, при кодировании аудио в выходном потоке.

- в пердыдущих тикетах вы говорили, что так можно задать битрейт, щас уже нельзя или вообще непонятно, что вы говорите и как понимать вашу документацию. Мы просто используем audio only и нам просто нужно чтобы звук работал без заиканий и нормально

как задать качество низкое и как убедиться что оно задано? ЧТО НАСТРОИТЬ ЧТОБЫ ЭТО РАБОТАЛО НОРМАЛЬНО?


вот наши метрики, почему он не принимает audioConstraints.setBitrate?
{
"VIDEO_SYNC": 0,
"VIDEO_K_FRAMES": 0,
"AUDIO_SYNC": 1617680331860,
"VIDEO_NACK": 0,
"AUDIO_RATE": 1200,
"AUDIO_LOST": 0,
"VIDEO_LOST": 0,
"VIDEO_CODEC": 0,
"VIDEO_B_FRAMES": 0,
"VIDEO_PLI": 0,
"AUDIO_CODEC": 111,
"VIDEO_RATE": 0,
"VIDEO_WIDTH": 0,
"VIDEO_GOP_SIZE": 0,
"VIDEO_HEIGHT": 0,
"VIDEO_FPS": 0,
"VIDEO_P_FRAMES": 0
}





07:19:09,636 ERROR TcpServer - ICE-TCP-pool-74-thread-1 Got exception
java.io.IOException: Соединение разорвано другой стороной


Вот ваш sdk android работает минуту примерно и отваливается. при этом на этом интернете работает и телеграмм, и скайп и что угодно звонит по 2 часа говорю ничего не рвется и не икает

При этом заметил, если в микрофон музыку подставляешь он работает дольше ? как это вообще может быть?

КАК ЗАСТАВИТЬ ВАШ ПРОДУКТ РАБОТАТЬ И МОЖНО ЛИ ЭТО ВООБЩЕ СДЕЛАТЬ? ДАВАЙТЕ ДО КОНКРЕТИКИ


мы перепробовали уже все возможное, меняли на tcp, udp , делали весь ваш тюнинг все возможные настройки ставили ничего не помогает.
 
Last edited:

Max

Administrator
Staff member
не понятно. в метриках где смотреть? вы дали ссылку снова на документацию не конкретно
Чтобы посмотреть метрики потока, опубликованного на сервере под именем stream1, необходимо отправить REST API запрос /stream/find (сборка 5.2.923 и новее)
Code:
POST /rest-api/stream/find HTTP/1.1
Host: wcs:8081
Content-Type: application/json
 
{
    "name":"stream1",
    "published":true,
    "display":["metrics"]
}
или в любой сборке /stream/metrics
Code:
POST /rest-api/stream/metrics HTTP/1.1
Host: wcs:8081
Content-Type: application/json
 
{
    "name":"stream1"
}
В ответе будет набор метрик потока
Code:
{
    "VIDEO_B_FRAMES": 0,
    "VIDEO_WIDTH": 1920,
    "VIDEO_SYNC": 1583463093448,
    "AUDIO_RATE": 31832,
    "VIDEO_PLI": 0,
    "VIDEO_HEIGHT": 1080,
    "AUDIO_SYNC": 1583463093415,
    "VIDEO_FPS": 36,
    "AUDIO_CODEC": 111,
    "VIDEO_P_FRAMES": 3989,
    "VIDEO_RATE": 684352,
    "VIDEO_CODEC": 119,
    "VIDEO_K_FRAMES": 173,
    "VIDEO_NACK": 1,
    "VIDEO_LOST": 1,
    "AUDIO_LOST": 130
}
Из этого набора Вас интересует метрика AUDIO_RATE, которая показывает текущее мгновенное значение битрейта аудио составляющей потока.
Именно это и написано в документации и в ответе выше. Есть ли у Вас затруднения c пониманием вышенаписанного?
Кроме того, на скриншоте все же есть неточность в назначении констрейнтов.
Посмотрите, пожалуйста, на пример из этого поста на основе кода примера Media Devices
Code:
@NonNull
private Constraints getConstraints() {
      audioConstraints = new AudioConstraints();
      /// Настраиваем битрейт аудио публикации
      audioConstraints.setBitrate(30000);
      /// Указываем null вместо videoConstraints,  в этом случае видео не будет публиковаться
      return new Constraints(audioConstraints, null);
}
...

StreamOptions streamOptions = new StreamOptions(streamName);
Constraints constraints = getConstraints();
streamOptions.setConstraints(constraints);
publishStream = session.createStream(streamOptions);
...
publishStream.publish();
2 человека подключается на 1 микшер и не могут поговорить . Все заикается , задержка 1-4 секунды, рвется связь постоянно
Это однозначно говорит о проблемах с каналом от паблишера/подписчика до сервера. Для аудио потока высокая пропускная способность обычно не нужна, поэтому, возможно, на канале есть потери. То, что на стороне сервера 10 Гбит, не говорит ни о чем, оценивать необходимо весь канал, включая последнюю милю.
Для проверки рекомендуем использовать примеры на WebSDK, поскольку их проще твикать при необходимости.
1. Проверьте, воспроизводится ли проблема в примере MCU Client со следующими изменениями в этом коде
Code:
function getConstraints() {
    var constraints = {
        audio: $("#hasAudio").is(':checked'),
        video: false // Отключаем публикацию видео
    };
    return constraints;
}
2. Если проблема воспроизводится, уточните, какой канал публикации используется: 2G, 3G, 4G, Wi-Fi, wired? Какова пропускная способность канала от клиента до сервера, измеренная при помощи iperf:
На стороне сервера (используйте порт, открытый для входящих подключений):
Code:
# Stop WCS
systemctl stop webcallserver
# Install iperf
yum install iperf3 
# Run iperf in server mode
iperf3 -s -p 5201
На стороне клиента:
Code:
# Test upstream channel
iperf3 -c wcs -p 5201
# Test downstream channel
iperf3 -c wcs -p 5201 -R
Этот тест покажет пропускную способность канала и потери на канале
3. При публикации потока проверьте метрику AUDIO_LOST
4. Если тесты показывают потери в канале, может помочь следующее:
- сменить канал у клиента (последнюю милю, провайдера и т.д.)
- мигрировать сервер в датацентр ближе к клиенту (например, из США в Европу)
- использовать TCP транспорт (пример для публикации, для проигрывания настраивается аналогично)
Code:
StreamOptions streamOptions = new StreamOptions(streamName);
Constraints constraints = getConstraints();
streamOptions.setConstraints(constraints);
streamOptions.setTransport("TCP"); /// Настраиваем использование TCP транспорта для WebRTC
publishStream = session.createStream(streamOptions);
Вы можете помочь пожалуйста? конкретно! пошагово! ЧТО СДЕЛАТЬ?
Выше приведен алгоритм выявления и устранения возможной проблемы.
- в пердыдущих тикетах вы говорили, что так можно задать битрейт, щас уже нельзя или вообще непонятно, что вы говорите и как понимать вашу документацию
Битрейт публикации потока задается только в констрейнтах. Настройками сервера можно задать ограничения по битрейту при публикации, но только для видео.
Настройка opus.encoder.bitrate, как видно из ее названия, управляет битрейтом Opus энкодера. Энкодер, в свою очередь, работает при транскодировании звука из любого другого кодека в Opus, либо на выходе микшера, поскольку микшер декодирует входящие потоки в несжатое PCM аудио, микширует их, а затем кодирует заново.
Ранее мы упоминали эту опцию в ответ на Ваши вопросы, как понизить битрейт выходного потока микшера.
где это вообще? и почему на bitrate есть несколь разных названий "bitrate": 0, "minBitrate": 0, "maxBitrate": 0, "audioBitrate": 0,
но только не ваш "AUDIO_RATE"
Изначально эти параметры предназначались для простановки в событии /publishStream на момент публикации потока на сервере. Сейчас они проставляются только для выходного потока транскодера, но тоже на момент начала публикации.
AUDIO_RATE, VIDEO_RATE показывают актуальные мгновенные значения битрейтов на момент запроса /stream/find или /stream/metrics. WebRTC работает так, что битрейт может изменяться в зависимости от доступной полосы пропускания, поэтому именно значения метрик являются наиболее актуальными.
и как это понять вообще?
Остались ли у Вас затруднения с пониманием вышеприведенных примеров?
 

Ritmius

Member
1) метрики я вам сам уже привел выше
2) канал 10-15 мегабит 3g , да неуверенный, но еще раз говорю что телеграмм и т.д. работает, ближе м9 только м9
3) tcp тоже написал вам что уже пробовали и ничего не помогает.
4) про opus.encoder.bitrate опять вас не понял. я конечно понимаю, что вы свой продукт знаете , но мне по русски можете обьяснить без ваших транскодеров. у нас mcu аудио без транскодеров и т.д. просто самый простой стрим . что сделать чтобы задать битрейт на сервере? или нужно на каждом клиенте тоже? *** такой вопрос я уже вам 2 раза задавал в других темах и снова задаю. конкретно что сделать?

5,6,7,8,9,10 11 и т.д.
ВЫ СНОВА ВООБЩЕ НЕ ПОМОГЛИ

на этом интернете работают все аудио чаты, все веб тесты проводили там тоже самое!!!!

НАМ НУЖНО ДОБИТЬСЯ РАБОТЫ С МОБИЛЬНЫМ ИНТЕРНЕТОМ . т.к. это 50% наших клиентов

ЛЮБОЙ ГОЛОСОВОЙ ЧАТ РАБОТАЕ! ДАЖЕ SIP телефония до нашей АТС, которая СТОИТ В ТОЙ ЖЕ СТОЙКЕ работает ПРЕКРАСНО!!!!!

давайте с вами проверим убедитесь!
 

Ritmius

Member
Общались с Вами по телефону, договорились проделать тестирование на вашем сервере. ждем доступ
 

Ritmius

Member
Провели тестирование mcu client audio only работает отлично.

Проблема в android sdk
 

Ritmius

Member
Провели тестирование на базовом android

"info" : "Stopped by session disconnect", видно в логах и рвется соединение

на mcu клиент в веб версии такого нет! тестировали минут 40 , android разорвался 4 раза за 10 минут
 
Last edited:

Ritmius

Member
sdk android в исходниках версия вебсокета 1.3.1 свежая версия 1.5.1

Вы можете привести в рабочее состояние android sdk?
 

Max

Administrator
Staff member
Вы можете привести в рабочее состояние android sdk?
Мы работаем над этим в тикете WCS-3135. Кроме того, от других клиентов пока не поступало запросов с похожими проблемами, поэтому нельзя утверждать, что Android SDK находится в нерабочем состоянии. Ваш случай довольно узкоспециализированный, мы им занимаемся.
Что касается повышения версии используемых библиотек, это всегда делается с большой осторожностью, поскольку может вести к потере обратной совместимости. Так, при очередном повышении версии WebRTC, в связи с возросшими требованиями к сборке, пришлось выпускать новую версию Android SDK и разделять поддержку различных версий Android.
 

Max

Administrator
Staff member
Тестовое приложение Android MCU Client по тикету WCS-3135 проходит предварительное тестирование. Тесты показывают, что разрывы соединения со стороны Android устройства могут быть связаны не только с качеством канала, но и с уходом приложения в фоновый режим при отключении экрана.
Чтобы приложение не уходило в фоновый режим, необходимо устанавливать соединение с WCS сервером и публиковать видео из сервиса, который должен быть запущен из Activity приложения. Подробности для Ваших Android разработчиков здесь.
 
Top