浏览代码

Z991239-6387 #comment: 交易录像录制功能优化

80274480 1 月之前
父节点
当前提交
cb5d1e0231

+ 5 - 0
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -337,6 +337,11 @@ void CMediaControllerEntity::OnStarted()
 	else{
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("capture_lib_init failed!");
 	}
+#ifdef RVC_OS_WIN
+#else
+	
+	GetOSKernelVersionInfo();
+#endif
 	
 	LogEvent(Severity_Middle, LOG_EVT_MOD_MEDIACONTROLLER_STARTED_SUCCESS, "mediacontroller entity started successfully.");
 

+ 29 - 9
Other/libvideorecord/libvideorecord_impl.cpp

@@ -686,7 +686,9 @@ int libvideorecord_impl::VideoRecord()
 				}
 				bInitRecordParam = true;
 				//当第一次记录时删除当前音频只剩下1帧,使音视频数据能够同步
-				m_audioqueue->ClearAudioQueue();
+				if (m_audioqueue) {
+					m_audioqueue->ClearAudioQueue();
+				}
 				nRecordStartTime = timeGetTime();//本段录像开始时间
 			}
 
@@ -735,6 +737,11 @@ int libvideorecord_impl::VideoRecord()
 					ReNameVideo();
 				}
 			}
+
+			if (m_bPauseRecord) {
+				m_pHostApi->Debug(RECORD_LOG_DEBUG, "reset media queue.");
+				ResetMediaQueue();
+			}
 		}
 		else{
 			if (eStand2Agent == m_eRecordType) {
@@ -1746,6 +1753,7 @@ void libvideorecord_impl::vDebug(const char* str, va_list list)
 
 bool libvideorecord_impl::ContinueRecord()			//继续录像
 {
+	m_pHostApi->Debug(RECORD_LOG_DEBUG, "continue record");
 #ifdef _WIN32
 #else
 	InitAudioQueue();
@@ -1793,13 +1801,9 @@ bool libvideorecord_impl::StopVideoRecord()				//退出
 
 bool libvideorecord_impl::PauseRecord()				//暂停录像
 {
+	m_pHostApi->Debug(RECORD_LOG_DEBUG, "pause record");
 	m_bPauseRecord = true;
-#ifdef _WIN32
-#else
-	RECORD_SAFE_DELETE(m_local_audioqueue);
-	RECORD_SAFE_DELETE(m_env_videoqueue);
-	RECORD_SAFE_DELETE(m_opt_videoqueue);
-#endif
+
 	return true;
 }
 
@@ -2093,7 +2097,7 @@ bool libvideorecord_impl::GetLocalAudioFrame(int iAudioLens)
 	//取出音频
 	m_audioframe->data = m_pRecordAudioBuffer + m_iAudioBufferLen;
 	bool bGetAudio = false;
-	if (iAudioLens <= MAX_AUDIOQUEUE_LENS) {
+	if (m_audioqueue && (iAudioLens <= MAX_AUDIOQUEUE_LENS)) {
 		bGetAudio = m_audioqueue->GetAudioAndDel(m_audioframe);
 	}
 	else {
@@ -2134,7 +2138,11 @@ bool libvideorecord_impl::GetSingleSideAudioFrame()
 {
 	bool bRet = false;
 	//取音频数据,合并成1s的音频
-	int nAudioLens = m_audioqueue->GetAudioLens();
+	int nAudioLens = 0;
+	if (m_audioqueue) {
+		nAudioLens = m_audioqueue->GetAudioLens();
+	}
+
 	if (nAudioLens > 0) {
 		if (m_iAudioBufferLen < m_iAudioPerSecBufLen) {
 			bRet = GetLocalAudioFrame(nAudioLens);
@@ -2359,4 +2367,16 @@ bool libvideorecord_impl::InitVideoRecordParams()
 	bRet = true;
 
 	return bRet;
+}
+
+
+bool libvideorecord_impl::ResetMediaQueue()
+{
+#ifdef _WIN32
+#else
+	RECORD_SAFE_DELETE(m_local_audioqueue);
+	RECORD_SAFE_DELETE(m_env_videoqueue);
+	RECORD_SAFE_DELETE(m_opt_videoqueue);
+#endif
+	return true;
 }

+ 1 - 1
Other/libvideorecord/libvideorecord_impl.h

@@ -127,7 +127,7 @@ private:
 	int HandleLeftAudioData();
 	bool AddMuteAudioFrame(bool bLocal, int iAudioFrameSize);
 	bool InitDefaultAudioParams(audio_frame* paudio);
-
+	bool ResetMediaQueue();
 
 private:
 	bool m_bStopRecord;