|
|
|
@ -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
|
|
|
|
|