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,
 };