From d7b34689b665939424a2392feb2232e60a4219ef Mon Sep 17 00:00:00 2001 From: KIMI Date: Sun, 9 Aug 2026 00:01:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20LiveKit=20=E8=87=AA=E6=B5=8B=E6=94=B9?= =?UTF-8?q?=E5=8F=91=E7=9C=9F=E5=AE=9E=E9=9F=B3=E9=A2=91=E8=BD=A8(--publis?= =?UTF-8?q?h=20ogg)=20+=20=E8=A2=AB=E5=8F=AB=E6=98=BE=E5=BC=8F=20--auto-su?= =?UTF-8?q?bscribe(cli=20v2=20=E9=BB=98=E8=AE=A4=20false);=20=E5=86=85?= =?UTF-8?q?=E7=BD=AE=2030s=20opus=20=E6=B5=8B=E8=AF=95=E9=9F=B3=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/assets/test-tone.ogg | Bin 0 -> 139986 bytes scripts/selftest.sh | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 scripts/assets/test-tone.ogg diff --git a/scripts/assets/test-tone.ogg b/scripts/assets/test-tone.ogg new file mode 100644 index 0000000000000000000000000000000000000000..987924d0b5688b2a4d95b8e1361b14c286a1e7c6 GIT binary patch literal 139986 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/dev/null 2>&1 + room join --identity caller --publish /data/test-tone.ogg "$ROOM" >/dev/null 2>&1 +# 被叫端必须显式开自动订阅(livekit-cli v2 的 --auto-subscribe 默认为 false) docker run -d --name lk-callee --network host "$LK_CLI_IMAGE" \ --url "$LK_WS" --api-key "$LK_KEY" --api-secret "$LK_SECRET" \ - room join --identity callee "$ROOM" >/dev/null 2>&1 + room join --identity callee --auto-subscribe "$ROOM" >/dev/null 2>&1 sleep 10 plist=$(lk "$LK_HTTP" room participants list "$ROOM" 2>&1) @@ -160,16 +162,16 @@ else fail "房间成员不符,list 输出: $(echo "$plist" | head -c 300)" fi -# 主叫发布了媒体轨道(publish-demo 会发布音视频 demo 轨) -if echo "$plist" | grep -qi "MICROPHONE\|AUDIO"; then +# 主叫应已发布音频轨(kind=AUDIO) +if echo "$plist" | grep -qi "AUDIO"; then pass "主叫音频轨道已发布" else note "未从成员列表确认音频轨道(可能输出格式差异),请人工核对: lk room participants list" fi -# 被叫端日志应出现订阅到轨道的记录 -if docker logs lk-callee 2>&1 | grep -qi "track"; then - pass "被叫端已接收到主叫的媒体轨道(一对一语音链路打通)" +# 被叫端日志应出现 track subscribed(媒体链路打通的直接证据) +if docker logs lk-callee 2>&1 | grep -qi "track subscribed"; then + pass "被叫端已订阅到主叫的音频轨道(一对一语音链路打通)" else fail "被叫端日志未见轨道订阅记录: $(docker logs lk-callee 2>&1 | tail -5)" fi