Browse Source

上传音频数据

newdev_chengguofeng
liwei1dao 3 months ago
parent
commit
c76df2d461
  1. 15
      local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt

15
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) private val isAudioSending = AtomicBoolean(false)
// 上一包音频实际发送的时间戳(ms),仅用于发送节拍日志统计间隔;-1 表示尚未发送过 // 上一包音频实际发送的时间戳(ms),仅用于发送节拍日志统计间隔;-1 表示尚未发送过
private var lastAudioSendTime = -1L private var lastAudioSendTime = -1L
// 上一次真正 BLE write(gatt.writeCharacteristic)的时间戳(ms),用于逐包日志统计相邻 write 间隔;
// 与 lastAudioSendTime(拍级)区分:一拍拆多写时这里能反映每个真实 BLE 包的下发节奏。-1 表示尚未 write 过
private var lastBleWriteTime = -1L
// 下行写入连续失败(底层发送缓冲拥塞)的计数,用于节流告警与恢复提示;写成功即清零 // 下行写入连续失败(底层发送缓冲拥塞)的计数,用于节流告警与恢复提示;写成功即清零
private var writeFailRetryCount = 0 private var writeFailRetryCount = 0
// 因静音帧模板尚未就绪而暂缓下发的连续拍数,用于节流告警;一旦模板就绪即清零 // 因静音帧模板尚未就绪而暂缓下发的连续拍数,用于节流告警;一旦模板就绪即清零
@ -1694,6 +1697,7 @@ object BleService {
var writeCount = 0 var writeCount = 0
var congested = false var congested = false
while (sentFrames < n) { while (sentFrames < n) {
val startFrame = sentFrames
val chunkFrames = minOf(framesPerWrite, n - sentFrames) val chunkFrames = minOf(framesPerWrite, n - sentFrames)
val packet = buildInterleavedPacket(sentFrames, chunkFrames, frameBytes, leftFrames, rightFrames, silence) val packet = buildInterleavedPacket(sentFrames, chunkFrames, frameBytes, leftFrames, rightFrames, silence)
// 同步写入,拿到真实的成功/失败:false=底层发送缓冲已满(拥塞),作为背压信号 // 同步写入,拿到真实的成功/失败:false=底层发送缓冲已满(拥塞),作为背压信号
@ -1704,6 +1708,16 @@ object BleService {
sentFrames += chunkFrames sentFrames += chunkFrames
sentBytes += packet.size sentBytes += packet.size
writeCount++ 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) { if (congested) {
@ -1815,6 +1829,7 @@ object BleService {
audioBuffer.clear() // 清空音频缓冲区 audioBuffer.clear() // 清空音频缓冲区
packetSeq = 0 // 复位下行包序号 packetSeq = 0 // 复位下行包序号
lastAudioSendTime = -1L // 重置发送节拍计时,下次首包 Δ 从 0 开始 lastAudioSendTime = -1L // 重置发送节拍计时,下次首包 Δ 从 0 开始
lastBleWriteTime = -1L // 重置逐包 write 计时,下次首个 BLE write 的 Δw 从 0 开始
writeFailRetryCount = 0 // 重置写入拥塞计数 writeFailRetryCount = 0 // 重置写入拥塞计数
silenceNotReadyCount = 0 silenceNotReadyCount = 0
silentPacketCount = 0 silentPacketCount = 0

Loading…
Cancel
Save