通話、遊戲與直播
通話與遠端工作階段報告、通話模式、會議前檢查、到遊戲伺服器的 ping 和直播疊加層。
通話報告
每次通話後,Kilobat 都會告訴你通話是否卡頓以及原因。當 Zoom、Microsoft Teams、FaceTime、Slack、Webex、Discord、WhatsApp、Telegram、Signal 或瀏覽器使用麥克風超過十秒時,它就會察覺到通話。它絕不會聽到通話內容:它只看得到哪個 App 在使用麥克風,而這點 macOS 本來就會顯示。在通話結束前,它每秒會 ping 一次網際網路和你的路由器,記下最忙的其他 App,並每五秒檢查一次 Mac 的 CPU、記憶體、溫度和 GPU。
連續兩秒以上 ping 遺失,或 ping 比該通話平常慢 200 ms,就算是一次卡頓。每次卡頓都會標出原因:當時有其他 App 在上傳或下載、你網路上的其他裝置(根據路由器的流量計數器,前提是路由器透過 UPnP 分享它們)、Wi-Fi(路由器也同時停頓時)、AirDrop 掃描,或發生在路由器之外。此外,卡片也會說明 Mac 本身何時吃力:CPU 滿載(以及是哪個 App 造成的)、記憶體不足、Mac 因過熱而自行降速,或 GPU 滿載。卡片會顯示在「健康狀態」›「通話」中,也會以通知出現。沒有 Pro 時,它會顯示通話卡頓了幾次;Kilobat Pro 會指出原因,並告訴你可以試試什麼。可以在「設定」›「網路」›「每次通話後報告」中關閉。在終端機中,kilobat calls 會列出這些卡片,AI 代理程式可以透過 get_call_reports 取得它們。
如果通話在路由器之外(也就是通話服務自己的伺服器所在之處)卡頓,Kilobat 會在通話結束時查詢該服務的狀態頁面,卡片會說明它當時回報的內容:「Zoom 的狀態頁面當時回報了服務中斷」,並附上事件和連結;或說明它當時沒有回報任何問題。這部分免費。
SSH 和遠端桌面報告
SSH、Mosh 或遠端桌面工作階段結束後,Kilobat 會告訴你輸入是否延遲、畫面是否卡頓,以及原因。它會計入擁有自己終端機的 ssh 或 mosh-client(有 tty,或父程序中有 Terminal、iTerm2、Ghostty、WezTerm、kitty、Warp 或 VS Code 等終端機 App),以及正在顯示遠端螢幕的螢幕共享、Parsec、Jump Desktop、Windows App(Microsoft Remote Desktop)、AnyDesk、TeamViewer 和 RustDesk。工作階段需要在前景的終端機或檢視器中有一分鐘的輸入,才會產生報告,因此透過 ssh 的 scp、sftp、rsync、git,通道(-N、-f),ProxyJump 跳轉,單一指令,以及編輯器或 AI 代理程式在背景執行的 ssh 都不計入。連到這台 Mac 本身的工作階段(localhost 上的虛擬機器或容器)會被略過。Chrome Remote Desktop 在瀏覽器分頁中執行,無法與瀏覽器區分開來。Kilobat 絕不會讀取工作階段的內容:它只看到程序、程序所連線的位址,以及它傳輸了多少位元組。
工作階段開啟期間,Kilobat 每秒會 ping 一次主機(連線所指的主機本身位址)、網際網路和你的路由器,每隔幾秒從 macOS 讀取該連線本身的 TCP 往返時間,並記下最忙的其他 App、Wi-Fi 和 Mac 的負載,方式與通話報告相同。連續兩秒以上 ping 遺失,或 ping 比該工作階段平常慢 150 ms,就算是一次延遲;對 SSH 和 Mosh 來說,只計算你正在輸入的時候。每次延遲都會按通話報告的順序標出原因:Wi-Fi 登入頁面讓你登出;其次是其他 App 在上傳或下載、你網路上的其他裝置(如果是執行 Kilobat 的已配對 Mac,會顯示其名稱)、Wi-Fi 抖動或訊號弱、AirDrop 掃描、Starlink、你的業者或更遠處(網際網路也同時停頓),或通往主機的路徑本身(網際網路準時回應,主機卻沒有)。如果延遲發生在路由器之外,且主機屬於 Kilobat 會讀取其狀態頁面的服務(例如 Tailscale),報告會說明該服務何時承認了服務中斷。距離 150 ms 以上的主機,即使線路乾淨,也會被指出太遠。當主機和路由器都準時回應 ping,按鍵卻兩秒以上沒有得到回應時,就是伺服器本身太慢;Kilobat 只在這種情況發生兩次後才會指出,而且只針對 SSH。不回應 ping 的主機改為測量到網際網路的情況,並用該連線本身的 TCP 往返時間來衡量它的距離和進行這項檢查。
對於 SSH,當延遲來自 Wi-Fi 抖動、AirDrop、Starlink 或路徑,或主機太遠、不穩定或遺失封包時,報告會建議使用 Mosh:它會立即顯示你輸入的內容,並能撐過封包遺失和 Wi-Fi 切換。如果原因是某個 App、其他裝置、Mac 或伺服器,報告就不會建議,因為 Mosh 只會把問題掩蓋起來。工作階段會在其程序結束時結束,或在十分鐘沒有按鍵後結束(遠端桌面為三分鐘),報告截止到最後一次輸入。報告顯示在「健康狀態」›「遠端工作階段」中,Kilobat 偵測到工作階段後這一項才會出現;只有出現延遲或卡頓的工作階段結束後才會傳送通知。沒有 Pro 時,報告只顯示次數;Kilobat Pro 會指出原因,告訴你可以試試什麼,以及 Mosh 何時有幫助。可以在「設定」›「網路」›「遠端工作階段後報告」中關閉報告或其通知。在終端機中,kilobat remote 會列出它們(--kind ssh|mosh|desktop),AI 代理程式可以透過 get_remote_session_reports 讀取。
OBS 串流報告
每次 OBS 串流結束後,Kilobat 會說明是否掉格、何時掉格及原因。它透過 OBS Studio 28 或更新版本內建的 WebSocket 伺服器(obs-websocket 5)讀取資料。在 OBS 中開啟「工具 › WebSocket 伺服器設定」,勾選「啟用 WebSocket 伺服器」;然後在 Kilobat 中開啟「設定 › 串流 › OBS 串流報告」,填入連接埠(除非更改,否則為 4455)和 OBS 要求的密碼。密碼保存在 Mac 的鑰匙圈中。測試連線會明確顯示是否成功,或者 OBS 未執行、WebSocket 伺服器關閉、需要密碼或密碼錯誤。Kilobat 只連接 127.0.0.1 並要求計數器:它絕不會看到影片、音訊、聊天或串流金鑰。它不讀取 Streamlabs Desktop 和其他串流 App:Streamlabs 有自己的遠端控制(連接埠 59650,使用權杖),其單一掉格數無法說明掉格發生在網路還是編碼器。
OBS 串流期間,Kilobat 每秒向其要求一次串流狀態(網路掉格,即 OBS 所稱的 Dropped Frames (Network)、壅塞數值和已傳送位元組數)及統計資料(因算繪延遲遺失的影格、因編碼延遲略過的影格和 OBS 的 CPU 使用率)。同時,它以通話報告的方式測量線路:每秒 ping 一次網際網路和路由器、其他最忙碌的 App、Mac 負載、路由器透過 UPnP 共享時的其他裝置流量計數器、已配對 Mac 本身的報告、Wi-Fi 訊號、AirDrop、Starlink 天線和 Wi-Fi 登入頁面。
每個掉格時段都會標明原因,網路原因與 OBS 本身原因分開記錄。網路方面包括:Mac 上另一個 App 正在上傳(例如 Dropbox)、網路中的另一部裝置、Wi-Fi 或路由器停頓(訊號弱或 AirDrop 是原因時會註明)、Starlink、Wi-Fi 登入頁面將你登出、設定的位元速率高於上傳能持續支援的速度,或路由器之外的問題——供應商處或通往接收伺服器的路徑。因編碼延遲略過影格表示編碼器跟不上,因算繪延遲遺失影格表示 GPU 跟不上,通常是忙於遊戲;報告會說明這不是連線問題。建議取決於原因:將位元速率降低到上傳速度可支援的數值、暫停 App、使用串流通話模式、改用乙太網路、選擇較近的接收伺服器、使用更快的編碼器預設或硬體編碼器(Apple VT H264),或降低解析度或影格速率。
Kilobat 偵測到串流後,報告會顯示在「健康狀態 › 串流」中,與通話和遠端工作階段並列。只有掉格達到值得注意的程度時才會通知:遺失至少 0.5% 的影格,或某個時段遺失至少 5%。沒有 Pro 時,報告顯示掉格數;Kilobat Pro 會列出每個原因和應如何調整。串流通話模式(Pro)從 OBS 開始串流到結束期間暫緩通話模式會暫緩的 App,包括 Dropbox、Google Drive、OneDrive、Backblaze 等,以及沒有遊戲位於前景時的 Steam 下載。
直播前檢查會判斷上傳速度能否支援今晚的串流。透過「健康狀態 › 串流」、捷徑直播前檢查或 kilobat stream check 啟動後,它會透過單一連線向 Cloudflare 上傳約八秒(最多 16 MB),並向 1.1.1.1 傳送 20 次 ping,測量抖動和封包遺失。它讀取 OBS 中設定的位元速率(簡單輸出模式從設定檔讀取,進階模式從設定檔的編碼器設定讀取)、上次串流的位元速率或你輸入的位元速率,並進行比較:上傳速度應達到位元速率加 30%。結果顯示已就緒;上傳速度足以涵蓋位元速率但沒有餘裕時顯示吃緊;否則顯示不足及合適的位元速率(上傳速度除以 1.3,再向下取整到 100 kbps)。它還會列出目前正在上傳的 App。在計量網路上,它未經詢問絕不測量,而是使用該網路上次的速度測試,並註明這一點。檢查免費。
在終端機中,kilobat stream(或 stream status)顯示 OBS 是否已連接、正在串流及目前掉格數;kilobat stream check 執行直播前檢查(--bitrate <kbps> 用於設定,--no-measure 使用上次速度測試,--measure 在計量網路上仍然測試);kilobat stream reports 列出以往串流。每項都支援 --json。AI 代理程式使用 get_stream_reports 和 check_stream_readiness,兩者均為唯讀。請參閱適合實況主的 Kilobat。
雲端遊戲
雲端遊戲進行時,Kilobat 依照通話報告測量通話的方式測量工作階段,結束後說明何時卡頓及原因。它透過 App 名稱識別 GeForce NOW、Boosteroid 和 Shadow 的 Mac App,並在瀏覽器中識別 GeForce NOW、Xbox Cloud Gaming、Amazon Luna、Boosteroid 和 Shadow。當 App 或瀏覽器本身的流量承載遊戲串流時,工作階段開始:連續十秒,傳入 UDP 流量大部分時間至少 2 Mbps,平均 3 Mbps,且為傳出流量的四倍。連接埠 443 上的一般網頁影片和大多數雙向通話不符合該條件。同一瀏覽器中其他忙碌分頁可能影響估算。在瀏覽器中,還必須識別串流名稱: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、訊號弱,以及大量上傳或下載的 App;iCloud 照片、iCloud Drive、Time Machine 和 macOS 更新會依名稱顯示。暫停 AirDrop 和背景傳輸會暫停 AirDrop 的連結(免費;macOS 要求輸入管理員密碼),並在使用 Pro 時暫緩通話模式會暫緩的 App,例如 Dropbox、Google Drive 和 Steam 下載,直到工作階段結束、你切換到其中一個 App 或最多三小時。Apple 的 iCloud 和更新服務不會暫停;卡片會說明如何自行暫停。計量網路或熱點上還會顯示目前位元速率下每小時的流量、依該服務的通常工作階段長度估算的總量(觀察到三次之前按一小時計算),以及此處流量預算何時用盡。
卡頓指連續兩秒或更長時間的 ping 遺失或比工作階段中位數高 100 ms,或者串流位元速率連續三秒或更長時間低於其中位數的 40%(服務降低了畫質);開始的前半分鐘和最後幾秒不計入。每次卡頓都會記錄當時存在的因素:Wi-Fi 登入頁面、路由器也停頓時的 Wi-Fi(細分為 2.4 GHz、訊號弱、AirDrop 和較遠的 Mesh 節點)、Starlink 天線、另一個大量傳輸的 App、網路中的另一部裝置,或路由器之外的問題。例如:「21:14 卡頓 40 秒:2.4 GHz Wi-Fi,同時 iCloud 照片正在上傳」。沒有 Pro 時,報告顯示卡頓次數、ping、位元速率和流量;Kilobat Pro 會列出每個原因和應如何調整。發生卡頓的工作階段結束後會傳送通知(設定 › 串流 › 雲端遊戲報告,以及「工作階段卡頓後通知」)。最近 200 份報告保存在此 Mac 上。
在終端機中,kilobat cloud-gaming(或 cloud-gaming status)顯示目前工作階段,kilobat cloud-gaming reports 顯示以往工作階段,兩者均支援 --json。AI 代理程式使用唯讀的 get_cloud_gaming。請參閱在 Mac 上玩雲端遊戲,其中包含 GeForce NOW、Xbox Cloud Gaming、Boosteroid、Amazon Luna 和 Shadow 的頁面。
通話模式
通話模式會在你通話時停止那些會讓通話卡頓的 App。通話開始時,Kilobat 會暫停正在執行的 Dropbox、Google Drive、OneDrive、Box、Backblaze、Arq、Creative Cloud、BT 下載用戶端等 App,並拒絕它們的新連線,所以正在進行的上傳會立刻停止。遊戲啟動器(Steam、Epic Games、Battle.net)只會在下載且沒有遊戲在前景時才被暫停,因此遊戲和它的語音聊天都能照常運作。通話一結束、你切換到其中某個 App、Kilobat 結束,或最多三小時後,一切都會立刻恢復;每次暫停前都會寫下一份清單,確保即使當機也不會有 App 一直停在暫停狀態。Apple 本身的 iCloud 和更新服務不會被暫停。在「設定」›「網路」›「通話模式」›「選擇⋯」中選擇要暫停的 App,也可以在這裡設定通話期間暫停 AirDrop(每次通話開始時,macOS 會要求輸入密碼)。之後,通話卡片會說明通話模式暫停了哪些 App。通話模式是 Kilobat Pro 的功能。
會前檢查
打開「設定」›「網路」›「會前檢查」,並允許取用行事曆一次。在附有 Zoom、Google Meet、Microsoft Teams、FaceTime、Webex、Whereby 或類似連結的行程開始前約五分鐘,Kilobat 會花十秒檢查其他 App 的流量、Wi-Fi、向網際網路傳送 100 次快速 ping、AirDrop 和 Mac 的負載。只有在有東西會讓通話卡頓時才會通知你,例如「Dropbox 正在上傳,Wi-Fi 訊號弱」;使用 Kilobat Pro 時,通知中有一個按鈕,可以暫停這些 App 直到通話結束。行事曆只會在這台 Mac 上讀取,會議的任何資訊都不會被保存或傳送到任何地方。
到遊戲伺服器的 ping
該排哪個區域?在「速度」›「遊戲伺服器」中打開遊戲選擇器,搜尋你的遊戲,然後按一下「Ping 伺服器」。Kilobat 會向該遊戲的每個資料中心各 ping 五次,每次幾個,並依 ping 中位數列出,附上抖動和封包遺失,最近的排在最前面,標為最適合你。2 ms 以內更穩定的區域會優先於波動較大的區域。大約需要五秒,而且只在你要求時執行。選擇器會先列出你最近用過的遊戲,再依遊玩人數列出所有遊戲。
ping 的目標取決於每個遊戲在哪裡公布或託管伺服器,而這個數字一律是你到該區域資料中心的 ping,而不是到你最後進入的對局伺服器的 ping,後者可能會稍高一些:
- Valve 中繼,適用於 Counter-Strike 2、Dota 2、Deadlock 和 Team Fortress 2:Valve 在每個資料中心的中繼,來自 Steam 為每個遊戲發布的中繼清單。這些遊戲的配對流量會經過這些中繼,CS2 本身的
net_print_sdr_ping_times量的也是同樣的中繼。 - Epic ping 伺服器,適用於 Fortnite:Epic 為每個配對子區域指定的 ping 伺服器。如果網路阻擋 ping,Kilobat 會改為測量到它的 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 信標傳送 PlayFab 的延遲探測;如果某個區域沒有信標(UK West),則測量到該區域 Azure Storage 的 TCP 連線時間。
- 官方測試主機,適用於 Brawlhalla 和 Hunt: Showdown 1896:Brawlhalla 說明頁面為每個區域列出的 ping 測試主機(它們不回應 ping,所以用 TCP 計時),以及 Crytek 為 Hunt 的歐洲和美國東部區域公布的兩個測試位址。
沒有公布任何可 ping 目標的遊戲會在選擇器中列出並註明原因,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 會查看前景的遊戲,或最近一個在前景的遊戲(「遊戲」類別中的 App、Steam 遊戲庫中的遊戲,或 CrossOver、Whisky、Wine 中的 Windows 遊戲),找出它交換 UDP 資料最多的伺服器(不計網頁、DNS 和語音通話建立的流量),顯示 DB-IP 登記該位址的國家或地區(如果是 Valve 的中繼,則顯示 Valve 資料中心),並 ping 它五次。很多遊戲伺服器不回應 ping;這時 Kilobat 會顯示「此伺服器不回應 ping」,而不是顯示封包遺失。有些遊戲會從 macOS 未標示位址的連線傳送資料,Kilobat 會說明它看不到這些遊戲的伺服器。
按一下用於疊加層,就能把其中任一個 ping 放到直播上:疊加層接著每秒 ping 一次該資料中心或你對局的伺服器,並在膠囊上顯示名稱,例如「CS2 · Frankfurt」或「Match · Germany」;如果是對局,它每 30 秒會重新尋找一次伺服器。在終端機中,kilobat games 列出遊戲,kilobat games --game aoe4 輸出某個遊戲的表格和疊加層目標,kilobat games --match 檢查你的對局,kilobat overlay --target aoe4:westeurope 或 --target match 把它推送到直播;AI 代理程式使用 get_game_ping。
直播疊加層
在串流中顯示即時 ping。開啟「設定 › 串流 › 串流覆蓋層」,然後在 OBS、Streamlabs 或任何串流 App 中將 http://localhost:7171/ 加入為瀏覽器來源(640 × 80 已足夠)。一個小膠囊顯示 ping、抖動、封包遺失和過去一分鐘的折線。預設 ping 網際網路(1.1.1.1);可在設定旁邊或從遊戲伺服器中選擇路由器、目前比賽或遊戲的資料中心,膠囊會顯示其名稱;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 可以開啟。沒有 App 時,kilobat overlay 提供相同頁面直到按下 Ctrl-C;可用 --target 選擇路由器,或使用 match 或遊戲區域。要在事後了解 OBS 掉格原因並在直播前檢查上傳速度,請參閱OBS 串流報告。