Bläddra i källkod

#IQRV #comment [sipphone] 增加音视频通道udp端口分配和释放情况告警

陈礼鹏80274480 4 år sedan
förälder
incheckning
4367a553a4

+ 5 - 0
Module/mod_sipphone/Event.h

@@ -50,6 +50,11 @@
 #define ERROR_MOD_SIP_HANDFREE_ADDVOLUMNFAIL		0x30180170  //免提加强音量失败,级别2	
 #define ERROR_MOD_SIP_HANDFREE_REDUCEVOLUMNFAIL		0x30180171  //免提恢复音量失败,级别2
 
+#define ERROR_MOD_SIP_AUDIO_RTP_CREATE				0x30190001
+#define ERROR_MOD_SIP_AUDIO_RTP_DESTROY				0x30190002
+
+#define ERROR_MOD_SIP_VIDEO_RTP_CREATE				0x30190003
+#define ERROR_MOD_SIP_VIDEO_RTP_DESTROY				0x30190004
 
 //event
 #define EVENT_MOD_CONNECT_PICKUP_CALL	0x10303041	// 提机呼叫

+ 24 - 3
Module/mod_sipphone/audio_session.cpp

@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "SpBase.h"
 #include "audio_session.h"
+#include "Event.h"
 
 
 #include <memutil.h>
@@ -18,8 +19,6 @@
 
 #ifdef RVC_OS_WIN
 #include <portaudio.h>
-#else
-#include "Event.h"
 #endif
 
 #define AUDIO_CLOCK	8000
@@ -392,7 +391,7 @@ static int phonemedia_start(audio_session_t *session)
 
 	in_dev = &session->conf.in_dev[conf->dev_type][0];
 	out_dev = &session->conf.out_dev[conf->dev_type][0];
