Change interval calculation for sending keep-alive message (#2878)

* Change interval calculation for sending keep alive message

* Fix misstype
remotes/origin/oob-rtcp-xr
Riza Sulistyo 3 years ago committed by GitHub
parent 6ca06f63ec
commit c5234d5418
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -58,8 +58,7 @@ typedef struct pjmedia_stream_rtp_sess_info
#if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA!=0
/**
* Structure of configuration settings for stream keepalive after it
* is created.
* Structure of configuration settings for stream keepalive.
*/
typedef struct pjmedia_stream_ka_config
{
@ -79,6 +78,14 @@ typedef struct pjmedia_stream_ka_config
*/
unsigned start_interval;
/**
* The keepalive sending interval, after #start_count number keepalive
* was sent.
*
* Default: PJMEDIA_STREAM_KA_INTERVAL (seconds)
*/
unsigned ka_interval;
} pjmedia_stream_ka_config;
/**

@ -236,7 +236,9 @@ struct pjmedia_stream
pj_bool_t use_ka; /**< Stream keep-alive with non-
codec-VAD mechanism is
enabled? */
pj_timestamp last_frm_ts_sent; /**< Timestamp of last sending
unsigned ka_interval; /**< The keepalive sending
interval */
pj_time_val last_frm_ts_sent; /**< Time of last sending
packet */
unsigned start_ka_count; /**< The number of keep-alive
to be sent after it is
@ -1331,19 +1333,20 @@ static pj_status_t put_frame_imp( pjmedia_port *port,
if (stream->use_ka)
{
pj_uint32_t dtx_duration, ka_interval;
pj_time_val now, tmp;
dtx_duration = pj_timestamp_diff32(&stream->last_frm_ts_sent,
&frame->timestamp);
pj_gettimeofday(&now);
tmp = now;
PJ_TIME_VAL_SUB(tmp, stream->last_frm_ts_sent);
dtx_duration = PJ_TIME_VAL_MSEC(tmp);
if (stream->start_ka_count) {
ka_interval = stream->start_ka_interval *
PJMEDIA_PIA_SRATE(&stream->port.info) / 1000;
ka_interval = stream->start_ka_interval;
} else {
ka_interval = PJMEDIA_STREAM_KA_INTERVAL *
PJMEDIA_PIA_SRATE(&stream->port.info);
ka_interval = stream->ka_interval * 1000;
}
if (dtx_duration > ka_interval) {
send_keep_alive_packet(stream);
stream->last_frm_ts_sent = frame->timestamp;
stream->last_frm_ts_sent = now;
if (stream->start_ka_count)
stream->start_ka_count--;
@ -1467,6 +1470,7 @@ static pj_status_t put_frame_imp( pjmedia_port *port,
(const void**)&rtphdr,
&rtphdrlen);
return PJ_SUCCESS;
/* Encode audio frame */
} else if ((frame->type == PJMEDIA_FRAME_TYPE_AUDIO &&
@ -1570,8 +1574,8 @@ static pj_status_t put_frame_imp( pjmedia_port *port,
stream->rtcp.stat.rtp_tx_last_seq = pj_ntohs(stream->enc->rtp.out_hdr.seq);
#if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA!=0
/* Update timestamp of last sending packet. */
stream->last_frm_ts_sent = frame->timestamp;
/* Update time of last sending packet. */
pj_gettimeofday(&stream->last_frm_ts_sent);
#endif
return PJ_SUCCESS;
@ -2461,6 +2465,7 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
#if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA!=0
stream->use_ka = info->use_ka;
stream->ka_interval = info->ka_cfg.ka_interval;
stream->start_ka_count = info->ka_cfg.start_count;
stream->start_ka_interval = info->ka_cfg.start_interval;
#endif

@ -29,6 +29,7 @@ pjmedia_stream_ka_config_default(pjmedia_stream_ka_config *cfg)
pj_bzero(cfg, sizeof(*cfg));
cfg->start_count = PJMEDIA_STREAM_START_KA_CNT;
cfg->start_interval = PJMEDIA_STREAM_START_KA_INTERVAL_MSEC;
cfg->ka_interval = PJMEDIA_STREAM_KA_INTERVAL;
}
#endif

@ -162,7 +162,9 @@ struct pjmedia_vid_stream
pj_bool_t use_ka; /**< Stream keep-alive with non-
codec-VAD mechanism is
enabled? */
pj_timestamp last_frm_ts_sent; /**< Timestamp of last sending
unsigned ka_interval; /**< The keepalive sending
interval */
pj_time_val last_frm_ts_sent; /**< Time of last sending
packet */
unsigned start_ka_count; /**< The number of keep-alive
to be sent after it is
@ -1067,19 +1069,22 @@ static pj_status_t put_frame(pjmedia_port *port,
if (stream->use_ka)
{
pj_uint32_t dtx_duration, ka_interval;
pj_time_val tm_now, tmp;
pj_gettimeofday(&tm_now);
tmp = tm_now;
PJ_TIME_VAL_SUB(tmp, stream->last_frm_ts_sent);
dtx_duration = PJ_TIME_VAL_MSEC(tmp);
dtx_duration = pj_timestamp_diff32(&stream->last_frm_ts_sent,
&frame->timestamp);
if (stream->start_ka_count) {
ka_interval = stream->start_ka_interval *
stream->info.codec_info.clock_rate / 1000;
ka_interval = stream->start_ka_interval;
} else {
ka_interval = PJMEDIA_STREAM_KA_INTERVAL *
stream->info.codec_info.clock_rate;
ka_interval = stream->ka_interval * 1000;
}
if (dtx_duration > ka_interval) {
send_keep_alive_packet(stream);
stream->last_frm_ts_sent = frame->timestamp;
stream->last_frm_ts_sent = tm_now;
if (stream->start_ka_count)
stream->start_ka_count--;
@ -1294,8 +1299,8 @@ static pj_status_t put_frame(pjmedia_port *port,
}
#if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA!=0
/* Update timestamp of last sending packet. */
stream->last_frm_ts_sent = frame->timestamp;
/* Update time of last sending packet. */
pj_gettimeofday(&stream->last_frm_ts_sent);
#endif
return PJ_SUCCESS;
@ -1794,8 +1799,9 @@ PJ_DEF(pj_status_t) pjmedia_vid_stream_create(
#if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA!=0
stream->use_ka = info->use_ka;
stream->ka_interval = info->ka_cfg.ka_interval;
stream->start_ka_count = info->ka_cfg.start_count;
stream->start_ka_interval = info->ka_cfg.start_interval;
stream->start_ka_interval = info->ka_cfg.start_interval;
#endif
stream->num_keyframe = info->sk_cfg.count;

Loading…
Cancel
Save