添加音频和视频缓冲区配置支持

This commit is contained in:
2025-03-19 21:37:03 +08:00
parent 60ae578648
commit 2c935b29be
5 changed files with 53 additions and 0 deletions

View File

@@ -83,3 +83,19 @@ int Config::LoggingLevel() {
return AV_LOG_INFO;
}
}
uint32_t Config::AudioBuffer() {
auto re = configs.find("audioBuffer");
if (re == configs.end()) {
return 0;
}
return std::stoul((*re).second);
}
uint32_t Config::VideoBuffer() {
auto re = configs.find("videoBuffer");
if (re == configs.end()) {
return 0;
}
return std::stoul((*re).second);
}

View File

@@ -10,8 +10,12 @@ class Config {
configs["appendLogging"] = "false";
configs["loggingFile"] = "";
configs["loggingLevel"] = "info";
configs["audioBuffer"] = "0";
configs["videoBuffer"] = "0";
}
bool Load(std::string path);
bool IsAppendLogging();
int LoggingLevel();
uint32_t AudioBuffer();
uint32_t VideoBuffer();
};

View File

@@ -124,6 +124,15 @@ int64_t HookedOpenMediaFileAndGetDuration(DWORD* duration, const char* arcName,
player_log(AV_LOG_ERROR, "Failed to initialize player settings.\n");
goto end;
}
player_settings_set_resize(settings, 0);
uint32_t audioBuffer = config.AudioBuffer();
if (audioBuffer) {
player_settings_set_audio_buffer_size(settings, audioBuffer);
}
uint32_t videoBuffer = config.VideoBuffer();
if (videoBuffer) {
player_settings_set_video_buffer_size(settings, videoBuffer);
}
}
player_settings_set_hWnd(settings, (void**)GetHwndPointer());
if (player_create2(videoName, &player, settings)) {
@@ -134,6 +143,7 @@ int64_t HookedOpenMediaFileAndGetDuration(DWORD* duration, const char* arcName,
player_log(AV_LOG_ERROR, "Failed to initialize player.\n");
goto end;
}
player_wait_until_buffer_is_full(player);
if (player_play(player)) {
player_log(AV_LOG_ERROR, "Failed to play video.\n");
goto end;

View File

@@ -116,6 +116,17 @@ PLAYER_API int player_play(PlayerSession* session);
* @return 错误代码
*/
PLAYER_API int player_pause(PlayerSession* session);
/**
* @brief 判断播放器缓冲区是否已满
* @param session 播放器会话指针
* @return 是否已满
*/
PLAYER_API int player_buffer_is_full(PlayerSession* session);
/**
* @brief 等待播放器缓冲区满
* @param session 播放器会话指针
*/
PLAYER_API void player_wait_until_buffer_is_full(PlayerSession* session);
/**
* @brief 判断播放器是否正在播放
* @param session 播放器会话指针
@@ -147,6 +158,18 @@ PLAYER_API void player_settings_default(PlayerSettings* settings);
* @param resize 是否自动调整窗口大小
*/
PLAYER_API void player_settings_set_resize(PlayerSettings* settings, unsigned char resize);
/**
* @brief 设置音频缓冲区大小
* @param settings 播放器设置指针
* @param size 音频缓冲区大小(单位 ms)
*/
PLAYER_API void player_settings_set_audio_buffer_size(PlayerSettings* settings, uint32_t size);
/**
* @brief 设置视频缓冲区大小
* @param settings 播放器设置指针
* @param size 视频缓冲区大小(单位 ms)
*/
PLAYER_API void player_settings_set_video_buffer_size(PlayerSettings* settings, uint32_t size);
/**
* @brief 设置窗口句柄
* @param settings 播放器设置指针

View File

Binary file not shown.