From bacd6ed1133e245551a264e734dde71dcb580e24 Mon Sep 17 00:00:00 2001 From: endless Date: Thu, 4 Jul 2024 11:25:12 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AF=8F=E6=AC=A1=E5=8D=95?= =?UTF-8?q?=E7=8B=ACsleep=2040ms=EF=BC=8C=E5=AF=BC=E8=87=B4=E6=80=BB?= =?UTF-8?q?=E4=BD=93=E6=97=B6=E9=97=B4=E5=81=8F=E5=B7=AE=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=8D=A1=E9=A1=BF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/tests/h264_media_server.c | 26 +++++++++++++++++++++----- api/tests/h264_pusher.c | 26 +++++++++++++++++++++----- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/api/tests/h264_media_server.c b/api/tests/h264_media_server.c index 427afeaf..e1ff468c 100644 --- a/api/tests/h264_media_server.c +++ b/api/tests/h264_media_server.c @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef _WIN32 #include "windows.h" #else @@ -24,11 +25,26 @@ static void s_on_exit(int sig) { } static void on_h264_frame(void *user_data, mk_h264_splitter splitter, const char *data, int size) { -#ifdef _WIN32 - Sleep(40); -#else - usleep(40 * 1000); -#endif + static time_t start_time = time(NULL); // 定义一个静态起始时间点 + static int frame_count = 0; // 定义并初始化帧计数器 + const int frame_interval_ms = 40; // 每帧间隔40ms + + // 计算当前帧的目标发送时间 + time_t target_time = start_time + frame_count * frame_interval_ms / 1000; + time_t now = time(NULL); + + // 如果当前时间早于目标时间,则等待 + if (now < target_time) { + #ifdef _WIN32 + Sleep(target_time - now); + #else + usleep((target_time - now) * 1000); + #endif + } + + // 更新帧计数器 + frame_count++; + static int dts = 0; mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL); dts += 40; diff --git a/api/tests/h264_pusher.c b/api/tests/h264_pusher.c index 81a018b0..2f80f813 100644 --- a/api/tests/h264_pusher.c +++ b/api/tests/h264_pusher.c @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef _WIN32 #include "windows.h" #else @@ -24,11 +25,26 @@ static void s_on_exit(int sig) { } static void on_h264_frame(void *user_data, mk_h264_splitter splitter, const char *data, int size) { -#ifdef _WIN32 - Sleep(40); -#else - usleep(40 * 1000); -#endif + static time_t start_time = time(NULL); // 定义一个静态起始时间点 + static int frame_count = 0; // 定义并初始化帧计数器 + const int frame_interval_ms = 40; // 每帧间隔40ms + + // 计算当前帧的目标发送时间 + time_t target_time = start_time + frame_count * frame_interval_ms / 1000; + time_t now = time(NULL); + + // 如果当前时间早于目标时间,则等待 + if (now < target_time) { + #ifdef _WIN32 + Sleep(target_time - now); + #else + usleep((target_time - now) * 1000); + #endif + } + + // 更新帧计数器 + frame_count++; + static int dts = 0; mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL); dts += 40;