From c76df2d4618d59cf117d77b4637d5b242a3752c7 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 15 Jul 2026 16:04:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E9=9F=B3=E9=A2=91=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunqiinnovation/ble_service/BleService.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt index 54dad8aa4..be69391f8 100644 --- a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt +++ b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt @@ -144,6 +144,9 @@ object BleService { private val isAudioSending = AtomicBoolean(false) // 上一包音频实际发送的时间戳(ms),仅用于发送节拍日志统计间隔;-1 表示尚未发送过 private var lastAudioSendTime = -1L + // 上一次真正 BLE write(gatt.writeCharacteristic)的时间戳(ms),用于逐包日志统计相邻 write 间隔; + // 与 lastAudioSendTime(拍级)区分:一拍拆多写时这里能反映每个真实 BLE 包的下发节奏。-1 表示尚未 write 过 + private var lastBleWriteTime = -1L // 下行写入连续失败(底层发送缓冲拥塞)的计数,用于节流告警与恢复提示;写成功即清零 private var writeFailRetryCount = 0 // 因静音帧模板尚未就绪而暂缓下发的连续拍数,用于节流告警;一旦模板就绪即清零 @@ -1694,6 +1697,7 @@ object BleService { var writeCount = 0 var congested = false while (sentFrames < n) { + val startFrame = sentFrames val chunkFrames = minOf(framesPerWrite, n - sentFrames) val packet = buildInterleavedPacket(sentFrames, chunkFrames, frameBytes, leftFrames, rightFrames, silence) // 同步写入,拿到真实的成功/失败:false=底层发送缓冲已满(拥塞),作为背压信号 @@ -1704,6 +1708,16 @@ object BleService { sentFrames += chunkFrames sentBytes += packet.size writeCount++ + // 逐包(每次真正 BLE write)的大小与相邻间隔:size=本包字节数(=2×chunkFrames×frameBytes,lrlr 交织)、 + // Δw=距上次 write 间隔ms、off=本包起始帧号(一拍拆多写时用来核对交织续接)。 + // Δw 无论真实/静音都更新以保持准确;日志仅在有真实译音时逐包打,纯静音沿用拍级节流不刷屏。 + val wnow = System.currentTimeMillis() + val wDelta = if (lastBleWriteTime < 0) 0 else wnow - lastBleWriteTime + lastBleWriteTime = wnow + if (hasRealAudio) { + CallLog.i(TAG, "BLE write seq=$packetSeq #$writeCount size=${packet.size}B Δw=${wDelta}ms " + + "帧=${chunkFrames}/声道(lrlr) off=$startFrame") + } } if (congested) { @@ -1815,6 +1829,7 @@ object BleService { audioBuffer.clear() // 清空音频缓冲区 packetSeq = 0 // 复位下行包序号 lastAudioSendTime = -1L // 重置发送节拍计时,下次首包 Δ 从 0 开始 + lastBleWriteTime = -1L // 重置逐包 write 计时,下次首个 BLE write 的 Δw 从 0 开始 writeFailRetryCount = 0 // 重置写入拥塞计数 silenceNotReadyCount = 0 silentPacketCount = 0