1.雷鸟:解决发送开始录音指令后,停止不了录音bug,原因为: stop 流程阻塞在尾随线程的 Join 或仍有数据追加导致尾随循环一直跑。,调整调用顺序后解决
authorluozheng <1732036298@qq.com>
Fri, 22 Aug 2025 04:06:13 +0000 (12:06 +0800)
committerluozheng <1732036298@qq.com>
Fri, 22 Aug 2025 04:06:13 +0000 (12:06 +0800)
2.关闭录音线程高频打印

code/sdk/middleware/services/media/foundation/sample/wrapper/audio_capture_wrapper.cpp
code/sdk/zhihui/leiniao/imsl_ln/vad_at_cmd.c

index d4fda3b..c2aa2f6 100644 (file)
@@ -409,7 +409,7 @@ static void* AudioCaptureProcess(void* arg)
                     readCnt, timeStamp.time.tv_sec, timeStamp.time.tv_nsec);
             }
         }
-        MEDIA_INFO_LOG("audioCap Read readCnt = %d, size = %d", readCnt, ret);
+        // MEDIA_INFO_LOG("audioCap Read readCnt = %d, size = %d", readCnt, ret);
     }
     if (g_audioSourceProcessInput.audioFormat == OPUS) {
         AudioCapturerOggCtxDeInit();
index 8cde59f..53a0bf6 100644 (file)
@@ -79,6 +79,7 @@ static MediaThreadIdHandle g_vad_tail_thread = NULL;
 static char g_vad_live_path[256] = "/user/vad_live.pcm";
 static int g_vad_prev_status = -1;
 
+// 尾随线程,持续从文件中读取数据并喂给 VAD
 static void *VadTailThread(void *arg)
 {
     printf("VAD TailThread\n");
@@ -137,6 +138,7 @@ static void *StartRecordThread(void *arg)
     return NULL;
 }
 
+/* 确保父目录存在 */
 static void EnsureParentDir(const char *file_path)
 {
     if (file_path == NULL) {
@@ -390,21 +392,18 @@ static uint32_t vad_record_stop(uint8_t *para, uint32_t paraLen, char *strCommon
 
     printf("=== 停止 VAD 实时录音 ===\n");
 
-    /* 1) 停止尾随线程 */
-    if (g_vad_live_running) {
-        g_vad_live_running = false;
-        if (g_vad_tail_thread != NULL) {
-            MediaThreadJoin(&g_vad_tail_thread);
-            g_vad_tail_thread = NULL;
-        }
-    }
-
-    /* 2) 停止系统录音 */
+    /* 1) 先停止系统录音,减少文件追加,便于尾随线程退出 */
+    printf("VAD 停止系统录音\n");
     {
         const char *stopArg = "stop";
         (void)AudioCaptureSample(1, &stopArg);
     }
 
+    /* 2) 通知尾随线程退出(不阻塞等待) */
+    printf("VAD 停止尾随线程\n");
+    g_vad_live_running = false;
+    g_vad_tail_thread = NULL;
+
     printf("VAD 实时录音已停止\n");
     return ERRCODE_SUCC;
 }