浏览代码

Z991239-5471 #comment 优化本地播放实体的稳定性

80274480 1 年之前
父节点
当前提交
325d772386

+ 11 - 14
Module/mod_localmediaplay/mod_localmediaplay.cpp

@@ -1138,7 +1138,6 @@ void CLocalMediaPlayEntity::OnStarted()
 	GetFunction()->SubscribeLog(m_SubIDStopRecord, this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STOPREMOTERECORD, NULL, false);
 
 	if (eStand2sType == m_eDeviceType) {
-
 #ifdef RVC_OS_WIN
 		m_scanThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&qryMedia, this, 0, NULL);
 		if (NULL != m_scanThread)
@@ -1148,9 +1147,7 @@ void CLocalMediaPlayEntity::OnStarted()
 		if (0 != err) {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create queryMedia thread failed.");
 		}
-
 #endif // RVC_OS_WIN
-
 	}
 }
 
@@ -1363,7 +1360,7 @@ DWORD WINAPI MediaPlayThread(LPVOID param)
 {
 	CLocalMediaPlayEntity *entity = (CLocalMediaPlayEntity*)param;
 
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Enter Windows Media Play Thread.");
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Enter Windows Media Play Thread.");
 
 	while (entity->GetPlayFlag())
 	{
@@ -1547,7 +1544,7 @@ DWORD WINAPI MediaPlayThread(LPVOID param)
 		entity->m_playThread = NULL;
 	}
 	
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Exit MediaPlayThread.");
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Exit MediaPlayThread.");
 
 	return 0;
 }
@@ -1703,8 +1700,11 @@ void* StartAudioPlayingThreadFunc(void* param)
 	if (0 != entity->m_pMediaAudioPlayer->PlayLocalAudio(pAudioNames)) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("StartAudio failed, for %s is not exsit.", pAudioNames);
 	}
+
 	entity->m_uMediaPlayThreadId = 0;
 
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Exit Start Audio Playing Thread Function.");
+
 	return 0;
 }
 
@@ -1991,8 +1991,8 @@ void CLocalMediaPlayEntity::StartAudio(const char *pAudioNames)
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("current is playing, close it.");
 		if (0 != m_uMediaPlayThreadId) {
 			m_pMediaAudioPlayer->Close();
-			m_uMediaPlayThreadId = 0;
-			usleep(500*1000);
+			pthread_join(m_uMediaPlayThreadId, NULL);
+
 		}
 	}
 
@@ -2357,11 +2357,10 @@ ErrorCodeEnum CLocalMediaPlayEntity::StartFFPlayerNotice(int nCfgInx, int nWndX,
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("audio current is playing, close it.");
 		if (0 != m_uMediaPlayThreadId) {
 			m_pMediaAudioPlayer->Close();
-			m_uMediaPlayThreadId = 0;
 #ifdef RVC_OS_WIN
-			Sleep(500);
+			WaitForSingleObject(m_uMediaPlayThreadId, INFINITE);
 #else
-			usleep(500*1000);
+			pthread_join(m_uMediaPlayThreadId, NULL);
 #endif // RVC_OS_WI
 		}
 	}
@@ -2370,11 +2369,10 @@ ErrorCodeEnum CLocalMediaPlayEntity::StartFFPlayerNotice(int nCfgInx, int nWndX,
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("video current is playing, close it.");
 		if (NULL != m_uNoticePlayThreadId) {
 			m_pMediaPlayer[nCfgInx]->Close();
-			m_uNoticePlayThreadId = 0;
 #ifdef RVC_OS_WIN
-			Sleep(500);
+			WaitForSingleObject(m_uNoticePlayThreadId, INFINITE);
 #else
-			usleep(500 * 1000);
+			pthread_join(m_uNoticePlayThreadId, NULL);
 #endif // RVC_OS_WI
 		}
 	}
@@ -2549,7 +2547,6 @@ bool CLocalMediaPlayEntity::GetLocalPicLogFlag()
 
 void CLocalMediaPlayEntity::OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s:%d, eTestType = %d.", __FUNCTION__, __LINE__, eTestType);
 	if (Test_ShakeHand == eTestType){
 		pTransactionContext->SendAnswer(Error_Succeed);
 	}

+ 0 - 7
Other/libmediaplayer/audio.cpp

@@ -502,13 +502,6 @@ static void sdl_audio_callback(void *opaque, uint8_t*stream, int len)
     player_stat_t *is = (player_stat_t *)opaque;
     int audio_size = 0, len1 = 0;
 
