通話・ゲーム・配信

通話とリモートセッションのレポート、通話モード、会議前のチェック、ゲームサーバへのping、配信用オーバーレイ。

通話レポート

通話が終わるたびに、Kilobatはフリーズしたかどうかとその理由を伝えます。Zoom、Microsoft Teams、FaceTime、Slack、Webex、Discord、WhatsApp、Telegram、Signal、またはブラウザが10秒以上マイクを使うと、通話として認識します。通話の内容を聞くことはありません。わかるのはどのアプリがマイクを使っているかだけで、これはmacOSも表示している情報です。通話が終わるまで、インターネットとルーターに毎秒1回pingを送り、ほかに最も通信していたアプリを記録し、5秒ごとにMacのCPU、メモリ、温度、GPUを確認します。

pingの消失が2秒以上続くか、pingがその通話の通常より200 ms遅くなると、フリーズとして数えます。各フリーズには原因が付きます:その時にアップロードやダウンロードをしていたほかのアプリ、ネットワーク上のほかのデバイス(ルーターがUPnPで通信カウンタを共有している場合、その数値から判断)、Wi-Fi(ルーターも同時に止まっていた場合)、AirDropのスキャン、またはルーターより先。これとは別に、Mac自体が苦しんでいたときもカードに示します:CPUが限界まで使われていた(どのアプリによるものかも)、メモリ不足、高温による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です。レポートを作成するには、前面にあるターミナルやビューアで1分間の入力が必要です。そのため、ssh経由のscp、sftp、rsync、git、トンネル(-N、-f)、ProxyJumpの中継、単発のコマンド、エディタやエージェントがバックグラウンドで使うsshは対象になりません。このMac自体へのセッション(localhost上のVMやコンテナ)は除外されます。Chrome Remote Desktopはブラウザのタブ内で動作するため、ブラウザと区別できません。Kilobatがセッションの内容を読むことはありません。見ているのは、プロセス、その接続先のアドレス、やり取りするバイト数だけです。

セッションが開いている間、Kilobatはホスト(接続が示すホスト自身のアドレス)、インターネット、ルーターに毎秒1回pingを送り、数秒ごとにmacOSから接続のTCP往復時間を読み取り、最も通信の多いほかのアプリ、Wi-Fi、Macの負荷を記録します。通話レポートと同じ方法です。pingの消失が2秒以上続くか、pingがそのセッションの通常より150 ms遅くなると、遅れとして数えます。SSHとMoshでは、入力していた間だけが対象です。各遅れには、通話レポートと同じ順序で原因が付きます:Wi-Fiのサインインページによるログアウト、次にアップロードやダウンロード中のほかのアプリ、ネットワーク上のほかのデバイス(Kilobatが動作しているペアリング済みのMacなら名前も表示)、Wi-Fiのジッターや弱い電波、AirDropのスキャン、Starlink、プロバイダかその先(インターネットも止まっていた場合)、またはホストまでの経路そのもの(インターネットは時間どおりに応答したのにホストは応答しなかった場合)。遅れがルーターより先で起き、ホストがKilobatがステータスページを読めるサービス(Tailscaleなど)に属している場合は、そのサービスがいつ障害を認めたかもレポートに示します。150 ms以上離れたホストは、回線に問題がなくても遠いホストとして示します。ホストとルーターが時間どおりにpingに応答していたのに、キー入力が2秒以上応答されなかった場合は、サーバ自体が遅かったと判断します。これは2回起きてから、SSHの場合にだけ伝えます。pingに応答しないホストはインターネットまでを測定し、距離とこのチェックには接続のTCP往復時間を使います。

SSHでは、遅れの原因がWi-Fiのジッター、AirDrop、Starlink、経路だった場合や、ホストが遠い、不安定、パケットを落とすといった場合に、レポートはMoshを提案します。Moshは入力をすぐに表示し、パケットロスやWi-Fiの切り替えにも耐えます。原因がアプリ、ほかのデバイス、Mac、サーバだった場合は提案しません。Moshでは原因が隠れるだけだからです。セッションは、プロセスが終了したとき、またはキー入力のないまま10分(リモートデスクトップでは3分)たったときに終わり、レポートは最後の入力の時点までです。レポートは「ヘルス」›「リモートセッション」に表示されます。この項目は、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)と必要な場合はパスワードを入力します。パスワードはMacのキーチェーンに保存されます。接続をテストすると、成功したか、OBSが起動していないかWebSocketサーバがオフか、パスワードが必要か誤っているかを明確に表示します。Kilobatは127.0.0.1にのみ接続してカウンタを取得し、映像、音声、チャット、配信キーを見ることはありません。Streamlabs Desktopなどの配信アプリは読み取りません。Streamlabsには独自のリモート制御(ポート59650、トークン使用)がありますが、フレーム落ちの単一の数値ではネットワークとエンコーダのどちらが原因か区別できません。

