问题排查#
对于任何组件的任何崩溃或问题排查帮助
请向 NVIDIA 报告以下内容
组件和相关组件的完整日志(理想情况下是所有日志)。请参阅下面的简短脚本,以收集部署设置中的所有 Pod 日志 -
#!/bin/bash
for pod in $(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
do
#depending on logs, this may take a while
kubectl logs --all-containers $pod > $pod.txt
done
捕获 nvidia-smi 或等效的 GPU 利用率数据
捕获 CPU 和内存利用率数据
从 UI 捕获控制台日志
如果适用,请分享互动视频。
UI 和 Iframe 错误#
以下部分将介绍可能在 Tokkio UI 和 Tokkio Iframe 中出现的不同错误。
通用问题排查清单#
所有容器都已启动并运行
VPN 上的网络条件差。请参阅推荐的带宽表。
STUN/TURN 服务器已正确部署、配置且可在 VST 中访问。请参阅 Trickle ICE 部分。
UI 和 VST 容器之间没有版本不匹配。请参阅 Tokkio 文档。
麦克风和摄像头已连接到系统。
LLM 密钥已正确设置且未过期(在单独的 RAG 部署的情况下)
GPU 驱动程序已正确配置。GPU 应为推荐的 GPU 之一。请参阅 Tokkio 文档。
确保 Web 浏览器受支持。受支持的 Web 浏览器为 Chrome 和 Safari。
未找到部署#
当 UI 中 Tokkio 部署的位置配置错误时,会出现此错误。
在 Tokkio UI 中的外观#

在 Iframe 中的外观#

解决方法#
如果部署 UI 或 Iframe 时没有部署脚本,请首先确保 Tokkio 部署是健康的且可访问的。这可以通过访问 /health 端点来完成,使用以下 cURL 命令
curl http(s)://<ingress endpoint>/health
如果部署是健康的,您应该在响应有效负载中看到不健康服务的空列表。
$ curl http://10.128.34.39:30888/health
{"unhealthy_services":[],"healthy_services":["....", "....."]}
如果端点未按预期响应,您必须确保部署正在运行,并且客户端可以访问您在其上运行部署的计算机。
在您验证部署是健康之后,请确认部署端点已在 UI 中正确配置。在 Tokkio Iframe 中,这是 INGRESS_ENDPOINT
配置选项,在 Tokkio UI 中,这是 UI_SERVER_ENDPOINT
选项。花时间阅读 配置 或 配置 的文档,以确保正确配置了部署。
如果使用部署脚本部署 UI,请确保 未 设置上述部署位置配置,这些配置将由部署脚本自动设置。
头像流未连接#
启动时,UI 将获取用户的视频和音频流,连接到 VST 微服务 WebSocket,然后建立用于头像视频的 webRTC 连接。如果此过程的任何部分失败,则会出现此错误。
在 Tokkio UI 中的外观#

在 Iframe 中的外观#

解决方法#
出现此错误可能有多种原因。
如果 Tokkio 或 UI 是通过 HTTP 而不是 HTTPS 部署的,则需要在用户的浏览器中设置浏览器标志,以将 Tokkio 和 UI 部署端点视为安全。在 Google Chrome 上,通过导航到
chrome://flags
URL,打开将不安全来源视为安全来源
选项,然后将不安全的 Tokkio 端点添加到文本框中来完成此操作。这通常是一个类似于这样的字符串:http://<入口 IP:端口>,ws://<入口 IP:端口>
。浏览器窗口必须有权访问用户的麦克风。如果通过远程桌面部署,系统上将没有麦克风,并且会出现此错误。如果启用了摄像头,则浏览器还必须有权访问摄像头。
如果任何用户在其浏览器中打开了多个 UI,则这可能会导致后端丢失流总数的跟踪,并且无法通知 UI 没有容量。在这种情况下,WebSocket 连接将被拒绝,并且会出现此错误。
coturn 服务器必须在 VST 微服务中正确配置。如果 coturn 未正确设置,则头像轮将长时间旋转,然后才显示错误。
如果未使用部署脚本部署 UI,请确保 VST 端点已在 UI 中正确配置。在 Tokkio Iframe 中,这是
VST_ENDPOINT
配置选项,在 Tokkio UI 中,这是VST_WEBSOCKET_ENDPOINT
选项。花时间阅读 UI 或 Iframe 的文档,以确保正确配置了部署。如果使用部署脚本部署 UI,请确保 未 设置上述部署位置配置,这些配置将由部署脚本自动设置。
可以检查浏览器日志以缩小问题范围。
容量已满#
当 UI 连接到 Tokkio 时,但所有流都已被其他人使用时,会出现此错误。
在 Tokkio UI 中的外观#

在 Iframe 中的外观#

解决方法#
确保使用系统的人数少于可用流的数量。关闭 UI 后,该 UI 使用的流将在一两分钟后释放。
无效令牌#
当用户尝试在没有会话令牌的情况下调用 Tokkio 中的端点时,会出现此错误。
在 Tokkio UI 中的外观#

在 Iframe 中的外观#
头像将出现片刻,然后显示容量已满错误消息。控制台日志可能会显示 HTTP 400
错误。

解决方法#
确保在您的浏览器中启用了 Cookie。清除您的 Cookie 和历史记录,并且不要在隐身模式下打开 Tokkio。
SDR 错误报告#
当其中一个后端服务崩溃然后恢复时,会出现此错误。
在 Tokkio UI 中的外观#

在 Iframe 中的外观#
此错误不会在 Iframe 中出现,故障将静默发生。如果头像视频或 Tokkio 功能突然停止工作,则可能是发生了崩溃。
解决方法#
通过重启失败的 Pod,错误已自行解决。重启 UI 以恢复正常。
推荐的网络带宽#
对于每个指定的分辨率,网络带宽应介于最小比特率到最大比特率范围之间。如果网络带宽较低,视频将卡顿或冻结。会出现阻塞伪影。如果网络带宽太低且不稳定,也可能导致断开连接。带宽值高于最大比特率是无害的,因为它不会被系统利用。
分辨率 |
最小比特率 (Mbps) |
最佳比特率 (Mbps) |
最大比特率 (Mbps) |
---|---|---|---|
3820 x 2160 (4k) |
30 |
40 |
80 |
2460 x 1440p (2k 或 QHD) |
15 |
20 |
40 |
1920 x 1080 (1k 或 FHD) |
5 |
10 |
20 |
1280 x 720 (HD) |
2 |
5 |
10 |
854 x 480 (FWVGA) |
0.8 |
3 |
5 |
Trickle ICE#
检查 ICE 服务器功能是否正常运行的简单方法是使用 WebRTC 的 Trickle ICE 功能的测试工具。Trickle ICE 是一种允许逐步收集和共享 ICE 候选(潜在连接路径)的技术,这可以加快连接过程。Trickle ICE 不适用于 RP 或反向代理的情况。
测试 STUN 服务器:如果收集到类型为 “srflx” 的候选,则 STUN 服务器测试成功。
测试 TURN 服务器:如果收集到类型为 “relay” 的候选,则 TURN 服务器测试成功。
凭据测试:当测试单个 TURN/UDP 服务器时,页面可以检测是否使用了不正确的凭据进行身份验证。
详细信息:页面显示一个表格,其中包含有关每个收集到的候选的详细信息,包括时间、类型、基础、协议、地址、端口、优先级以及适用时的其他详细信息。

添加 stun 或 turn URI 信息,然后单击“添加服务器”。例如,
STUN or TURN URI: turn:15.266.16.245:3478
TURN username: coturn-admin
TURN password: "Uq3CFRYKr6rFVFcc

单击 Gather candidates 以生成 ICE 候选。如果您看到正在生成中继候选,则表示 ICE 服务器工作正常。
麦克风或摄像头访问被拒绝#
如果麦克风访问成功,录制图标将出现在浏览器选项卡中。如果图标未出现或 UI 给出麦克风权限被拒绝的错误,请按照以下步骤操作。可能有多种原因。
在 UI 中的外观#

以下情况下会发生此错误。
麦克风未连接到系统#
解决方法#
确保工作正常的麦克风已连接到系统,并且电缆没有松动。
用户在权限提示中拒绝了麦克风访问#
浏览器将询问用户是否允许麦克风访问权限。如果用户单击提示外部或拒绝了该提示,则浏览器将记住此设置,并且每次 UI 尝试访问麦克风时,浏览器都会拒绝。
在 UI 中的外观#

解决方法#
要解决此问题,用户需要清除或重置尝试访问麦克风的网页的浏览器权限。在 Google Chrome 中重置麦克风权限的设置位于“设置/隐私和安全/网站设置”。
麦克风故障
尝试使用另一个应用程序从麦克风录音,并检查其是否处于工作状态。访问 Google WebRTC getusermedia 音频 示例网页,并检查麦克风访问是否在那里工作。
GetUserMedia API 存在问题,并且浏览器无法访问麦克风
有时,如果 Web 浏览器的 getUserMedia() API 注意到麦克风访问被滥用,则可能会阻止对麦克风的访问。这种情况很少见。在这些情况下,重启系统(UI 打开的位置)可以解决该问题。访问 Google WebRTC getusermedia 音频 示例网页,并检查麦克风访问是否在那里工作以进行确认。
黑屏 Tokkio UI,非 WebRTC#
如果 Tokkio UI 应用程序无法建立一致的 WebSocket 连接,则视频播放器中可能会出现黑屏。本节将介绍与黑屏相关的非 WebRTC 问题。
以下情况下会发生此错误。
未设置 Chrome 标志(开发设置)#
如果 Tokkio UI 部署不在生产环境中,并且正在使用 UI 开发设置,则设置不正确的 Chrome 标志将导致 WebSocket 连接失败。开发设置并非理想选择,用户需要针对 Web 浏览器中与 CORS 和安全性相关的问题进行解决方法。
解决方法#
为了绕过这些安全问题,用户需要设置 unsafely-treat-insecure-origin-as-secure Chrome 标志。该值应为 Tokkio UI 托管的域名。请注意,更改这些设置后需要重新启动 Chrome。
Ingress 未配置用于 WebSocket#
如果 Ingress 未配置为处理 WebSocket 连接,则 WebSocket 连接将失败。
解决方法#
WebSocket 连接涉及 HTTP 升级请求。Ingress 需要配置为处理此升级请求。
会话在几秒钟内突然结束#
会话可能会开始,但在几秒钟内突然结束。这是 WebSocket 连接在几秒钟内断开连接的结果。一致的 WebSocket 连接是 Tokkio UI 的要求。
WebSocket 连接已关闭,因为没有数据在其中流动#
默认情况下,如果大多数 Ingress 观察到没有数据流过 WebSocket 连接,则会断开该连接。
解决方法#
解决方案是通过 Tokkio UI 配置启用 WebSocket ping 消息。这将确保每隔几秒钟发送一次虚拟数据。
WebSocket 连接已关闭,因为 ping-pong 的频率#
如果 ping 消息的频率低于 Ingress 中设置的 WebSocket 超时时间,则 WebSocket 连接可能会断开。即使在 Tokkio UI 配置中启用了 WebSocket ping,也可能发生发送的 ping 消息的频率低于 Ingress 中配置的断开连接设置。
解决方法#
通过 Tokkio UI 配置增加频率将解决该问题。
头像视频卡顿或冻结,随后偶尔会话关闭#
如果其他一切正常,但出现视频卡顿问题、视频冻结问题和偶尔的连接断开,请检查以下情况。
网络连接速度慢#
如果网络速度慢,则可能会出现此问题。
解决方法#
使用任何在线速度测量工具检查网络速度。确保如果您正在使用 VPN,则 VPN 没有限制连接速度。确保您通过 VPN 连接到的位置不太远。请参阅分辨率与比特率表。
VST 未配置用于头像分辨率#
VST 有一个名为 webrtc_video_quality_tunning 的配置,用于设置不同分辨率的比特率范围。
解决方法#
确保比特率设置是实际的。例如,720p 流的高比特率要求是不切实际的。确保网络可以提供该比特率所需的带宽。
客户端 CPU 使用率过高#
如果 CPU 使用率在打开 Tokkio UI 的客户端过高,UI 可能无法获得足够的资源来流式传输头像。在这种情况下,视频可能会卡顿。
解决方法#
在 Windows 中使用任务管理器检查 CPU 使用率。
网络拥塞#
如果网络拥塞,则会导致频繁丢包和低质量的流媒体。
解决方法#
查看 WebRTC 统计信息,确保网络未拥塞。请参阅 WebRTC 统计信息部分。
Tokkio 视觉调优#
要禁用 VisionAI 或用户注意力功能,请访问 禁用 Tokkio 视觉。要更改用户注意力的灵敏度,请访问:Metropolis 用户占用和参与度警报
从 SDR 手动触发 ADD / REMOVE 调用#
发送 “CAMERA_ADD” Redis 消息到 vst_events 以触发 SDR ADD 调用
$ xadd vst_events * sensor.id "{\"alert_type\":\"camera_status_change\",\"created_at\":\"2024-09-26T18:00:17Z\",\"event\":{\"camera_id\":\"3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_name\":\"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_url\":\"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"change\":\"camera_add\"},\"source\":\"vst\"}\n"
$ xadd vst_events * sensor.id "{\"alert_type\":\"camera_status_change\",\"created_at\":\"2024-09-26T18:00:19Z\",\"event\":{\"camera_id\":\"3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_name\":\"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_url\":\"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"change\":\"camera_streaming\"},\"source\":\"vst\"}\n"
检查 SDR 日志以确保已发出 ADD 调用
$ kubectl logs -f chat-controller-sdr-envoy-sdr-deployment-bb5dd6588-rmhp7 --tail 1
2024-09-26 19:44:33 lib.podprovisioner.provisionconfig - INFO - Starting add call
2024-09-26 19:44:33 lib.podprovisioner.provisionconfig - INFO - adding camera at http://192.168.33.193:9010/add
2024-09-26 19:44:33 lib.podprovisioner.provisionconfig - INFO - payload: {
"alert_type": "camera_status_change",
"created_at": "2024-09-26T18:00:17Z",
"event": {
"camera_id": "3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"camera_name": "webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"camera_url": "rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"change": "camera_add"
},
"source": "vst"
}
2024-09-26 19:44:33 lib.podprovisioner.provisionconfig - INFO - add operation Response Code: 200
2024-09-26 19:44:33 lib.podprovisioner.provisionconfig - INFO - add operation text return: {
"status" : "STREAM_ADD_SUCCESS"
}
2024-09-26 19:44:33 __main__ - INFO - add operation success updating
the Route mapping
ace-agent-chat-controller-deployment-0: |-
[
{
"alert_type": "camera_status_change",
"created_at": "2024-09-26T18:00:17Z",
"event": {
"camera_id": "3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"camera_name": "webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"camera_url": "rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37",
"change": "camera_add"
},
"source": "vst"
}
]
发送 “CAMERA_REMOVE” Redis 消息到 vst_events 以触发 SDR REMOVE 调用
$ xadd vst_events * sensor.id "{\"alert_type\":\"camera_status_change\",\"created_at\":\"2024-09-26T18:01:15Z\",\"event\":{\"camera_id\":\"3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_name\":\"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"camera_url\":\"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37\",\"change\":\"camera_remove\"},\"source\":\"vst\"}\n"
检查 SDR 日志以确保已发出 REMOVE 调用
请参阅类似的说明以检查 ADD 调用
2024-09-26 19:46:01 werkzeug - INFO - 169.254.3.1 - - [26/Sep/2024 19:46:01] "GET /healthz HTTP/1.1" 200 -
2024-09-26 19:46:01 werkzeug - INFO - 169.254.3.1 - - [26/Sep/2024 19:46:01] "GET /healthz HTTP/1.1" 200 -
2024-09-26 19:46:02 __main__ - INFO - id: 1727379962895-0, content: {'sensor.id': '{"alert_type":"camera_status_change","created_at":"2024-09-26T18:01:15Z","event":{"camera_id":"3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_name":"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_url":"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37","change":"camera_remove"},"source":"vst"}\n'}
2024-09-26 19:46:02 __main__ - INFO - {'sensor.id': '{"alert_type":"camera_status_change","created_at":"2024-09-26T18:01:15Z","event":{"camera_id":"3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_name":"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_url":"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37","change":"camera_remove"},"source":"vst"}\n'}
2024-09-26 19:46:02 __main__ - INFO - {"alert_type":"camera_status_change","created_at":"2024-09-26T18:01:15Z","event":{"camera_id":"3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_name":"webcam_3477c96b-5e3d-492f-8a5c-3682df2c3b37","camera_url":"rtsp://192.168.33.235:30554/webrtc/3477c96b-5e3d-492f-8a5c-3682df2c3b37","change":"camera_remove"},"source":"vst"}
2024-09-26 19:46:02 __main__ - INFO - deprovision stream
发送到 Tokkio 参考工作流程的查询未收到响应#
确保用于语音输入的麦克风功能正常
Tokkio 的参考工作流程还需要功能正常的摄像头输入,以检测摄像头视野中是否有人存在
检查聊天控制器 pod 的日志,以确保检测到输入的语音
检查聊天引擎 pod 和插件服务器的日志,查找检索响应时是否出现错误
如果需要更多信息,请联系 Tokkio 支持联系人。
多个并发会话中头像口吃或意外停止说话#
当计算资源负载过高时,头像语音可能会变得不流畅。发生这种情况时,Audio2Face-3D 推理和 blendshape 求解可能会减慢速度,导致动画卡顿。在 Audio2Face-3D 微服务日志中可以找到如下条目的证据
正在以 X FPS 流式传输 <stream ID>
其中 X 低于 30。
如果发生这种情况,请尝试减少并发会话的数量,以获得更流畅的体验。
Tokkio 参考工作流程未检测到用户存在#
确保用于语音输入的麦克风功能正常
Tokkio 的参考工作流程还需要功能正常的摄像头输入,以检测摄像头视野中是否有人存在
检查聊天控制器 pod 的日志,以检查是否检测到输入的语音
重启占用警报 pod 并重试
如果需要更多信息,请联系 Tokkio 支持联系人。请在您的支持请求中包含系统日志和设置配置的详细描述。
Triton pod 在 T4 GPU 上使用 Parakeet 模型时崩溃#
用户可以尝试以下几种选项。
1. 更改 Tokkio 4.1 使用的模型 asr_conformer_en_us_streaming_throughput_flashlight_vad:2.15.0-tokkio。我们可以通过在部署时传递以下 user_override_value 来实现相同的目的。
riva-api: modelRepoGenerator: ngcModelConfigs: triton0: models: - nvidia/ace/asr_conformer_en_us_streaming_throughput_flashlight_vad:2.15.0-tokkio - nvidia/riva/rmir_tts_fastpitch_hifigan_en_us_ipa:2.17.0
您可以参考如何使用 无需重建即可集成自定义更改 将 user_override_value 传递给 OneClick 脚本。
pod 将重启几次以进行全新部署,然后最终启动。如果 pod 在多次重启后仍未自动启动(在使用一键部署时),则可能需要手动重启 pod。
使用一键式脚本安装新应用程序时,ASR 和 TTS 无法工作#
检查 GPU 是否对 Riva init 容器不可用(NVML 错误)。模型部署以 ONNX 格式进行,不受支持,因此 Triton 容器随后会失败。
$ kubectl exec -it triton0-bbd77d78f-22dr8 -c riva-model-init /bin/bash -n app group ID 1000 I have no name!@triton0-bbd77d78f-22dr8:/opt/riva$ nvidia-smi Failed to initialize NVML: Unknown Error
请尝试 NVIDIA Github 中的建议
如果需要更多信息,请联系 Tokkio 支持联系人。请在您的支持请求中包含系统日志和设置配置的详细描述。
UE 应用程序在全新部署中无法在三个流上工作#
在重试之前,删除 renderer-sdr、ue-renderer 和 VMS pod。
即使用户在 FOV 中,也未检测到用户存在#
卸载 tokkio 应用程序
删除 pvc vms-local-storage、ds-sdr-envoy-agent-storage 并删除 mongodb、ds-sdr、vms、redis-data 的 pv
再次部署应用程序并检查。
使用 CSP 指南时的其他故障排除技巧#
在 AWS 中,在应用程序安装期间,脚本可能会由于 AWS 证书更改而显示 IAC 更改,用户必须重新运行基础架构,然后部署应用程序
更新密钥不会显示修改后的数据,也不会重启 pod,用户必须手动重启 pod
升级应用程序不会重启所有 UE pod,必须重启所有 UE pod 才能在所有三个客户端上提供流
升级 VMS cm 不会重启 pod,必须手动重启 pod
自定义未反映在已部署的体验中#
如果执行的自定义未反映在已部署的体验中,您可以执行以下几项检查来调试
检查执行的自定义是覆盖还是应用程序规范。部署 Tokkio chart 时,覆盖值文件中的值用于更新应用程序规范。确保预期的自定义在正确的文件中被引用,并且没有被覆盖值文件中的条目覆盖。
检查预期的自定义是否需要 chart 重建。请参阅 自定义参考工作流程,了解常见自定义及其关于 chart 重建必要性的指示。
头像一直说 “我们遇到了技术难题”#
Tokkio 的默认 chart 使用 LLM-RAG 参考工作流程,该工作流程配置为将查询发送到基于 NIM 的模型 (meta/llama3-8b-instruct)。要访问此 NIM 端点,需要在 API 目录中获得 API 积分。通常,在没有足够积分的情况下,机器人会回复 “我们遇到了技术问题”。可以通过在发出查询时检查 plugin-server-deployment
Kubernetes pod 的日志来确认问题。
如果使用自定义 chart,请确保您连接到与为您的 Tokkio LLM RAG 参考工作流程的自定义版本实现的消息解析兼容的 RAG 或 LLM。请参阅 插件服务器资源自定义,以获得有关可以为参考工作流程执行的各种自定义的指导。
确保分析日志,特别是来自 plugin-server-deployment
和 chat-engine-deployment
kubernetes pod 的日志,以便找出问题的根本原因。请参阅 故障排除,以获得有关收集日志的指导。
高级诊断工具和技术#
WebRTC 统计信息#
Chrome 提供了一种以用户友好的方式获取 WebRTC 统计信息的机制。WebRTC 统计信息可以提供有关网络状况、帧率、分辨率、音频信息、编解码器和许多其他有用信息的良好信息。要检查 WebRTC 统计信息,请在单独的 Chrome 标签页中打开 chrome://webrtc-internals。在 WebRTC 内部标签页中,我们可以看到每个对等连接的信息。在下面的图像中,我们可以看到有两个对等连接,一个用于入站流(头像),另一个用于出站流(麦克风)

要检查入站流(头像)统计信息,请查找 inbound-rtp 的“统计信息图表”部分。请查看下面的图像以供参考。

使用这些统计信息,我们可以观察各种有用的指标,如丢帧、nack 计数、pli 计数、帧率、比特率、丢包、抖动等。这些指标对于调试任何网络相关问题都很有用。
使用这些统计信息,我们可以观察各种有用的指标,如丢帧、nack 计数、pli 计数、帧率、比特率、丢包、抖动等。这些指标对于调试任何网络相关问题都很有用。
使用 VST 日志进行调试#
VST 配置:VST 配置在 VST 日志的开头打印。它可以用于检查 VST 正在运行的当前配置。
Host HTTP port: 30000 Recorded Video Root: /home/vst/vst_release/vst_video stunurl list: stun.l.google.com:19302, stun1.l.google.com:19302 static_turnurl_list: use_coturn_auth_secret: 0 use_twilio_stun_turn: 0 coturn_turnurl_list_with_secret: twilio_account_sid: twilio_auth_token: use reverse proxy RP: 0
...
Redis 服务器连接:此日志可用于检查 VST 是否能够连接到 Redis 服务器。
[2024-12-20T9:49:40.728Z:137990895721664:redis_publisher.cpp:176: redis_init] Radis server address:port= 127.0.0.1;6379 [2024-12-20T9:49:40.728Z:137990895721664:redis_publisher.cpp:187: redis_init] Redis connect success.
GRPC 服务器正在监听:此日志可用于检查 VST GRPC 服务器是否已启用并正在监听
[2024-12-20T9:49:40.853Z:137988786882112:nvgrpc.cpp:931: RunServer] gRPC Server listening on 0.0.0.0:50051
检测到 GPU:此日志可用于检查 VST 是否检测到 GPU
[2024-12-20T9:49:40.557Z:137990895721664:utils.cpp:2227: detectGPU] ############## GPU ID DETECTED = 0 ##############
[2024-12-20T9:49:40.557Z:137990895721664:utils.cpp:2228: detectGPU] ############## GPU Device = /dev/nvidia0 ##############
检查 WebSocket 连接:此日志可用于检查 WebSocket 连接是否成功
[2024-12-20T9:50:42.164Z:137990862919232:Websocket.cpp:51: addConnection] Saving connection ID: 1380cd96-aa97-41b4-8f4f-f64f00fc6568
[2024-12-20T9:50:42.164Z:137990862919232:Websocket.cpp:64: addConnection] Memory allocated to websocket connection ID: 1380cd96-aa97-41b4-8f4f-f64f00fc6568
[2024-12-20T9:50:42.164Z:137990862919232:Websocket.cpp:66: addConnection] Total websocket connections: 1
检查对等连接:检查 WebRTC 对等连接是否成功。应该有两个这样的日志。其中一个对等 ID 以下划线一 (“_1”) 结尾的是头像流的对等连接。另一个是对等网络摄像头或麦克风流的连接。
[2024-12-20T9:50:45.223Z:137987255961152:WebrtcCallbacks.cpp:509: OnConnectionChange] Peer connection state:Connected peerid:1380cd96-aa97-41b4-8f4f-f64f00fc6568
[2024-12-20T9:50:43.484Z:137988304537152:WebrtcCallbacks.cpp:509: OnConnectionChange] Peer connection state:Connected peerid:1380cd96-aa97-41b4-8f4f-f64f00fc6568_1
头像和麦克风 Redis 事件:此日志指示是否已发送网络摄像头流的 Redis 事件。有两种类型的事件。“Camera add” 和 “Camera streaming”。以下日志与检查 Redis 事件是否工作相关。
[2024-12-20T9:50:43.485Z:137988304537152:PeerConnectionManager.cpp:2653: notify] { "alert_type" : "camera_status_change", "created_at" : "2024-12-20T09:50:43Z", "event" : { "camera_id" : "1380cd96-aa97-41b4-8f4f-f64f00fc6568", "camera_name" : "webcam_1380cd96-aa97-41b4-8f4f-f64f00fc6568", "camera_url" : "rtsp://10.41.25.10:30554/webrtc/1380cd96-aa97-41b4-8f4f-f64f00fc6568", "change" : "camera_add" }, "source" : "vst" }
[2024-12-20T9:50:43.485Z:137989615257152:redis_publisher.cpp:227: sendToRedis] Event sent to Redis Successfully
{ "alert_type" : "camera_status_change", "created_at" : "2024-12-20T09:50:45Z", "event" : { "camera_id" : "1380cd96-aa97-41b4-8f4f-f64f00fc6568", C1380cd96-aa97-41b4-8f4f-f64f00fc6568", "camera_url" : "rtsp://10.41.25.10:30554/webrtc/1380cd96-aa97-41b4-8f4f-f64f00fc6568", "change" : "camera_streaming" }, "source" : "vst" }
[2024-12-20T9:50:45.946Z:137989615257152:redis_publisher.cpp:227: sendToRedis] Event sent to Redis Successfully
头像和麦克风流的 FPS:此日志指示头像和麦克风流的 fps。UUID 以 “_out” 结尾的日志用于头像流,以 “_in” 结尾的日志用于网络摄像头流。请注意,仅当启用视频时才会显示网络摄像头的 fps。如果仅启用麦克风流,则不会打印 fps。请查看下面的示例日志以获取更多上下文。
[2024-12-20T12:32:50.739Z:137325361235520:fps_display.cpp:80: displayFPS] Unique ID = 7c4e2774-e3c2-415c-8c8b-ab3d420b92c9_1:7c4e2774-e3c2-415c-8c8b-ab3d420b92c9_1_out FPS = { 29.988873, 29.988873, 29.994843, 30.249584, 29.916251, 29.994792, 30.061507, 29.988936, 29.994792, 29.988936, 29.994843, 30.153816 }
[2024-12-20T12:33:50.7490Z:137325361235520:fps_display.cpp:80: displayFPS] Unique ID = 7c4e2774-e3c2-415c-8c8b-ab3d420b92c9_1:7c4e2774-e3c2-415c-8c8b-ab3d420b92c9_in FPS = { 29.988873, 29.988873, 29.994843, 30.249584, 29.916251, 29.994792, 30.061507, 29.988936, 29.994792, 29.988936, 29.994843, 30.153816 }
停滞的管道:当 VST 未在 UDP 连接中接收到数据时,它将打印停滞的管道日志。停滞的管道意味着 VST 的 UDP 连接未接收到头像流数据。这意味着 UDP 的 GRPC 调用成功,但 VST 未在该连接上接收到任何数据。
[2024-5-17T6:34:0.614Z:134091898877504:gstnvvideoudpclient.cpp:1192: checkVideoDataFlowStatus] Video data flow is stalled, attempt rest pipeline
GRPC 调用:要检查 GRPC 调用是否成功,可以使用以下日志。VST 通过此 GRPC 连接接收头像流数据。
[2024-12-20T9:50:43.508Z:137988407297600:nvgrpc.cpp:217: CreateUDPConnection] GRPC call CreateUDPConnection
[2024-12-20T9:50:43.508Z:137988407297600:nvgrpc.cpp:304: addDevice] addDevice
[2024-12-20T9:50:43.508Z:137988407297600:nvgrpc.cpp:141: parseFromClientRequest] GRPC Client video params codec:h264, fps:30
[2024-12-20T9:50:43.508Z:137988407297600:nvgrpc.cpp:149: parseFromClientRequest] GRPC Client audio params codec:pcm, sample_rate:16000, bps:32
[2024-12-20T9:50:43.508Z:137988407297600:nvgrpc.cpp:407: addDevice] audio_enable:1, audio_codec = pcm, sample_rate = 16000, bps = 32
报告未解决的问题#
附加 Tokkio UI 日志#
要收集 Tokkio UI 日志,请打开 Chrome 的开发者工具并转到控制台。右键单击控制台中的任意位置并保存控制台日志。确保在保存日志之前启用所有日志级别,如前所述。

附加 WebRTC 统计信息转储文件#
要收集 WebRTC 统计信息以进行日志记录和报告问题,您可以使用“创建 WebRTC 内部转储”选项下载所有 WebRTC 统计信息的转储。这将下载一个 JSON 文件,该文件可用于调试目的。确保让统计信息运行几分钟,以便它可以收集足够的数据点。

附加 VST 日志文件#
收集会话的 VST 日志。VST 日志文件可以在所有服务转储其日志的日志记录卷中找到,也可以通过 kubectl logs 命令收集。以下脚本可以从所有正在运行的容器中收集日志。请参阅 Tokkio 文档的故障排除部分,了解有关收集 pod 日志的更多信息。
#!/bin/bash
for pod in $(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
do
#depending on logs, this may take a while
kubectl logs --all-containers $pod > $pod.txt
done
附加 nvidia-smi 输出#
在终端中运行 nvidia-smi 命令并复制其输出。这包含有关 GPU 驱动程序和利用率的信息。nvidia-smi 的典型输出将类似于示例日志。

部署故障排除#
常规故障排除#
使用默认 K8s 命名空间#
在启动 Tokkio 工作流程时,如果您在配置文件中设置了 spec.app.configs.app_settings.k8s_namespace = default,则应用程序可以正常启动。但是,在卸载应用程序组件时(–component app),卸载脚本会抛出以下错误。
fatal: [app-master]: FAILED! => {"changed": false, "error": 403, "msg": "Namespace default: Failed to delete object: b'{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"namespaces \\\\\"default\\\\\" is forbidden: this namespace may not be deleted\",\"reason\":\"Forbidden\",\"details\":{\"name\":\"default\",\"kind\":\"namespaces\"},\"code\":403}\\n'", "reason": "Forbidden", "status": 403}
作为建议,避免对 spec.app.configs.app_settings.k8s_namespace 使用默认 kubernetes 命名空间。
裸金属#
某些模型部署以 ONNX 格式而不是 TRT 格式进行#
在仅重新部署 Tokkio 后端应用程序时,有时会观察到某些模型被转换为 ONNX 格式而不是 TRT 格式。这可能会导致诸如头像在 UI 上显示但不响应任何消息的问题。可以通过导航到 triton pod 日志并观察以下内容来确认此问题。
检查 triton pod 下 init 容器 riva-model-init 的日志。示例如下
kubectl logs triton0-7ccdd556bc-62qrr -c riva-model-init -n app
TensorRT is not available! Will use ONNX backend instead
此外,您可以滚动浏览 triton pod 的日志并注意到以下指示不正确转换的行。
kubectl logs triton0-7ccdd556bc-62qrr -n app
.
.
.
.
I0117 17:07:16.983936 30 server.cc:674]
+--------------------------------------------------------------+---------+--------+
| Model | Version | Status |
+--------------------------------------------------------------+---------+--------+
| fastpitch_hifigan_ensemble-English-US | 1 | READY |
| parakeet-1.1b-en-US-asr-streaming-asr-bls-ensemble | 1 | READY |
| riva-onnx-fastpitch_encoder-English-US | 1 | READY |
| riva-onnx-hifigan-English-US | 1 | READY |
| riva-onnx-parakeet-1.1b-en-US-asr-streaming-am-streaming | 1 | READY |
| riva-onnx-parakeet-1.1b-en-US-asr-streaming-vad-nn-streaming | 1 | READY |
| spectrogram_chunker-English-US | 1 | READY |
| tts_postprocessor-English-US | 1 | READY |
| tts_preprocessor-English-US | 1 | READY |
+--------------------------------------------------------------+---------+--------+
当正确转换发生时,triton pod 日志将如下所示
I0114 22:01:19.422007 30 server.cc:674]
+-------------------------------------------------------------+---------+--------+
| Model | Version | Status |
+-------------------------------------------------------------+---------+--------+
| fastpitch_hifigan_ensemble-English-US | 1 | READY |
| parakeet-1.1b-en-US-asr-streaming-asr-bls-ensemble | 1 | READY |
| riva-onnx-fastpitch_encoder-English-US | 1 | READY |
| riva-trt-hifigan-English-US | 1 | READY |
| riva-trt-parakeet-1.1b-en-US-asr-streaming-am-streaming | 1 | READY |
| riva-trt-parakeet-1.1b-en-US-asr-streaming-vad-nn-streaming | 1 | READY |
| spectrogram_chunker-English-US | 1 | READY |
| tts_postprocessor-English-US | 1 | READY |
| tts_preprocessor-English-US | 1 | READY |
+-------------------------------------------------------------+---------+--------+
要解决此问题,请卸载整个设置并重新安装。
Microsoft Azure#
来自 CDN 的旧 UI 缓存#
有时,重新安装带有配置更改的 UI 或在现有 UI 上重新安装新 UI,通过 UI 端点浏览时不会反映出来。发生这种情况是因为 Azure CDN 缓存 UI 内容,导致在浏览时仍可见旧的 UI 内容。如果要强制清除 Azure CDN 的缓存,则需要使用以下命令使 Azure CDN 的缓存失效。
source my-env-file.env
az cdn endpoint purge --resource-group '<replace-with-actual-rg-name>' --profile-name '<replace-with-cdn-profile-name>' --name '<replace-with-actual-cdn-endpoint-hostname>' --content-paths '/*'
一旦上述命令成功运行,您可以尝试访问 UI 端点,它应该会反映最新的 UI 更改。