-	if (is->buser_stop){
-		SDL_LockMutex(is->m_audio_play_wait_mutex);
-		SDL_CondSignal(is->m_audio_play_cond);
-		SDL_UnlockMutex(is->m_audio_play_wait_mutex);
-		return;
-	}
-
     int64_t audio_callback_time = av_gettime_relative();
     while (len > 0 && false == is->buser_stop) // 输入参数len等于is->audio_hw_buf_size,是audio_open()中申请到的SDL音频缓冲区大小
     {

+ 1 - 1
Other/libmediaplayer/demux.cpp

@@ -118,7 +118,7 @@ static int demux_thread(void *arg)
 
     SDL_mutex *wait_mutex = SDL_CreateMutex();
 
-	is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "begin %s av_read_frame, nFilecount is %d. current index is %d.", is->m_strPlayLists[is->m_icurrent_index], is->m_uFilesCount, is->m_icurrent_index);
+	is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "begin %s av_read_frame, nFilecount is %d, current index is %d.", is->m_strPlayLists[is->m_icurrent_index], is->m_uFilesCount, is->m_icurrent_index);
     // 4. 解复用处理
 	while (false == is->buser_stop)
     {

+ 4 - 3
Other/libmediaplayer/libmediaplayer.cpp

@@ -232,17 +232,18 @@ int libmediaplayer_impl::GetLocalAudioPlayingParams(rvc_media_player_param_t* pP
 int libmediaplayer_impl::StartPlayLocalAudio(const char* pAudioNames)
 {
 	int iRet = -1;
+
 	m_pHostApi->Debug(MEDIA_LOG_DEBUG, "StartPlayLocalAudio %s.", pAudioNames);
 
 	m_stPlayConfig.eMode = MEDIA_LOCALAUDIO;
 	iRet = m_pHostApi->LoadPlayConfig(m_stPlayConfig);
 	m_stPlayConfig.eMode = MEDIA_LOCALAUDIO;
 	if (0 != iRet) {
-		m_pHostApi->Debug(MEDIA_LOG_ERROR, "Load WmpConfiguration failed while play local audio!");
+		m_pHostApi->Debug(MEDIA_LOG_ERROR, "Load Configuration failed while play local audio!");
 		return iRet;
 	}
 	else {
-		m_pHostApi->Debug(MEDIA_LOG_DEBUG, "Load WmpConfiguration succeeded while play local audio!");
+		m_pHostApi->Debug(MEDIA_LOG_DEBUG, "Load Configuration succeeded while play local audio!");
 		m_pHostApi->Debug(MEDIA_LOG_DEBUG, "m_stPlayConfig.strRootPath: %s", m_stPlayConfig.strRootPath);
 	}
 
@@ -265,6 +266,7 @@ int libmediaplayer_impl::StartPlayLocalAudio(const char* pAudioNames)
 	else {
 		m_pHostApi->Debug(MEDIA_LOG_ERROR, "Player Init failed!");
 	}
+
 	return iRet;
 }
 
@@ -398,7 +400,6 @@ Clibmediaplayer::~Clibmediaplayer()
 
 int Clibmediaplayer::PlayLocalAudio(const char* pAudioNames)
 {
-	m_pImpl->GetHostApi()->Debug(MEDIA_LOG_DEBUG, "Clibmediaplayer StartPlayLocalAudio");
 	return m_pImpl->StartPlayLocalAudio(pAudioNames);
 }
 

+ 5 - 9
Other/libmediaplayer/player.cpp

@@ -479,7 +479,7 @@ int CMediaPlayer::StartMediaPlay()
 		return iRet;
 	}
 
-	m_hostapi->Debug(MEDIA_LOG_DEBUG, "set playing flag to true.");
+	m_hostapi->Debug(MEDIA_LOG_DEBUG, "set playing flag to true, meida type is %d.", m_player_stat->m_eMType);
 	m_bplaying = true;
 
 	if (eVideo_Type == m_player_stat->m_eMType) {
@@ -531,22 +531,18 @@ int CMediaPlayer::StopMediaPlay()
 		return iRet;
 	}
 
+	SDL_LockMutex(m_player_stat->m_audio_play_wait_mutex);
+	SDL_CondSignal(m_player_stat->m_audio_play_cond);
+	SDL_UnlockMutex(m_player_stat->m_audio_play_wait_mutex);
 	packet_queue_abort(&m_player_stat->video_pkt_queue, m_hostapi);
 	packet_queue_abort(&m_player_stat->audio_pkt_queue, m_hostapi);
 
 	frame_queue_signal(&m_player_stat->video_frm_queue);
 	frame_queue_signal(&m_player_stat->audio_frm_queue);
 
-	m_hostapi->Debug(MEDIA_LOG_INFO, "set m_player_stat media finished flag to true.");
+	m_hostapi->Debug(MEDIA_LOG_DEBUG, "set m_player_stat media finished flag to true.");
 	m_player_stat->buser_stop = true;
 
-	//if (m_bplaying) {
-	//	m_hostapi->Debug(MEDIA_LOG_DEBUG, "user stop audio play set SDL_PauseAudioDevice param to 1.");
-	//	if (0 != m_player_stat->m_audio_dev){
-	//		SDL_PauseAudioDevice(m_player_stat->m_audio_dev, 1);
-	//	}
-	//}
-
 	iRet = 0;
 
 	m_hostapi->Debug(MEDIA_LOG_DEBUG, "StopMediaPlay exit.");

+ 1 - 1
Other/libmediaplayer/player.h

@@ -300,6 +300,6 @@ private:
 	uint8_t m_uvolume;
 	CMediaHostApi* m_hostapi;
 	char* m_piconpath;				// ico图标路径
-	char* m_paudiodev;				// 音频输出设备
+	char* m_paudiodev;				// 音频输出设备 
 };
 

+ 2 - 2
Other/libpictureplayer/CPicturePlayer.cpp

@@ -407,10 +407,10 @@ bool CPicturePlayer::StartPicPlay()
 	}
 
 	if (iPlayCount == m_nplay_cnt) {
-		m_pHostApi->PicDebug(PIC_LOG_INFO, "%d times picture playing task finished, exit.", iPlayCount);
+		m_pHostApi->PicDebug(PIC_LOG_DEBUG, "%d times picture playing task finished, exit.", iPlayCount);
 	}
 	else{
-		m_pHostApi->PicDebug(PIC_LOG_INFO, "user stop picture playing task, exit.");
+		m_pHostApi->PicDebug(PIC_LOG_DEBUG, "user stop picture playing task, exit.");
 	}
 
 	SDL_HideWindow(m_window);