-	Dbg("in_dev = %s,out_dev = %s, audio dir = %d",in_dev,out_dev, conf->dir);
+	Dbg("in_dev = %s,out_dev = %s, conf dir = %d.",in_dev,out_dev, conf->dir);
 
 	opt_micspk = AMS_OPT_AS_STREAM;
 	if (conf->dir & DIR_TX) {
@@ -468,8 +467,16 @@ static int phonemedia_start(audio_session_t *session)
 
 	rc = rtp_session_create2(conf->local_rtp_ip, conf->local_rtp_port, 2, &media->rtpsess);
 	if (rc != 0) {
+		char strInfo[MAX_PATH] = { 0 };
+		snprintf(strInfo, MAX_PATH, "audio rtp create2 failed and local port is %d.", conf->local_rtp_port);
+		LogEvent(Severity_Middle, ERROR_MOD_SIP_AUDIO_RTP_CREATE, strInfo);
 		goto on_error;
 	}
+	else {
+		char strMessage[MAX_PATH] = { 0 };
+		snprintf(strMessage, MAX_PATH, "audio rtp create2 success and local port is %d.", conf->local_rtp_port);
+		LogEvent(Severity_Middle, ERROR_MOD_SIP_AUDIO_RTP_CREATE, strMessage);
+	}
 
 	rc = rtp_session_reset2(media->rtpsess, conf->dir, conf->remote_rtp_ip, conf->remote_rtp_port, conf->remote_rtp_port + 1);
 	if (rc != 0) {
@@ -680,6 +687,13 @@ static int phonemedia_stop(audio_session_t *session, int b_record_turn_off)
 	}
 	if (media->rtpsess) {
 		rtp_session_destroy(media->rtpsess);
+		{
+			unsigned short ilocal_port = 0;
+			rtp_session_get_local_rtp_port(media->rtpsess, &ilocal_port);
+			char strInfo[MAX_PATH] = { 0 };
+			snprintf(strInfo, MAX_PATH, "audio rtp(media->rtpsess) destroy and local port is %u.", ilocal_port);
+			LogEvent(Severity_Middle, ERROR_MOD_SIP_AUDIO_RTP_DESTROY, strInfo);
+		}
 		media->rtpsess = NULL;
 	}
 	//if (media->aecstream) {
@@ -713,6 +727,13 @@ static int phonemedia_stop(audio_session_t *session, int b_record_turn_off)
 			audiortp_destroy(media->record.rtpstream);
 			media->record.rtpstream = NULL;
 			rtp_session_destroy(media->record.rtpsess);
+			{
+				unsigned short ilocal_port = 0;
+				rtp_session_get_local_rtp_port(media->record.rtpsess, &ilocal_port);
+				char strInfo[MAX_PATH] = { 0 };
+				snprintf(strInfo, MAX_PATH, "audio rtp(record.rtpsess) destroy and local port is %u.", ilocal_port);
+				LogEvent(Severity_Middle, ERROR_MOD_SIP_AUDIO_RTP_DESTROY, strInfo);
+			}
 			media->record.rtpsess = NULL;
 		}
 		if (b_record_turn_off) {

+ 17 - 17
Module/mod_sipphone/endpoint.cpp

@@ -253,23 +253,23 @@ static void endpoint_media_update_video(endpoint_call_t *call, media_desc_t *vid
 			bCreateAudioObject = TRUE;
 		}
 
-		audio_session_remote_recording_conf_t remote_conf = {0};
-		remote_conf.local_rtp_ip = video_desc->local_ip;
-		remote_conf.local_rtp_port = video_desc->local_port+2;
-		remote_conf.ptime = REC_COMMON_AUDIO_FRAME_PTIME; // for remote recording
-		remote_conf.remote_rtp_ip = video_desc->remote_ip;
-		remote_conf.remote_rtp_port = video_desc->remote_port+2;
-		rc = audio_session_start_remote_recording(call->audio, &remote_conf);
-		if (rc != 0) 
-		{
-			Dbg("audio_session_start_remote_recording failed! rc = %d", rc);
-			if (bCreateAudioObject) 
-			{
-				audio_session_destroy(call->audio);
-				call->audio = NULL;
-			}
-			//return;
-		}
+		//audio_session_remote_recording_conf_t remote_conf = {0};
+		//remote_conf.local_rtp_ip = video_desc->local_ip;
+		//remote_conf.local_rtp_port = video_desc->local_port+2;
+		//remote_conf.ptime = REC_COMMON_AUDIO_FRAME_PTIME; // for remote recording
+		//remote_conf.remote_rtp_ip = video_desc->remote_ip;
+		//remote_conf.remote_rtp_port = video_desc->remote_port+2;
+		//rc = audio_session_start_remote_recording(call->audio, &remote_conf);
+		//if (rc != 0) 
+		//{
+		//	Dbg("audio_session_start_remote_recording failed! rc = %d", rc);
+		//	if (bCreateAudioObject) 
+		//	{
+		//		audio_session_destroy(call->audio);
+		//		call->audio = NULL;
+		//	}
+		//	//return;
+		//}
 
 		if (call->video) {
 			video_session_destroy(call->video);

+ 13 - 0
Module/mod_sipphone/video_session.cpp

@@ -13,6 +13,7 @@
 #include "../../Other/libvideoframework/videortp.h"
 #include "../../Other/libvideoframework/videoclock.h"
 #include "fileutil.h"
+#include "Event.h"
 
 #ifdef RVC_OS_WIN
 #include "../../Other/libvideoframework/videoplayer.h"
@@ -139,6 +140,17 @@ static void __dbg(void *user_data, const char *fmt, va_list arg)
 }
 
 
+static void __logevent(void* user_data, int itype, const char* strmessage)
+{
+	if (0 == itype) {
+		LogEvent(Severity_Middle, ERROR_MOD_SIP_VIDEO_RTP_CREATE, strmessage);
+	}
+	else {
+		LogEvent(Severity_Middle, ERROR_MOD_SIP_VIDEO_RTP_DESTROY, strmessage);
+	}
+}
+
+
 static int translate_image_resolution(video_frame** dstframe,const int iwidth, const int iheight, const video_frame* psrcframe)
 {
 	int i = -1;
@@ -1257,6 +1269,7 @@ static int start_video_rtpsession(video_session_t* session)
 	config.bit_rate = session->conf.bit_rate;
 	config.on_rx_frame = &on_rx_frame;
 	config.dbg = &__dbg;
+	config.logevent = &__logevent;
 	videortp_create(&config, &session->rtp);
 	rc = videortp_start(session->rtp);
 	if (rc != 0)

+ 32 - 10
Other/libvideoframework/videortp.c

@@ -170,6 +170,13 @@ static void	rtpDbg(videortp_t *rtp, const char *fmt, ...)
 }
 
 
+static void	rtpLogevent(videortp_t* rtp, int itype, const char* strmessage)
+{
+	if (rtp->config.logevent) {
+		(*rtp->config.logevent)(rtp->config.user_data, itype, strmessage);
+	}
+}
+
 
 //#define Dbg(__fmt__, ...) __Dbg(vrtp, __fmt__, __VA_ARGS__)
 
@@ -1145,7 +1152,6 @@ void* recv_proc(void* arg)
 	videortp_t *vrtp = (videortp_t*)arg;
 	int rtp_timeout_cnt = 0;
 	int64_t pre_500_ms = TimeInMilliseconds();
-
 	rtpDbg(vrtp,"enter recv_proc.");
 #ifdef _WIN32
 	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
@@ -2017,8 +2023,10 @@ static rtp_session_t *videortp_internal_create_rtp_session(const videortp_config
 	int rc;
 	addr.s_addr = config->local_ip;
 	rc = rtp_session_create(inet_ntoa(addr), config->local_rtp_port, 2, &rtp_sess);
-	if (rc != 0)
+	if (rc != 0){
 		return 0;
+	}
+
 	addr.s_addr = config->remote_ip;
 	rtp_session_reset(rtp_sess, config->dir, inet_ntoa(addr), config->remote_rtp_port, config->remote_rtp_port+1);
 	{
@@ -2078,28 +2086,34 @@ int videortp_create(const videortp_config_t *config, videortp_t **p_rtp)
 	}
 	vrtp->delta_ts = VIDEO_CLOCK * config->fps_den / config->fps_num;
 	vrtp->rtp_sess = videortp_internal_create_rtp_session(config);
-	if (!vrtp->rtp_sess)
+	if (!vrtp->rtp_sess) {
+		char strMessage[MAX_PATH] = { 0 };
+		snprintf(strMessage, MAX_PATH, "video rtp create failed and local port is %d.", config->local_rtp_port);
+		rtpLogevent(vrtp, 0, strMessage);
 		goto on_error;
+	}
+	else {
+		char strInfo[MAX_PATH] = { 0 };
+		snprintf(strInfo, MAX_PATH, "video rtp create success and local port is %d.", config->local_rtp_port);
+		rtpLogevent(vrtp, 0, strInfo);
+	}
 
 	{
-	VideoStatsLogCallBack log_func;
-	log_func.log_fn = &video_stats_on_log;
-	log_func.userdata = vrtp;
-	video_stats_init(&log_func);
+		VideoStatsLogCallBack log_func;
+		log_func.log_fn = &video_stats_on_log;
+		log_func.userdata = vrtp;
+		video_stats_init(&log_func);
 	}
 	jitter_buffer_create(vrtp, config);
 	vrtp->rtp_header_extension = rtp_header_extension_api_new();
 	
 	if (config->dir & DIR_RX) {
 		decoder_create(vrtp, config);
-
 		video_debug_open_play_file();
 	}
 	if (config->dir & DIR_TX) {
 		ffmpeg_encoder_create(vrtp, config);
-
 		video_debug_open_record_file();
-
 		vrtp->framenum = 0;
 	}
 
@@ -2125,6 +2139,7 @@ on_error:
 void videortp_destroy(videortp_t *vrtp)
 {	
 	videortp_config_t *config;
+	unsigned short ilocal_port = 0;
 
 	if (!vrtp){
 		return;
@@ -2148,7 +2163,14 @@ void videortp_destroy(videortp_t *vrtp)
 	rtp_header_extension_api_destroy(vrtp->rtp_header_extension);
 	h264_packetizer_destroy(vrtp->h264_packetizer);
 	
+	rtp_session_get_local_rtp_port(vrtp->rtp_sess, &ilocal_port);
+	
 	rtp_session_destroy(vrtp->rtp_sess);
+	{
+		char strInfo[MAX_PATH] = { 0 };
+		snprintf(strInfo, MAX_PATH, "video rtp destroy and local port is %u.", ilocal_port);
+		rtpLogevent(vrtp, 1, strInfo);
+	}
 	vrtp->rtp_sess = NULL;
 
 	if (config->dir & DIR_RX) {

+ 1 - 0
Other/libvideoframework/videortp.h

@@ -37,6 +37,7 @@ typedef struct videortp_config_t
 	void (*on_tx_udp)(const char *buf, int size, void *user_data); // for debug
 	void (*on_rx_udp)(const char *buf, int size, void *user_data); // for debug
 	void (*dbg)(void *user_data, const char *fmt, va_list arg);
+	void (*logevent)(void* user_data, int itype, const char* strmessage);
 	void *user_data;
 }videortp_config_t;