From 2c935b29bef5241de3f9ea22c6d708178b4eba0b Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 19 Mar 2025 21:37:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9F=B3=E9=A2=91=E5=92=8C?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E7=BC=93=E5=86=B2=E5=8C=BA=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.cpp | 16 ++++++++++++++++ config.hpp | 4 ++++ dllmain.cpp | 10 ++++++++++ include/player.h | 23 +++++++++++++++++++++++ lib/player.lib | Bin 6144 -> 7278 bytes 5 files changed, 53 insertions(+) diff --git a/config.cpp b/config.cpp index 809d099..b862413 100644 --- a/config.cpp +++ b/config.cpp @@ -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); +} diff --git a/config.hpp b/config.hpp index d9b9b77..de63e26 100644 --- a/config.hpp +++ b/config.hpp @@ -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(); }; diff --git a/dllmain.cpp b/dllmain.cpp index 5a9de45..3608941 100644 --- a/dllmain.cpp +++ b/dllmain.cpp @@ -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; diff --git a/include/player.h b/include/player.h index f34a979..d3afc39 100644 --- a/include/player.h +++ b/include/player.h @@ -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 播放器设置指针 diff --git a/lib/player.lib b/lib/player.lib index f8ceeb523ef97f754a472b42ae8741f8f5e82f86..818494dfb3e5d3ff6ea7d96c2d5c728e5bafc2a2 100644 GIT binary patch delta 1585 zcmbW1Z)jU(6vm&lH*MaeOLG6^rp>yh&Q%13cC*<=w^=$BqqxQz5XaVQU6T?>+V!8J zh$%V>ic0i+5WhJ5GGsX0uEUiM1S<>&vtk7&vN4O5mEj!wu=!;!o;OMBYzF}YKi+%Z z_q^wX^E~&CHUGIIw=>(?@<_Pwd(jPGJ5bXNc#i1K%!L?jrbyrxP(b6A2_7h7 zB>_orp@_B2F%uXsqH?aP*>?1qSZ7zM@y;&#-m`N$=BTeozciXmCWh?P zu$>%Dr*Syl^D2jHc5OSAIc%5CUg=4V*rWX;sr1^katYIR+9wLqN7>A)RkNd@-tOr@H~O`wAr;yr`&`#C?%IWv5IE5N!j2ZBJ-0v32( z=5?I+vKn7t!@+?H)I&uLHo$}dH$2c$4L^LaxI+N72qB0%2)N*c0u5F0{;xZgSTzCV zoqN6i)t7##Fs7fZYH_IdoH|cU(4-QejIyQX?zz&Yiu>qHbv#^7csl9`(Y&LI9&|OV z?cMIWp{;8RdP8}bV&;YhX@-AYad&rHdWWXWddi4M`M)q|nbW7mfRjEnjmE8~cFZ*v zG*DLDw`L@Z>K=N)r+Y3mhcB@MSSy9vT_)}KJtc0=-@eW+K_#8=^@vYSeYC*Z^10== z#X|4xa}69hDeLbOvwH@A*~C#5UH2!%mu~0J@~oO8lZMnT@z%A=bJBz^`c6%VrE~r{ zb_fKuX$OV1|Eu%t8@TCH%@$1)V^?Jt4+-6Np1E@J(q>xJE!wDfX<3cXx4NOsOn&|i z#f%_5TJ5C2^-kx_6HOPw^tEBpAC(?Dt+hHLG^Og|EnLh;gSu|s`*mAXchhHv zA;cF4&)?6vewoWw@X-|`D%>}o{;i33)xvH@@zC>TTd6wUJ#6eY^FZ%-ce6eJ5NBBY!j$#puf}dVb^>JvXkazDu?wRG8P{09up By2=0m delta 862 zcma)&Pe>GT6vw~2?YR4!*}pThJF~8q>z|;LtD$HIiwdkoNodK4#8nWB2&0n_%3_m=`de;x61Hc5==TsoYWH?{X^+nEm zbf8)Tb~p|)Q+%G}JG?_U;6xN&oby403K`Ql@HK0TVDMF7V7yWd(>9n(q#zcxdax-u)msW;OI~6J%N4A=+{>YqQK#8R&mx+ub^20{ zauJg*7$?Xyb?MXV%bV47+%Sq8S&|gCo|TfBZwrU%sS%@j^CS&Nb&;<<_94y