Pārlūkot izejas kodu

Z991239-2739 #comment [mod_sipphone] 视频流收包,图像渲染,音频设备切换增加告警信息

陈礼鹏80274480 4 gadi atpakaļ
vecāks
revīzija
22915e0c0d

+ 19 - 18
Module/mod_sipphone/Event.h

@@ -37,30 +37,31 @@
 
 //前端媒体错误
 	
-#define ERROR_MOD_SIP_AUDIO_INITFAIL				0x30180160	//音频初始化失败,级别3	
+#define ERROR_MOD_SIP_AUDIO_INITFAIL					0x30180160	//音频初始化失败,级别3	
 
-#define ERROR_MOD_SIP_HANDFREE_OPENFAIL				0x30180161	//免提打开失败,级别3	
-#define ERROR_MOD_SIP_HANDFREE_NOSIGNAL				0x30180162  //免提没有信号,级别3	
-#define ERROR_MOD_SIP_HANDFREE_CLOSEFAIL			0x30180163  //禁止免提失败,级别3	
+#define ERROR_MOD_SIP_HANDFREE_OPENFAIL					0x30180161	//免提打开失败,级别3	
+#define ERROR_MOD_SIP_HANDFREE_NOSIGNAL					0x30180162  //免提没有信号,级别3	
+#define ERROR_MOD_SIP_HANDFREE_CLOSEFAIL				0x30180163  //禁止免提失败,级别3	
 
-#define ERROR_MOD_SIP_PICKUP_OPENFAIL				0x30180166	//话筒打开失败,级别3	
-#define ERROR_MOD_SIP_PICKUP_NOSIGNAL				0x30180167  //话筒没有信号,级别3	
-#define ERROR_MOD_SIP_PICKUP_CLOSEFAIL				0x30180168  //禁止话筒失败,级别3	
+#define ERROR_MOD_SIP_PICKUP_OPENFAIL					0x30180166	//话筒打开失败,级别3	
+#define ERROR_MOD_SIP_PICKUP_NOSIGNAL					0x30180167  //话筒没有信号,级别3	
+#define ERROR_MOD_SIP_PICKUP_CLOSEFAIL					0x30180168  //禁止话筒失败,级别3	
 
-#define ERROR_MOD_SIP_HANDFREE_ADDVOLUMNFAIL		0x30180170  //免提加强音量失败,级别2	
-#define ERROR_MOD_SIP_HANDFREE_REDUCEVOLUMNFAIL		0x30180171  //免提恢复音量失败,级别2
+#define ERROR_MOD_SIP_HANDFREE_ADDVOLUMNFAIL			0x30180170  //免提加强音量失败,级别2	
+#define ERROR_MOD_SIP_HANDFREE_REDUCEVOLUMNFAIL			0x30180171  //免提恢复音量失败,级别2
 
-#define EVENT_MOD_SIP_AUDIO_RTP_CREATE				0x30190001
-#define EVENT_MOD_SIP_AUDIO_RTP_DESTROY				0x30190002
+#define EVENT_MOD_SIP_AUDIO_RTP_CREATE					0x30190001
+#define EVENT_MOD_SIP_AUDIO_RTP_DESTROY					0x30190002
 
-#define EVENT_MOD_SIP_VIDEO_RTP_CREATE				0x30190003
-#define EVENT_MOD_SIP_VIDEO_RTP_DESTROY				0x30190004
-
-#define EVENT_MOD_SIP_AUDIO_STREAM_RECEIVED			0x30190005
-#define EVENT_MOD_SIP_VIDEO_STREAM_RECEIVED			0x30190006
-#define EVENT_MOD_SIP_VIDEO_FRAME_DECODEED			0x30190007
-#define EVENT_MOD_SIP_VIDEO_RENDER_STARTED			0x30190008
+#define EVENT_MOD_SIP_VIDEO_RTP_CREATE					0x30190003
+#define EVENT_MOD_SIP_VIDEO_RTP_DESTROY					0x30190004
 
