Звонки, игры и стримы
Отчёты о звонках и удалённых сеансах, режим звонка, проверка перед встречами, пинг до игровых серверов и оверлей.
Отчёты о звонках
После каждого звонка Kilobat сообщает, зависал ли он и почему. Он замечает звонок, когда Zoom, Microsoft Teams, FaceTime, Slack, Webex, Discord, WhatsApp, Telegram, Signal или браузер использует микрофон дольше десяти секунд. Сам звонок он никогда не слышит: он видит лишь, какое приложение использует микрофон, а это macOS и так показывает. До конца звонка он раз в секунду пингует интернет и роутер, отмечает самое активное из остальных приложений и каждые пять секунд проверяет процессор, память, температуру и GPU Mac.
Две секунды подряд и больше потерянных пингов или пингов на 200 ms медленнее обычного для этого звонка считаются зависанием. У каждого зависания есть причина: другое приложение в этот момент отдаёт или загружает данные, другое устройство в вашей сети (по счётчикам трафика роутера, если он делится ими по UPnP), Wi-Fi (когда роутер тоже подтормаживал), сканирование AirDrop или проблема за роутером. Отдельно карточка сообщает, когда тяжело было самому Mac: процессор загружен до предела (и каким приложением), не хватает памяти, Mac замедляет себя из-за перегрева или GPU загружен до предела. Карточка появляется в разделе «Состояние › Звонки» и в уведомлении. Без Pro она показывает, сколько раз звонок зависал; Kilobat Pro называет причины и подсказывает, что попробовать. Выключить её можно в «Настройки › Сеть › Отчёт после каждого звонка». В терминале kilobat calls выводит список карточек, а агенты получают их через get_call_reports.
Когда звонок зависал за вашим роутером, там, где находятся собственные серверы сервиса звонков, Kilobat в конце звонка запрашивает страницу статуса этого сервиса, и карточка сообщает, что там говорилось в тот момент: «В тот момент страница статуса Zoom сообщала о сбое» — с инцидентом и ссылкой — или что о проблемах не сообщалось. Эта часть бесплатна.
Отчёты о SSH и удалённых рабочих столах
После сеанса SSH, Mosh или удалённого рабочего стола Kilobat сообщает, запаздывал ли ввод или зависал экран, и почему. Он учитывает ssh или mosh-client с собственным терминалом (tty или терминальное приложение — Terminal, iTerm2, Ghostty, WezTerm, kitty, Warp или VS Code — среди родительских процессов), а также Общий экран, Parsec, Jump Desktop, Windows App (Microsoft Remote Desktop), AnyDesk, TeamViewer и RustDesk, пока они показывают удалённый экран. Чтобы сеанс получил отчёт, нужна минута ввода в терминале или окне просмотра на переднем плане, поэтому scp, sftp, rsync, git через ssh, туннели (-N, -f), переходы ProxyJump, одиночные команды и фоновый ssh редакторов или агентов никогда не учитываются. Сеансы к самому этому Mac (виртуальной машине или контейнеру на localhost) пропускаются. Chrome Remote Desktop работает во вкладке браузера, и отличить его от самого браузера нельзя. Kilobat никогда не читает содержимое сеанса: он видит процесс, адрес, к которому тот подключён, и сколько байтов он передаёт.
Пока сеанс открыт, Kilobat раз в секунду пингует хост (собственный адрес хоста, как его называет подключение), интернет и роутер, каждые несколько секунд берёт у macOS круговую задержку TCP этого подключения и отмечает самое активное другое приложение, Wi-Fi и нагрузку на Mac — так же, как в отчётах о звонках. Две секунды и больше потерянных пингов или пингов на 150 ms медленнее обычного для этого сеанса считаются задержкой; для SSH и Mosh — только пока вы печатали. У каждой задержки есть причина, в том же порядке, что и в отчётах о звонках: страница входа в Wi-Fi завершила ваш сеанс, затем другое приложение отдаёт или загружает данные, другое устройство в вашей сети (с именем, если это связанный Mac с Kilobat), джиттер или слабый сигнал Wi-Fi, сканирование AirDrop, Starlink, ваш провайдер или дальше (интернет тоже подтормаживал) либо сам путь до хоста (интернет отвечал вовремя, а хост — нет). Если задержка была за роутером, а хост относится к сервису, страницу статуса которого читает Kilobat, например Tailscale, отчёт сообщает, когда этот сервис признал сбой. Хост в 150 ms и дальше отмечается как далёкий, даже если линия была чистой. Если нажатия клавиш две секунды и дольше оставались без ответа, а хост и роутер вовремя отвечали на пинги, медленным был сам сервер; Kilobat говорит об этом, только когда такое случилось дважды, и только для SSH. Хост, который игнорирует пинг, измеряется до интернета, а для его удалённости и этой проверки используется круговая задержка TCP этого подключения.
Для SSH, когда задержки шли от джиттера Wi-Fi, AirDrop, Starlink или пути либо хост далеко, нестабилен или теряет пакеты, отчёт предлагает Mosh: он сразу показывает набранное и переживает потерю пакетов и смену Wi-Fi. Если причиной было приложение, другое устройство, Mac или сервер, отчёт этого не предлагает: Mosh бы её только скрыл. Сеанс заканчивается, когда его процесс завершается или после десяти минут без нажатий (трёх для удалённого рабочего стола), а отчёт обрывается на последнем вводе. Отчёты показываются в разделе «Состояние › Удалённые сеансы», который появляется, как только Kilobat увидит сеанс; уведомление приходит только после сеанса с задержками или зависаниями. Без Pro отчёт говорит, сколько раз это было; Kilobat Pro называет причины, подсказывает, что попробовать и когда помог бы Mosh. Выключить отчёты или уведомления о них можно в «Настройки › Сеть › Отчёт после удалённых сеансов». В терминале kilobat remote выводит их список (--kind ssh|mosh|desktop), а агенты читают их через get_remote_session_reports.
Отчёты трансляций из OBS
После каждой трансляции OBS Kilobat сообщает, были ли потеряны кадры, когда и почему. Он считывает OBS Studio 28 или новее через встроенный сервер WebSocket (obs-websocket 5). В OBS откройте «Инструменты» › «Настройки сервера WebSocket» и включите сервер; затем включите в Kilobat «Настройки» › «Трансляция» › «Отчёты трансляций из OBS», указав порт (4455, если он не менялся) и пароль, если OBS его требует. Пароль хранится в Связке ключей Mac. Проверить соединение ясно показывает успех, отсутствие запущенного OBS или выключенный сервер WebSocket, необходимость пароля либо неверный пароль. Kilobat подключается только к 127.0.0.1 и запрашивает счётчики; видео, аудио, чат и ключ трансляции ему не видны. Streamlabs Desktop и другие приложения трансляции не считываются: у Streamlabs собственное удалённое управление (порт 59650 и токен), а его единственный показатель потери кадров не различает сеть и кодировщик.
Во время трансляции OBS Kilobat раз в секунду запрашивает состояние потока (кадры, потерянные из-за сети, показатель OBS «Dropped Frames (Network)», степень перегрузки и отправленные байты) и статистику (кадры, пропущенные из-за задержек рендеринга и кодирования, и загрузку CPU процессом OBS). Одновременно линия измеряется так же, как в отчётах о звонках: ping до интернета и маршрутизатора каждую секунду, самое активное другое приложение, нагрузка Mac, счётчики маршрутизатора для других устройств при доступности через UPnP, отчёты сопряжённых Mac, сигнал Wi-Fi, AirDrop, антенна Starlink и страница входа Wi-Fi.
Каждому периоду потери кадров назначается причина, причём сетевые причины отделены от причин OBS. Со стороны сети это передача другого приложения на Mac (например Dropbox), другое устройство сети, сбой Wi-Fi или маршрутизатора (со слабым сигналом или AirDrop, если они были причиной), Starlink, выход со страницы входа Wi-Fi, битрейт выше устойчивой скорости отдачи либо проблема за маршрутизатором — у провайдера или на пути к серверу приёма. Пропуски из-за задержки кодирования означают, что кодировщик не успевал; пропуски из-за рендеринга связаны с GPU, обычно занятым игрой. Отчёт указывает, что соединение здесь ни при чём. Совет зависит от причины: уменьшить битрейт до доступной скорости отдачи, приостановить приложение, включить режим звонка для трансляций, использовать Ethernet вместо Wi-Fi, выбрать ближайший сервер приёма, более быстрый пресет или аппаратный кодировщик (Apple VT H264), снизить разрешение или частоту кадров.
После обнаружения трансляции Kilobat показывает отчёты в «Состояние» › «Трансляции», рядом со звонками и удалёнными сеансами. Уведомление приходит только при заметной потере: не менее 0,5% всех кадров или не менее 5% за отдельный период. Без Pro отчёт показывает число потерянных кадров; Kilobat Pro указывает каждую причину и способ исправления. Режим звонка для трансляций (Pro) с начала до конца эфира OBS приостанавливает приложения, которые останавливает режим звонка, включая Dropbox, Google Drive, OneDrive и Backblaze, а также загрузки Steam, пока игра не на переднем плане.
Проверка перед эфиром определяет, хватит ли исходящей скорости для сегодняшней трансляции. Из «Состояние» › «Трансляции», команды Проверить перед эфиром или kilobat stream check она около восьми секунд передаёт данные по одному соединению в Cloudflare (не более 16 MB) и отправляет 20 ping на 1.1.1.1 для проверки джиттера и потерь. Она считывает битрейт OBS (в простом режиме вывода из профиля, в расширенном — из настроек кодировщика профиля), предыдущей трансляции или введённый вами и сравнивает: скорость отдачи должна превышать битрейт на 30%. Результат — готово, впритык, если хватает на битрейт, но не на запас, или недостаточно с подходящим битрейтом (скорость отдачи делится на 1,3 и округляется вниз до 100 kbps). Также указываются приложения, сейчас передающие данные. В сети с оплатой по объёму измерение без запроса не проводится: используется последний тест скорости в этой сети, о чём сообщается. Проверка бесплатна.
В терминале kilobat stream (или stream status) показывает, подключён ли OBS, идёт ли эфир и сколько кадров потеряно; kilobat stream check запускает проверку перед эфиром (--bitrate <kbps> для установки, --no-measure для последнего теста скорости, --measure для теста в сети с оплатой по объёму); kilobat stream reports перечисляет прошлые трансляции. Каждая команда принимает --json. Агенты используют get_stream_reports и check_stream_readiness, оба только для чтения. См. Kilobat для стримеров.
Облачные игры
Во время облачной игры Kilobat измеряет сеанс так же, как отчёты о звонках измеряют звонок, а затем сообщает, когда и почему возникали прерывания. Он распознаёт GeForce NOW, Boosteroid и Shadow в их приложениях для Mac по имени приложения, а также GeForce NOW, Xbox Cloud Gaming, Amazon Luna, Boosteroid и Shadow в браузере. Сеанс начинается, когда собственный трафик приложения или браузера несёт игровой поток: в течение десяти секунд входящий UDP большую часть времени составляет не менее 2 Мбит/с, в среднем 3 Мбит/с и в четыре раза больше исходящего. Обычное веб-видео на порту 443 и большинство двусторонних звонков этому критерию не соответствуют. Другая активная вкладка того же браузера может повлиять на оценку. В браузере поток также должен быть определён: Kilobat проверяет узлы, с которыми общается браузер, по именам сетевого фильтра или обратному DNS и ищет собственные узлы сервиса (play.geforcenow.com, узлы gssv-play в xboxlive.com, luna.amazon., cloud.boosteroid.com, pc.shadow.tech). Неопознанный поток браузера оставляется без изменений, поэтому без сетевого фильтра некоторые браузерные сеансы не попадают в отчёт. Kilobat никогда не видит игру, видео или вашу учётную запись.
Во время сеанса «Состояние» › «Облачные игры» показывает ping, джиттер и потери за последние 30 секунд (до сервера самого потока, если он отвечает на ping, иначе до 1.1.1.1), оценочный битрейт и объём данных по подходящему клиентскому трафику, а также то, что сейчас мешает на этом Mac: поиск AirDrop, Wi-Fi на 2,4 ГГц, слабый сигнал и приложения с большим объёмом отправки или загрузки, включая названные Фото iCloud, iCloud Drive, Time Machine и обновления macOS. Приостановить AirDrop и фоновые передачи приостанавливает соединение AirDrop (бесплатно; macOS запросит пароль администратора), а с Pro удерживает приложения, которые удерживает режим звонка, например Dropbox, Google Drive и загрузки Steam, до окончания сеанса, перехода в одно из приложений или максимум на три часа. Службы iCloud и обновления Apple не приостанавливаются; карточка объясняет, как сделать это самостоятельно. В лимитной сети или точке доступа дополнительно показывается расход за час при текущем битрейте, прогноз расхода за обычную продолжительность вашего сеанса в этом сервисе (один час, пока не наблюдались три сеанса) и время исчерпания бюджета.
Задержка — это потеря ping в течение двух секунд и более или превышение медианы сеанса на 100 ms, либо битрейт потока ниже 40% медианы в течение трёх секунд и более. Первые полминуты и последние секунды исключаются. Для каждого случая сохраняются все условия: страница входа Wi-Fi, Wi-Fi при одновременном сбое маршрутизатора (2.4 GHz, слабый сигнал, AirDrop или удалённый узел mesh-сети), антенна Starlink, активное приложение, другое устройство сети или проблема за маршрутизатором. Например: «Задержка в 21:14 на 40 с: Wi-Fi 2.4 GHz, пока iCloud Фото передавало данные». Без Pro отчёт показывает число задержек, ping, битрейт и объём данных; Kilobat Pro указывает каждую причину и способ исправления. После сеанса с задержками приходит уведомление («Настройки» › «Трансляция» › «Отчёты об облачных играх» и соответствующее уведомление). Последние 200 отчётов хранятся на этом Mac.
В терминале kilobat cloud-gaming (или cloud-gaming status) показывает текущий сеанс, а kilobat cloud-gaming reports — прошлые; каждая команда принимает --json. Агенты используют get_cloud_gaming только для чтения. См. облачные игры на Mac и страницы GeForce NOW, Xbox Cloud Gaming, Boosteroid, Amazon Luna и Shadow.
Режим звонка
Режим звонка останавливает приложения, из-за которых зависают звонки, пока вы разговариваете. Когда начинается звонок, Kilobat приостанавливает запущенные Dropbox, Google Drive, OneDrive, Box, Backblaze, Arq, Creative Cloud, торрент-клиенты и похожие приложения и отклоняет их новые подключения, так что уже идущая отдача сразу останавливается. Игровые лаунчеры (Steam, Epic Games, Battle.net) приостанавливаются, только пока они загружают данные и на переднем плане нет игры, чтобы игра и её голосовой чат продолжали работать. Всё возобновляется, как только звонок закончится, когда вы переключитесь на одно из приложений, когда Kilobat завершится, или максимум через три часа; список, который записывается перед каждой паузой, гарантирует, что ничего не останется приостановленным даже после сбоя. Собственные службы iCloud и обновлений Apple не приостанавливаются. Выберите приложения в «Настройки › Сеть › Режим звонка › Выбрать…» — там же можно приостанавливать AirDrop во время звонков (macOS запрашивает пароль в начале каждого звонка). Карточка звонка затем показывает, какие приложения приостановил режим звонка. Режим звонка входит в Kilobat Pro.
Проверка перед встречами
Включите «Настройки › Сеть › Проверка перед встречами» и один раз разрешите доступ к календарям. Примерно за пять минут до события со ссылкой на Zoom, Google Meet, Microsoft Teams, FaceTime, Webex, Whereby или похожий сервис Kilobat десять секунд проверяет трафик других приложений, Wi-Fi, 100 быстрых пингов до интернета, AirDrop и нагрузку на Mac. Он уведомляет вас, только когда что-то может подвесить звонок, например «Dropbox отдаёт данные и Wi-Fi слабый»; с Kilobat Pro в уведомлении есть кнопка, которая приостанавливает эти приложения до конца звонка. Календарь читается на этом Mac, и ничего о встрече не сохраняется и никуда не отправляется.
Пинг до игровых серверов
В каком регионе искать матч? В «Скорость › Игровые серверы» откройте выбор игры, найдите свою игру и нажмите «Пинговать серверы». Kilobat пять раз пингует каждый дата-центр этой игры, по несколько за раз, и выстраивает их по медианному пингу с джиттером и потерями, ближайший — первым, как Лучший для вас. Более стабильный регион, отстающий не больше чем на 2 ms, побеждает более скачущий. Это занимает около пяти секунд и запускается, только когда вы попросите. В списке сначала идут игры, которые вы открывали последними, затем все игры по числу игроков.
Что пингуется, зависит от того, где каждая игра публикует или размещает свои серверы, и это всегда ваш пинг до дата-центра региона, а не до сервера матча, на который вы попадёте и который может добавить немного:
- Ретрансляторы Valve — для Counter-Strike 2, Dota 2, Deadlock и Team Fortress 2: ретранслятор Valve в каждом дата-центре из списка ретрансляторов, который Steam публикует для каждой игры. Трафик матчмейкинга этих игр идёт через эти ретрансляторы, и встроенный в CS2
net_print_sdr_ping_timesизмеряет их же. - Ping-серверы Epic — для Fortnite: ping-сервер, который Epic указывает для каждого субрегиона матчмейкинга. Если сеть блокирует пинг, Kilobat вместо этого замеряет время TCP-подключения к нему.
- Регионы AWS — для Apex Legends, Dead by Daylight и Marathon: эти игры проводят матчи на Amazon GameLift, и Kilobat отправляет UDP-эхо на собственный ping-маяк GameLift в каждом регионе AWS, который использует игра (Apex и Marathon перечисляют свои в конфигурации дата-центров Steam). В подписи указан регион, например «Frankfurt · AWS eu-central-1».
- Регионы Azure — для Rainbow Six Siege, Age of Empires II, III и IV и Age of Mythology: дата-центры Siege — это регионы PlayFab в Azure, а каждое лобби Age of Empires называет регион Azure своего сервера-ретранслятора. Kilobat отправляет зонд задержки PlayFab на его маяк в каждом регионе; если в регионе нет маяка (UK West), он замеряет время TCP-подключения к Azure Storage в этом регионе.
- Официальные тестовые хосты — для Brawlhalla и Hunt: Showdown 1896: хосты для проверки пинга, которые справка Brawlhalla указывает для каждого региона (время замеряется по TCP, так как они не отвечают на пинг), и два тестовых адреса, которые Crytek публикует для регионов Hunt «Европа» и «Восток США».
Игры, которые ничего не публикуют для пинга, показаны в списке с причиной, и Kilobat не гадает: Valorant и League of Legends (Riot не публикует цели, а адреса, которыми делятся игроки, больше не отвечают), Overwatch 2, Call of Duty, PUBG, Marvel Rivals, Roblox, World of Warcraft и другие без опубликованных серверов или регионов; GTA Online, Helldivers 2, Destiny 2 и Warframe, где хостят сами игроки; Minecraft, Rust, Palworld и Valheim, где вы подключаетесь к чужим серверам; и EVE Online, чей адрес отвечает на узле Cloudflare, а не в Лондоне. Для них используйте текущий матч.
Ваш текущий матч вверху панели работает с любой игрой. Пока вы играете, Kilobat смотрит на игру на переднем плане или на последнюю, что там была (приложение из категории «Игры», игру из вашей библиотеки Steam или Windows-игру в CrossOver, Whisky или Wine), берёт сервер, с которым она обменивается больше всего UDP-данными, не считая веб-трафика, DNS и установки голосовой связи, называет страну, в которой DB-IP регистрирует адрес (или дата-центр Valve, если это один из ретрансляторов Valve), и пять раз пингует его. Многие игровые серверы не отвечают на пинг; тогда Kilobat пишет «Этот сервер не отвечает на пинг» вместо потерь. Некоторые игры отправляют данные через подключение, которому macOS не присваивает адрес, и Kilobat сообщает, что не видит их сервер.
Нажмите Показать в оверлее, чтобы вывести любой из этих пингов в стрим: оверлей будет раз в секунду пинговать этот дата-центр или сервер вашего матча и подпишет его на плашке, например «CS2 · Frankfurt» или «Match · Germany»; для матча он заново ищет сервер каждые 30 секунд. В терминале kilobat games выводит список игр, kilobat games --game aoe4 — таблицу и цель оверлея для одной игры, kilobat games --match проверяет ваш матч, а kilobat overlay --target aoe4:westeurope или --target match транслирует его; агенты используют get_game_ping.
Оверлей для стрима
Показывайте ping в прямом эфире. Включите «Настройки» › «Трансляция» › «Оверлей трансляции» и добавьте http://localhost:7171/ как источник браузера в OBS, Streamlabs или другом приложении (640 × 80 достаточно). Небольшая плашка показывает ping, джиттер, потери и график за последнюю минуту. По умолчанию проверяется интернет (1.1.1.1); выберите рядом с настройкой или в Игровых серверах маршрутизатор, текущий матч или дата-центр игры, и плашка покажет его имя; server=0 в URL скрывает имя. Летучая мышь в начале улыбается синим при хорошем соединении, становится фиолетовой при замедлении и хмурится розовым при плохом. Измените вид в URL: ?show=ping,jitter,loss,graph,speed, theme=dark, light или clear, а также size=s, m или l. С Pro brand=0 скрывает логотип, а face=0 заменяет летучую мышь простой точкой. Пока оверлей включён, Kilobat отправляет ping раз в секунду; страница доступна на 127.0.0.1 только этому Mac. Без приложения kilobat overlay предоставляет ту же страницу до Ctrl-C, с --target для маршрутизатора, match или игрового региона. Чтобы позже узнать причину потери кадров OBS и проверить отдачу перед эфиром, см. отчёты трансляций OBS.