From c8d170f2f3a3a2de5ed8a2e43d5589a1659c1eba Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Mon, 10 Nov 2025 11:33:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8D=E7=A7=B0=E8=A7=84?= =?UTF-8?q?=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ble_service/OpusAudioManager.kt | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/OpusAudioManager.kt b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/OpusAudioManager.kt index 110d502dc..f21c6f431 100644 --- a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/OpusAudioManager.kt +++ b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/OpusAudioManager.kt @@ -82,11 +82,13 @@ class OpusAudioManager { // ====================================================================================================== // Opus解码器实例 - private var opusManager: OpusManager? = null - private var option: OpusOption? = null + //解码对象 + private var decodeOpusManager: OpusManager? = null + private var decodeOption: OpusOption? = null - private var opusManager1: OpusManager? = null - private var option1: OpusOption? = null + //编码对象 + private var encodeOpusManager: OpusManager? = null + private var encodeOption: OpusOption? = null private val mainHandler = Handler(Looper.getMainLooper()) // 解码音频数据队列和处理线程 @@ -124,11 +126,11 @@ class OpusAudioManager { try { // 初始化OpusManager和OpusOption - opusManager = OpusManager() - option = OpusOption() + decodeOpusManager = OpusManager() + decodeOption = OpusOption() - opusManager1 = OpusManager() - option1 = OpusOption() + encodeOpusManager = OpusManager() + encodeOption = OpusOption() // 启动队列处理 startAudioQueueProcessing() @@ -178,10 +180,10 @@ class OpusAudioManager { audioSendQueue.clear() // 清理Opus相关资源 - opusManager = null - option = null - opusManager1 = null - option1 = null + decodeOpusManager = null + decodeOption = null + encodeOpusManager = null + encodeOption = null callback = null isInitialized = false @@ -206,14 +208,14 @@ class OpusAudioManager { sampleRate: Int = 16000, packetSize: Int = 40 ): Boolean { - if (!isInitialized || opusManager == null) { + if (!isInitialized || decodeOpusManager == null) { Log.e(TAG, "OpusManager未初始化,无法开始解码") return false } // 如果已经在解码流,先停止 - if (opusManager?.isDecodeStream == true) { - opusManager?.stopDecodeStream() + if (decodeOpusManager?.isDecodeStream == true) { + decodeOpusManager?.stopDecodeStream() Log.d(TAG, "已停止正在进行的Opus解码流") } @@ -224,7 +226,7 @@ class OpusAudioManager { } // 配置解码参数 - option?.apply { + decodeOption?.apply { setHasHead(hasHeader) setChannel(channel) setSampleRate(sampleRate) @@ -234,10 +236,10 @@ class OpusAudioManager { Log.d(TAG, "准备开始Opus数据流解码, 参数: hasHeader=$hasHeader, channel=$channel, sampleRate=$sampleRate, packetSize=$packetSize") try { - opusManager?.startDecodeStream(option, object : OnDecodeStreamCallback { + decodeOpusManager?.startDecodeStream(decodeOption, object : OnDecodeStreamCallback { override fun onDecodeStream(data: ByteArray?) { if (data != null) { - val channelCount = option?.getChannel() ?: 1 + val channelCount = decodeOption?.getChannel() ?: 1 if (channelCount >= 1) { callback?.onAudioDataDecoded(data, channelCount) } else { @@ -276,8 +278,8 @@ class OpusAudioManager { * @return 是否成功停止解码 */ fun stopDecodeStream(): Boolean { - if (opusManager?.isDecodeStream == true) { - opusManager?.stopDecodeStream() + if (decodeOpusManager?.isDecodeStream == true) { + decodeOpusManager?.stopDecodeStream() // 清理音频数据缓存 synchronized(audioDataBuffer) { @@ -303,7 +305,7 @@ class OpusAudioManager { return } - if (opusManager?.isDecodeStream == true) { + if (decodeOpusManager?.isDecodeStream == true) { // 将数据加入队列进行异步处理 audioDataQueue.offer(data) } else { @@ -320,19 +322,19 @@ class OpusAudioManager { * @return 是否成功开始编码 */ fun startEncodeStream(): Boolean { - if (!isInitialized || opusManager1 == null) { + if (!isInitialized || encodeOpusManager == null) { Log.e(TAG, "OpusManager未初始化,无法开始编码") return false } // 如果已经在编码流,先停止 - if (opusManager1?.isEncodeStream == true) { + if (encodeOpusManager?.isEncodeStream == true) { Log.d(TAG, "Opus编码流已在运行") return true } // 配置解码参数 - option1?.apply { + encodeOption?.apply { setHasHead(false) setChannel(1) setSampleRate(16000) @@ -340,7 +342,7 @@ class OpusAudioManager { } try { Log.d(TAG, "准备开始Opus数据流编码") - opusManager1?.startEncodeStream(object : OnEncodeStreamCallback { + encodeOpusManager?.startEncodeStream(object : OnEncodeStreamCallback { override fun onEncodeStream(data: ByteArray?) { Log.d(TAG, "Opus编码回调收到数据,大小: ${data?.size ?: 0} bytes") if (data != null) { @@ -386,8 +388,8 @@ class OpusAudioManager { * @return 是否成功停止编码 */ fun stopEncodeStream(): Boolean { - if (opusManager1?.isEncodeStream == true) { - opusManager1?.stopEncodeStream() + if (encodeOpusManager?.isEncodeStream == true) { + encodeOpusManager?.stopEncodeStream() stopAudioSendThread() // 停止音频发送线程 Log.i(TAG, "已停止Opus数据流编码") callback?.onEncodeStreamStateChanged(false) @@ -404,16 +406,16 @@ class OpusAudioManager { * @param data 音频数据字节数组,通常为PCM格式 */ fun writeExternalAudioData(data: ByteArray) { - if (!isInitialized || opusManager1 == null) { + if (!isInitialized || encodeOpusManager == null) { Log.e(TAG, "OpusManager未初始化") return } // 如果已经在编码流中,直接写入数据 - if (opusManager1?.isEncodeStream == true) { + if (encodeOpusManager?.isEncodeStream == true) { Log.d(TAG, "正在进行Opus编码流,写入音频数据") // 将外部音频数据写入编码流 - opusManager1?.writeEncodeStream(data) + encodeOpusManager?.writeEncodeStream(data) } else { Log.w(TAG, "Opus编码流未启动,无法写入音频数据") } @@ -428,7 +430,7 @@ class OpusAudioManager { * @return 是否正在解码 */ fun isDecoding(): Boolean { - return opusManager?.isDecodeStream == true + return decodeOpusManager?.isDecodeStream == true } /** @@ -436,7 +438,7 @@ class OpusAudioManager { * @return 是否正在编码 */ fun isEncoding(): Boolean { - return opusManager1?.isEncodeStream == true + return encodeOpusManager?.isEncodeStream == true } /** @@ -488,7 +490,7 @@ class OpusAudioManager { val audioData = audioDataQueue.take() // 阻塞等待 // 将音频数据写入Opus解码流 - opusManager?.writeAudioStream(audioData) + decodeOpusManager?.writeAudioStream(audioData) } catch (e: InterruptedException) { Log.d(TAG, "音频队列处理线程被中断")