diff --git a/janus/src/client.c b/janus/src/client.c index 5ecef97..93b9720 100644 --- a/janus/src/client.c +++ b/janus/src/client.c @@ -116,7 +116,9 @@ static void *_common_thread(void *v_client, bool video) { packet.extensions.max_delay = 0; } else { packet.extensions.min_delay = 0; - packet.extensions.max_delay = 1000; + // 10s - Chromium/WebRTC default + // 3s - Firefox default + packet.extensions.max_delay = 300; // == 3s, i.e. 10ms granularity }*/ client->gw->relay_rtp(client->session, &packet); diff --git a/janus/src/plugin.c b/janus/src/plugin.c index 8e6c2e2..5a379f8 100644 --- a/janus/src/plugin.c +++ b/janus/src/plugin.c @@ -56,8 +56,8 @@ #include "config.h" -static us_config_s *_g_config = NULL; -const useconds_t _g_watchers_polling = 100000; +static us_config_s *_g_config = NULL; +static const useconds_t _g_watchers_polling = 100000; static us_janus_client_s *_g_clients = NULL; static janus_callbacks *_g_gw = NULL; @@ -107,7 +107,8 @@ static void *_video_rtp_thread(UNUSED void *arg) { us_frame_s *frame; if (us_queue_get(_g_video_queue, (void **)&frame, 0.1) == 0) { _LOCK_VIDEO; - us_rtpv_wrap(_g_rtpv, frame); + const bool zero_playout_delay = (frame->gop == 0); + us_rtpv_wrap(_g_rtpv, frame, zero_playout_delay); _UNLOCK_VIDEO; us_frame_destroy(frame); } diff --git a/janus/src/rtpv.c b/janus/src/rtpv.c index 3c912d5..48c2a1a 100644 --- a/janus/src/rtpv.c +++ b/janus/src/rtpv.c @@ -71,13 +71,13 @@ char *us_rtpv_make_sdp(us_rtpv_s *rtpv) { #define _PRE 3 // Annex B prefix length -void us_rtpv_wrap(us_rtpv_s *rtpv, const us_frame_s *frame) { +void us_rtpv_wrap(us_rtpv_s *rtpv, const us_frame_s *frame, bool zero_playout_delay) { // There is a complicated logic here but everything works as it should: // - https://github.com/pikvm/ustreamer/issues/115#issuecomment-893071775 assert(frame->format == V4L2_PIX_FMT_H264); - rtpv->rtp->zero_playout_delay = (frame->gop == 0); + rtpv->rtp->zero_playout_delay = zero_playout_delay; const uint32_t pts = us_get_now_monotonic_u64() * 9 / 100; // PTS units are in 90 kHz ssize_t last_offset = -_PRE; diff --git a/janus/src/rtpv.h b/janus/src/rtpv.h index 3c8d4c8..3caa68d 100644 --- a/janus/src/rtpv.h +++ b/janus/src/rtpv.h @@ -47,4 +47,4 @@ us_rtpv_s *us_rtpv_init(us_rtp_callback_f callback); void us_rtpv_destroy(us_rtpv_s *rtpv); char *us_rtpv_make_sdp(us_rtpv_s *rtpv); -void us_rtpv_wrap(us_rtpv_s *rtpv, const us_frame_s *frame); +void us_rtpv_wrap(us_rtpv_s *rtpv, const us_frame_s *frame, bool zero_playout_delay);