OBSで配信中、Kilobatは毎秒ストリームの状態(ネットワークによるドロップフレーム、OBSの「ドロップしたフレーム(ネットワーク)」、混雑度、送信バイト数)と統計(レンダリング遅延によるミスフレーム、エンコード遅延によるスキップフレーム、OBSのCPU使用率)を取得します。同時に通話レポートと同じ方法で回線を測定します。インターネットとルーターへの毎秒のping、最も通信している別のアプリ、Macの負荷、UPnPで共有される場合は他のデバイスに関するルーターの通信量カウンタ、ペアリング済みMac自身のレポート、Wi-Fi信号、AirDrop、Starlinkアンテナ、Wi-Fiのサインインページを確認します。

フレームが落ちた各時間帯に原因を付け、ネットワーク側とOBS側を区別します。ネットワーク側の原因には、Mac上の別のアプリ(Dropboxなど)のアップロード、ネットワーク上の別のデバイス、Wi-Fiやルーターの停止(原因なら弱い信号やAirDropも表示)、Starlink、Wi-Fiのサインインページからのログアウト、アップロード速度を超えるビットレート、ルーターの先のプロバイダや受信サーバまでの経路があります。エンコード遅延によるスキップはエンコーダの処理不足、レンダリング遅延によるミスは通常ゲームで使用中のGPUが原因であり、レポートは接続の問題ではないと伝えます。原因に応じて、アップロード速度に合うビットレートへの変更、アプリの一時停止、配信用通話モード、Wi-Fiの代わりのEthernet、近い受信サーバ、高速なエンコーダプリセットまたはハードウェアエンコーダ(Apple VT H264)、解像度やフレームレートの引き下げを提案します。

Kilobatが配信を検出すると、レポートは「ヘルス」›「配信」に通話やリモートセッションと並んで表示されます。通知は、フレームの0.5%以上が落ちた場合、またはある時間帯に5%以上落ちた場合など、目立つほどのフレーム落ちがあったときのみ届きます。Proなしではドロップフレーム数を表示し、Kilobat Proでは各原因と対処法を示します。配信用通話モード(Pro)はOBSの配信開始から終了まで、Dropbox、Google Drive、OneDrive、Backblazeなど通話モードで保留するアプリと、ゲームが前面にないときのSteamダウンロードを保留します。

配信前チェックは、今夜の配信にアップロード速度が足りるかを確認します。「ヘルス」›「配信」、ショートカットの配信前にチェック、またはkilobat stream checkから実行すると、Cloudflareへの1接続で約8秒間のアップロード(最大16 MB)と、ジッターとパケットロスを調べる1.1.1.1への20回のpingを行います。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を認識します。アプリまたはブラウザ自身の通信がゲームストリームを運んでいるときにセッションが始まります。10秒間、主に2 Mbps以上のUDPを受信し、平均3 Mbpsで送信量の4倍に達することが条件です。ポート443の通常のWeb動画と大半の双方向通話はこの条件を満たしません。同じブラウザの別のタブが大量に通信すると推定値に影響する場合があります。ブラウザではストリームの名前も必要です。Kilobatはネットワークフィルタの名前または逆引きDNSからブラウザの接続先を調べ、サービス固有のホスト(play.geforcenow.com、xboxlive.com配下のgssv-playホスト、luna.amazon.、cloud.boosteroid.com、pc.shadow.tech)を探します。識別できないブラウザストリームは対象外のため、ネットワークフィルタがないと報告されないセッションがあります。ゲーム、映像、アカウントを見ることはありません。