+#define EVENT_MOD_SIP_AUDIO_STREAM_RECEIVED				0x30190005
+#define EVENT_MOD_SIP_VIDEO_STREAM_RECEIVED				0x30190006
+#define EVENT_MOD_SIP_VIDEO_FRAME_DECODEED				0x30190007
+#define EVENT_MOD_SIP_LOCAL_VIDEO_RENDER_STARTED		0x30190008
+#define EVENT_MOD_SIP_REMOTE_VIDEO_RENDER_STARTED		0x30190009
+#define EVENT_MOD_SIP_AUDIO_DEVICE_SWITCH				0x3019000A
 
 #define EVENT_MOD_SIP_HANDFREE_IN_AUDIO_DEVICE_OPEN_SUCCESS			0x30190011
 #define EVENT_MOD_SIP_HANDFREE_IN_AUDIO_DEVICE_OPEN_FAILED			0x30190012

+ 12 - 8
Module/mod_sipphone/audio_session.cpp

@@ -198,20 +198,22 @@ static void recv_hook_callback(const char *buf, int size, void *arg)
 {
 	//LOG_FUNCTION();
 	rtp_hdr *hdr = (rtp_hdr*)buf;
-	audio_session_t* pseesion = (audio_session_t*)arg;
+	audio_session_t* psession = (audio_session_t*)arg;
 
-	if (false == pseesion->baudiorecved){
-		LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_AUDIO_STREAM_RECEIVED, "received first audio packet!");
-		pseesion->baudiorecved = true;
+	if (false == psession->baudiorecved){
+		char strmsg[MAX_PATH] = { 0 };
+		snprintf(strmsg, MAX_PATH, "received first audio packet, and packet size is %d.", size);
+		LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_AUDIO_STREAM_RECEIVED, strmsg);
+		psession->baudiorecved = true;
 	}
 
 	if ((g_nAudioRecvNum%100) == 0)
 	{
 		//Dbg("recv audio pkt num %d,single size %d",g_nAudioRecvNum,size);
 		static int icount = 0;
-		if (pseesion->phonemedia_conf.eDeviceType == eStand2sType && icount == 0){
+		if (psession->phonemedia_conf.eDeviceType == eStand2sType && icount == 0){
 			icount++;
-			Dbg("current hand free flag is %d, call type = %d, pt = %d,arg addr is 0x%08x.",(int)pseesion->phonemedia_conf.dev_type, pseesion->phonemedia_conf.eCalltype, hdr->pt, arg);
+			Dbg("current hand free flag is %d, call type = %d, pt = %d,arg addr is 0x%08x.",(int)psession->phonemedia_conf.dev_type, psession->phonemedia_conf.eCalltype, hdr->pt, arg);
 		}
 	}
 	
@@ -857,7 +859,7 @@ static int phonemedia_chang_dev(audio_session_t *session, e_dev_type t)
 	if (conf->dir &DIR_RX) {
 		opt_micspk |= AMS_OPT_RECORD;
 	}
-
+	
 	if (media->pool) {
 		//apr_status_t status;
 		audiocontext_remove_driver(media->context, &media->bridge->base);
@@ -883,7 +885,8 @@ static int phonemedia_chang_dev(audio_session_t *session, e_dev_type t)
 			opt_micspk |= AMS2_OPT_NS;
 		if (aec)
 			opt_micspk |= AMS2_OPT_AEC;
-		Dbg("start audiomicspk2_create");
+
+		Dbg("start audiomicspk_create");
 #ifdef _WIN32
 		audiomicspk2_create(media->micspk_pool, media->engine, opt_micspk, AUDIO_CLOCK, in_dev, out_dev, &media->micspkstream);
 #else
@@ -898,6 +901,7 @@ static int phonemedia_chang_dev(audio_session_t *session, e_dev_type t)
 		//media->micspkstream->on_audio_device_event = &audio_device_event;
 		media->phonemedia_conf.dev_type = t;
 		Dbg("init change dev on_rx_audio success!");
+		
 		if (out_agc || out_ns) {
 			int read_opt = AUDIO_DSP_NONE;
 			int write_opt = AUDIO_DSP_NONE;

+ 3 - 0
Module/mod_sipphone/endpoint.cpp

@@ -190,6 +190,9 @@ static void endpoint_media_change_audio_dev(endpoint_call_t *call, e_dev_type cu
 	LOG_FUNCTION();
 	if (call->audio) {
 		Dbg("begin audio_session_change_dev %d", current_dev_type);
+		char strmsg[MAX_PATH] = { 0 };
+		snprintf(strmsg, MAX_PATH, "change audio device to %s mode.", DEV_PICKUP == current_dev_type ? "pickup" : "hand free");
+		LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_AUDIO_DEVICE_SWITCH, strmsg);
 		audio_session_change_dev(call->audio, current_dev_type);
 		Dbg("end audio_session_change_dev");
 	}

+ 30 - 0
Module/mod_sipphone/video_session.cpp

@@ -131,6 +131,9 @@ struct video_session_t
 #endif // RVC_OS_WIN
 
 	picture_record_t* pic_record;
+	bool bvideorecved;
+	bool blocalrender;
+	bool bremoterender;
 };
 
 
@@ -482,6 +485,11 @@ static int on_rx_frame(video_frame *frame, void *user_data)
 			session->bshow_remote = true;
 		}
 		used = 1;
+
+		if (false == session->bremoterender) {
+			LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_REMOTE_VIDEO_RENDER_STARTED, "start remote video render.");
+			session->bremoterender = true;
+		}
 	}
 
 #endif
