修改每次单独sleep 40ms,导致总体时间偏差出现视频卡顿。
This commit is contained in:
parent
c15e454286
commit
bacd6ed113
|
|
@ -11,6 +11,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#else
|
#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) {
|
static void on_h264_frame(void *user_data, mk_h264_splitter splitter, const char *data, int size) {
|
||||||
#ifdef _WIN32
|
static time_t start_time = time(NULL); // 定义一个静态起始时间点
|
||||||
Sleep(40);
|
static int frame_count = 0; // 定义并初始化帧计数器
|
||||||
#else
|
const int frame_interval_ms = 40; // 每帧间隔40ms
|
||||||
usleep(40 * 1000);
|
|
||||||
#endif
|
// 计算当前帧的目标发送时间
|
||||||
|
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;
|
static int dts = 0;
|
||||||
mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL);
|
mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL);
|
||||||
dts += 40;
|
dts += 40;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#else
|
#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) {
|
static void on_h264_frame(void *user_data, mk_h264_splitter splitter, const char *data, int size) {
|
||||||
#ifdef _WIN32
|
static time_t start_time = time(NULL); // 定义一个静态起始时间点
|
||||||
Sleep(40);
|
static int frame_count = 0; // 定义并初始化帧计数器
|
||||||
#else
|
const int frame_interval_ms = 40; // 每帧间隔40ms
|
||||||
usleep(40 * 1000);
|
|
||||||
#endif
|
// 计算当前帧的目标发送时间
|
||||||
|
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;
|
static int dts = 0;
|
||||||
mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL);
|
mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL);
|
||||||
dts += 40;
|
dts += 40;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue