Черный экран на iOS (трансляция с камеры)

Max

Administrator
Staff member
1) Почему flashphoner клиент при фризе не меняет статус, не срабатывают никакие события, он не может такую ситуацию определить?
Обычно фризы связаны с проблемами с каналом либо на стороне публикации. либо на стороне проигрывания. Проигрыванием целиком и полностью занимается браузер, если он перестает получать картинки, будет фриз, если он получает пакеты, но картинка не меняется, это тоже будет выглядеть как фриз, но браузер об этом ничего не сообщит.
Статусы потока присылаются сервером. Если сервер определит, например, что пакеты с медиа трафиком перестали приходить от паблишера, он остановит публикацию, в этом случае подписчику придет FAILED. Если websocket соединение с подписчиком разорвется, клиент также выставит статус FAILED.
Есть прямо идея отслеживать это с помощью периодической отрисовки на два разных канваса содержания видео и сравнения попиксельно их содержимого, и если картинка не меняется, то перезапускать стрим - но это выглядит довольно жестким хаком.
Есть механизм контроля качества канала на стороне паблишера и подписчика, необходимо его настроить. Подробности здесь. Протестировать можно в примере Media Devices, как описано здесь.
2) Должно ли как-то подобное поведение на клиенте отображаться в логах сервера? Как такое вообще можно потенциально отслеживать? Поставили на сервере `client_log_level=DEBUG` и `enable_extended_logging=true` и смотрим содержимое `server_logs/flashphoner.log` там ничего нет при таком фризе.
Такие проблемы обычно видны в клиентских дебаговых логах. Например, можно выяснить, есть ли потери пакетов, если сверять sequence number каждого пакета и отслеживать пропуски. Но это не предназначено для использования в продакшне.
Еще в документации говорится, что клиентские логики пишутся в каталог `/usr/local/FlashphonerWebCallServer/logs/client_logs`, пробуем смотреть файл `/usr/local/FlashphonerWebCallServer/logs/client_logs/flashphoner-client-logs.log` (как делаем с серверным там пусто), каталогов там много и файлов, но что и как смотреть неясно.
Структура и содержимое клиентских логов описаны здесь. Логи делятся по датам, на каждую клиентскую сессию создается отдельный подкаталог в каталоге с текущей датой.
В общем как правильно смотреть и настраивать клиентские логи и может ли это помочь нам в нашем случае в проблеме с фризами?
Клиентские логи предназначены для разработчиков. Если вы собираете отчет, как описано здесь, мы анализируем эти логи.
В абсолютном большинстве случаев фризы связаны с качеством канала паблишера и/или подписчика. Основные рекомендации:
1. Настроить мониторинг качества канала на клиенте
2. При получении CONNECTION_QUALITY.BAD на стороне паблишера перезапускать публикацию с меньшим разрешением и битрейтом (например, снижать с 720p, 1500 kbps на 360p, 500 kbps), на стороне подписчика останавливать проигрывание и запускать заново.
3. Для снижения потерь использовать TCP транспорт на клиенте:
Code:
session.createStream({
    name: streamName,
    display: localVideo,
    ...
    transport: "TCP"
}).on(STREAM_STATUS.PUBLISHING, function (stream) {
    ...
}).publish();
 

Max

Administrator
Staff member
Добрый день.
По поддержке RTSP камер с кодеком H265: в сборке 5.2.1579 добавлена возможность захвата RTSP потока, публикуемого камерой в кодеке H265. Подробнее здесь: Захват H265 RTSP потока
 
Top