diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 05ebf0ae8f72cf9212c24c54db16d675cd7b035b..560314fe4d81728b4461768a2d79d04f06427944 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -1020,6 +1020,20 @@ static struct ast_rtp_engine asterisk_rtp_engine = { #endif }; +static void rtp_learning_seq_init(struct ast_rtp *rtp, uint16_t seq); + +static void ast_rtp_on_ice_complete(pj_ice_sess *ice, pj_status_t status) +{ + struct ast_rtp *rtp = ice->user_data; + + if (status != PJ_SUCCESS || !strictrtp) { + return; + } + + rtp->strict_rtp_state = STRICT_RTP_LEARN; + rtp_learning_seq_init(rtp, (uint16_t)rtp->seqno); +} + static void ast_rtp_on_ice_rx_data(pj_ice_sess *ice, unsigned comp_id, unsigned transport_id, void *pkt, pj_size_t size, const pj_sockaddr_t *src_addr, unsigned src_addr_len) { struct ast_rtp *rtp = ice->user_data; @@ -1066,6 +1080,7 @@ static pj_status_t ast_rtp_on_ice_tx_pkt(pj_ice_sess *ice, unsigned comp_id, uns /* ICE Session interface declaration */ static pj_ice_sess_cb ast_rtp_ice_sess_cb = { + .on_ice_complete = ast_rtp_on_ice_complete, .on_rx_data = ast_rtp_on_ice_rx_data, .on_tx_pkt = ast_rtp_on_ice_tx_pkt, };