セッション中、「ヘルス」›「クラウドゲーム」には過去30秒のping、ジッター、パケットロス(ストリームのサーバがpingに応答すればそのサーバ、そうでなければ1.1.1.1)、対象クライアントの通信から推定したビットレートとデータ量、このMacで現在問題になっているAirDropのスキャン、2.4 GHz Wi-Fi、弱い信号、大量にアップロードまたはダウンロードするアプリを表示します。iCloud写真、iCloud Drive、Time Machine、macOSアップデートは名前で表示します。AirDropとバックグラウンド転送を一時停止はAirDropのリンクを停止し(無料、macOSが管理者パスワードを要求)、ProではDropbox、Google Drive、Steamのダウンロードなど通話モードで保留するアプリも、セッション終了時、対象アプリへの切り替え時、または最大3時間後まで保留します。AppleのiCloudとアップデートサービスは停止せず、カードに手動で停止する方法を示します。従量制ネットワークやテザリングでは、現在のビットレートによる1時間あたりのデータ量、そのサービスでの通常のセッション時間に基づく予想合計(3回のセッションを確認するまでは1時間)、予算を使い切る時刻も表示します。

カクつきは、pingが2秒以上失われるかセッションの中央値を100 ms超える状態、またはストリームのビットレートが中央値の40%未満になる状態が3秒以上続くことです。開始後30秒と終了直前は除きます。それぞれについて、Wi-Fiのサインインページ、ルーターも停止した場合のWi-Fi(2.4 GHz、弱い信号、AirDrop、遠いメッシュノードに分類)、Starlinkアンテナ、大量に通信する別のアプリ、ネットワーク上の別のデバイス、またはルーターの先の問題など、その時点で当てはまる原因を記録します。例えば「21:14に40秒カクつき:iCloud写真がアップロード中の2.4 GHz Wi-Fi」と表示します。Proなしでは回数、ping、ビットレート、データ量を表示し、Kilobat Proでは各原因と対処法を示します。カクついたセッションの終了後に通知します(「設定」›「配信」›「クラウドゲームレポート」と「カクついたセッションの終了後に通知」)。レポートはこのMacに最新200件を保存します。

ターミナルでは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を終了するか、最長3時間たつと、すべてすぐに再開します。一時停止の前には毎回リストを書き出すので、クラッシュしても一時停止したままになることはありません。Apple自身のiCloudとアップデートのサービスは一時停止しません。対象のアプリは「設定」›「ネットワーク」›「通話モード」›「選択…」で選べます。ここでは通話中にAirDropを一時停止することもできます(通話が始まるたびにmacOSがパスワードを求めます)。通話のカードには、通話モードが一時停止したアプリが表示されます。通話モードはKilobat Proの機能です。

会議前のチェック

「設定」›「ネットワーク」›「会議前のチェック」をオンにして、カレンダーへのアクセスを一度許可します。Zoom、Google Meet、Microsoft Teams、FaceTime、Webex、Wherebyなどのリンクがある予定の約5分前に、Kilobatは10秒かけて、ほかのアプリの通信、Wi-Fi、インターネットへの100回の短いping、AirDrop、Macの負荷をチェックします。「Dropboxがアップロード中、Wi-Fiが弱い」のように、通話がフリーズしそうなときだけ通知します。Kilobat Proなら、通知のボタンでそれらのアプリを通話が終わるまで一時停止できます。カレンダーはこのMac上で読み取られ、会議についての情報が保存されたり、どこかに送られたりすることはありません。

ゲームサーバへのping

どのリージョンでマッチングすべき?「速度」›「ゲームサーバ」でゲーム選択を開き、ゲームを検索して「サーバにping」をクリックします。Kilobatはそのゲームの全データセンターに数か所ずつ5回pingを送り、pingの中央値順にジッターとパケットロスとともに一覧表示します。最も近いものはあなたに最適として先頭に表示されます。差が2 ms以内なら、より安定したリージョンを優先します。約5秒かかり、指示したときだけ実行します。ゲーム選択には、最後に使ったゲームが先に、続いてすべてのゲームがプレイ人数順に並びます。