@@ -489,6 +497,18 @@ static int on_rx_frame(video_frame *frame, void *user_data)
 }
 
 
+static void on_rx_udp(const char* buf, int size, void* user_data)
+{
+	video_session_t* session = (video_session_t*)user_data;
+	if (false == session->bvideorecved) {
+		char strmsg[MAX_PATH] = { 0 };
+		snprintf(strmsg, MAX_PATH, "received first video packet, and packet size is %d.", size);
+		LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_VIDEO_STREAM_RECEIVED, strmsg);
+		session->bvideorecved = true;
+	}
+}
+
+
 #ifdef RVC_OS_WIN
 int GetCurrentRunPath(char* pPath)
 {
@@ -1266,6 +1286,7 @@ static int start_video_rtpsession(video_session_t* session)
 	config.user_data = session;
 	config.bit_rate = session->conf.bit_rate;
 	config.on_rx_frame = &on_rx_frame;
+	config.on_rx_udp = &on_rx_udp;
 	config.dbg = &__dbg;
 	config.logevent = &__logevent;
 	videortp_create(&config, &session->rtp);
@@ -2261,6 +2282,12 @@ void* videorender_func(void* arg)
 					else {
 						session->plocal_render->RenderVideoFrame(local_video_frame);
 					}
+
+					if (false == session->blocalrender){
+						LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_LOCAL_VIDEO_RENDER_STARTED, "start local video render.");
+						session->blocalrender = true;
+					}
+
 					bshow_local = true;
 					video_frame_delete(local_video_frame);
 					local_video_frame = NULL;
@@ -2698,6 +2725,9 @@ int video_session_create(const video_session_conf_t *conf, video_session_t **p_s
 		if (conf->camera_count == 2) {
 			session->video_shm_q_opt = new Clibvideoqueue(REC_COMMON_VIDEO_OPT_SHM_RTP_QUEUE);
 		}
+		session->bvideorecved = false;
+		session->blocalrender = false;
+		session->bremoterender = false;
 
 		*p_session = session;
 	}

+ 2 - 1
Other/libvideoframework/videortp.c

@@ -426,7 +426,8 @@ static int decoder_process(videortp_t *vrtp, uint8_t *input_buf, int input_len){
 				decodered_frame = NULL;
 #endif
 			}
-		}else {
+		}
+		else {
 			//render is null, we need delete self.
 			video_frame_delete(decodered_frame);
 			decodered_frame = NULL;