diff --git a/lib/src/st2110/st_header.h b/lib/src/st2110/st_header.h index 6607af356..93f6547d9 100644 --- a/lib/src/st2110/st_header.h +++ b/lib/src/st2110/st_header.h @@ -1008,6 +1008,8 @@ struct st_rx_audio_session_impl { int st30_pkt_idx; /* pkt index in current frame */ int latest_seq_id; /* latest seq id */ + uint32_t first_pkt_rtp_ts; /* rtp time stamp for the first pkt */ + uint32_t tmstamp; size_t frame_recv_size; diff --git a/lib/src/st2110/st_rx_audio_session.c b/lib/src/st2110/st_rx_audio_session.c index c12edcf2c..1880a05a4 100644 --- a/lib/src/st2110/st_rx_audio_session.c +++ b/lib/src/st2110/st_rx_audio_session.c @@ -262,6 +262,10 @@ static int rx_audio_session_handle_frame_pkt(struct mtl_main_impl* impl, uint8_t payload_type = rtp->payload_type; uint32_t pkt_len = mbuf->data_len - sizeof(struct st_rfc3550_audio_hdr); + if (s->st30_pkt_idx == 0) { + s->first_pkt_rtp_ts = tmstamp; + } + if (ops->payload_type && (payload_type != ops->payload_type)) { dbg("%s(%d,%d), get payload_type %u but expect %u\n", __func__, s->idx, s_port, payload_type, ops->payload_type); @@ -356,11 +360,11 @@ static int rx_audio_session_handle_frame_pkt(struct mtl_main_impl* impl, } meta->tfmt = ST10_TIMESTAMP_FMT_MEDIA_CLK; - meta->timestamp = tmstamp; + meta->timestamp = s->first_pkt_rtp_ts; meta->fmt = ops->fmt; meta->sampling = ops->sampling; meta->channel = ops->channel; - meta->rtp_timestamp = tmstamp; + meta->rtp_timestamp = s->first_pkt_rtp_ts; meta->frame_recv_size = s->frame_recv_size; MT_USDT_ST30_RX_FRAME_AVAILABLE(s->mgr->idx, s->idx, frame->idx, frame->addr, tmstamp,