pingを送る先は、各ゲームがサーバをどこで公開またはホストしているかによって異なります。数値は常にそのリージョンのデータセンターまでのpingで、実際に入るマッチサーバまでのpingではないため、少し増えることがあります:

  • Valveのリレー:Counter-Strike 2、Dota 2、Deadlock、Team Fortress 2向け。Steamがゲームごとに公開しているリレーリストにある、各データセンターのValveのリレーです。これらのゲームのマッチング通信はこのリレーを通り、CS2自身のnet_print_sdr_ping_timesも同じリレーを測定しています。
  • Epicのpingサーバ:Fortnite向け。Epicがマッチングのサブリージョンごとに指定しているpingサーバです。ネットワークがpingをブロックしている場合は、代わりにそのサーバへのTCP接続の時間を測ります。
  • AWSリージョン:Apex Legends、Dead by Daylight、Marathon向け。これらのゲームはAmazon GameLiftでマッチをホストしており、Kilobatはゲームが使う各AWSリージョンにある、GameLift自身のpingビーコンにUDPエコーを送ります(ApexとMarathonは、Steamのデータセンター設定に自分のリージョンを記載しています)。「Frankfurt · AWS eu-central-1」のように、リージョン名付きで表示されます。
  • Azureリージョン:Rainbow Six Siege、Age of Empires II・III・IV、Age of Mythology向け。SiegeのデータセンターはAzure上のPlayFabリージョンで、Age of Empiresの各ロビーにはリレーサーバのAzureリージョンが表示されます。KilobatはPlayFabの遅延プローブを各リージョンのビーコンに送ります。ビーコンのないリージョン(UK West)では、そのリージョンのAzure StorageへのTCP接続の時間を測ります。
  • 公式テストホスト:BrawlhallaとHunt: Showdown 1896向け。Brawlhallaのヘルプがリージョンごとに掲載しているpingテスト用ホスト(pingに応答しないためTCPで計測)と、CrytekがHuntのヨーロッパと米国東部向けに公開している2つのテストアドレスです。

pingを送れる対象を何も公開していないゲームは、理由とともにゲーム選択に表示され、推測はしません: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のように、他の人が運営するサーバに参加するゲーム。そして、アドレスがロンドンではなくCloudflareのエッジで応答するEVE Online。これらのゲームでは、現在のマッチを使ってください。

パネル上部の現在のマッチは、どのゲームでも使えます。プレイ中、Kilobatは前面にあるゲーム、または最後に前面にあったゲーム(「ゲーム」カテゴリのアプリ、Steamライブラリにあるゲーム、またはCrossOver、Whisky、WineのWindowsゲーム)を調べ、Web、DNS、ボイス通話の接続処理の通信を除いて最も多くのUDPデータをやり取りしているサーバを選び、DB-IPがそのアドレスを登録している国(Valveのリレーの場合はValveのデータセンター)を表示して、5回pingを送ります。pingに応答しないゲームサーバも多く、その場合はパケットロスを表示する代わりに「このサーバはpingに応答しません」と表示します。macOSがアドレスを付けない接続から送信するゲームもあり、その場合はサーバが見えないことを伝えます。

オーバーレイで使用をクリックすると、どちらのpingも配信に表示できます。オーバーレイはそのデータセンター、またはマッチのサーバに毎秒1回pingを送り、「CS2 · Frankfurt」や「Match · Germany」のようにピルに名前を表示します。マッチの場合は、30秒ごとにサーバを探し直します。ターミナルでは、kilobat gamesでゲームを一覧表示し、kilobat games --game aoe4で1つのゲームの表とオーバーレイの対象を出力し、kilobat games --matchでマッチをチェックし、kilobat overlay --target aoe4:westeuropeまたは--target matchで配信します。エージェントはget_game_pingを使います。

配信用オーバーレイ

配信画面にリアルタイムのpingを表示できます。「設定」›「配信」›「配信オーバーレイ」をオンにし、OBS、Streamlabsなどの配信アプリにhttp://localhost:7171/をブラウザソースとして追加します(640 × 80で十分です)。小さな表示にping、ジッター、パケットロスと過去1分間のグラフが表示されます。デフォルトではインターネット(1.1.1.1)にpingを送ります。設定の横またはゲームサーバでルーター、現在の試合、ゲームのデータセンターを選ぶと表示に名前が付き、URLのserver=0で名前を隠せます。先頭のコウモリは回線が良いと青い笑顔、遅くなると紫、悪いとバラ色の困り顔になります。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の配信レポートをご覧ください。