diff --git a/janus/src/memsinkfd.c b/janus/src/memsinkfd.c index 7041c13..09a8401 100644 --- a/janus/src/memsinkfd.c +++ b/janus/src/memsinkfd.c @@ -50,8 +50,9 @@ frame_s *memsink_fd_get_frame(int fd, memsink_shared_s *mem, uint64_t *frame_id) frame_s *frame = frame_init(); frame_set_data(frame, mem->data, mem->used); FRAME_COPY_META(mem, frame); + frame->extra1_ts = get_now_monotonic(); *frame_id = mem->id; - mem->last_client_ts = get_now_monotonic(); + mem->last_client_ts = frame->extra1_ts; bool ok = true; if (frame->format != V4L2_PIX_FMT_H264) { diff --git a/janus/src/plugin.c b/janus/src/plugin.c index aed5edc..36cad52 100644 --- a/janus/src/plugin.c +++ b/janus/src/plugin.c @@ -110,9 +110,17 @@ static void *_video_rtp_thread(UNUSED void *arg) { while (!STOP) { frame_s *frame; if (queue_get(_g_video_queue, (void **)&frame, 0.1) == 0) { + frame->extra2_ts = get_now_monotonic(); LOCK_VIDEO; rtpv_wrap(_g_rtpv, frame); UNLOCK_VIDEO; + frame->extra3_ts = get_now_monotonic(); + JLOG_INFO("video", + "grab_ts=%Lf, encode_begin_ts=%Lf, encode_end_ts=%Lf," + " memsink_ts=%Lf, rtp_begin_ts=%Lf, rtp_end_ts=%Lf, latency=%Lf", + frame->grab_ts, frame->encode_begin_ts, frame->encode_end_ts, + frame->extra1_ts, frame->extra2_ts, frame->extra3_ts, + (frame->extra3_ts - frame->encode_begin_ts)); frame_destroy(frame); } } diff --git a/src/libs/frame.h b/src/libs/frame.h index a9d444c..45f4bee 100644 --- a/src/libs/frame.h +++ b/src/libs/frame.h @@ -54,6 +54,10 @@ typedef struct { long double grab_ts; long double encode_begin_ts; long double encode_end_ts; + + long double extra1_ts; + long double extra2_ts; + long double extra3_ts; } frame_s;