From fdad7c25f0919563428911b6eef934b66d2a7c0c Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 21 Mar 2014 17:56:27 +0800 Subject: [PATCH] fix isse #35: the gettimeofday jitter, log warn message --- trunk/configure | 2 +- trunk/src/app/srs_app_bandwidth.cpp | 1 + trunk/src/app/srs_app_server.cpp | 1 + trunk/src/app/srs_app_socket.cpp | 1 + trunk/src/core/srs_core.cpp | 21 --- trunk/src/core/srs_core.hpp | 5 - trunk/src/kernel/srs_kernel_utility.cpp | 55 ++++++++ trunk/src/kernel/srs_kernel_utility.hpp | 38 ++++++ trunk/src/srs/srs.upp | 174 ++++++++++++------------ 9 files changed, 185 insertions(+), 113 deletions(-) create mode 100644 trunk/src/kernel/srs_kernel_utility.cpp create mode 100644 trunk/src/kernel/srs_kernel_utility.hpp diff --git a/trunk/configure b/trunk/configure index 35523450e..32c7633a0 100755 --- a/trunk/configure +++ b/trunk/configure @@ -338,7 +338,7 @@ CORE_OBJS="${MODULE_OBJS[@]}" MODULE_ID="KERNEL" MODULE_DEPENDS=("CORE") ModuleLibIncs=(${SRS_OBJS}) -MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer") +MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer" "srs_kernel_utility") KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh KERNEL_OBJS="${MODULE_OBJS[@]}" # diff --git a/trunk/src/app/srs_app_bandwidth.cpp b/trunk/src/app/srs_app_bandwidth.cpp index c7f756929..439d42803 100644 --- a/trunk/src/app/srs_app_bandwidth.cpp +++ b/trunk/src/app/srs_app_bandwidth.cpp @@ -34,6 +34,7 @@ using namespace std; #include #include #include +#include SrsBandwidth::SrsBandwidth() { diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index f5ddf3b82..6e86cf638 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -37,6 +37,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include #include +#include #define SERVER_LISTEN_BACKLOG 512 #define SRS_TIME_RESOLUTION_MS 500 diff --git a/trunk/src/app/srs_app_socket.cpp b/trunk/src/app/srs_app_socket.cpp index f5038b7b7..d7cfa80af 100644 --- a/trunk/src/app/srs_app_socket.cpp +++ b/trunk/src/app/srs_app_socket.cpp @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include +#include SrsSocket::SrsSocket(st_netfd_t client_stfd) { diff --git a/trunk/src/core/srs_core.cpp b/trunk/src/core/srs_core.cpp index e2450a109..cfc9e8ada 100644 --- a/trunk/src/core/srs_core.cpp +++ b/trunk/src/core/srs_core.cpp @@ -24,30 +24,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include #include #include -static int64_t _srs_system_time_us_cache = 0; - -int64_t srs_get_system_time_ms() -{ - return _srs_system_time_us_cache / 1000; -} - -void srs_update_system_time_ms() -{ - timeval now; - - gettimeofday(&now, NULL); - - // @see: https://github.com/winlinvip/simple-rtmp-server/issues/35 - // we must convert the tv_sec/tv_usec to int64_t. - _srs_system_time_us_cache = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec; - - _srs_system_time_us_cache = srs_max(0, _srs_system_time_us_cache); -} - std::string srs_replace(std::string str, std::string old_str, std::string new_str) { std::string ret = str; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 5962c114a..50f9d3632 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -86,11 +86,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define srs_min(a, b) (((a) < (b))? (a) : (b)) #define srs_max(a, b) (((a) < (b))? (b) : (a)) -// get current system time in ms, use cache to avoid performance problem -extern int64_t srs_get_system_time_ms(); -// the deamon st-thread will update it. -extern void srs_update_system_time_ms(); - // signal defines. #define SIGNAL_RELOAD SIGHUP diff --git a/trunk/src/kernel/srs_kernel_utility.cpp b/trunk/src/kernel/srs_kernel_utility.cpp new file mode 100644 index 000000000..d50c5cc2b --- /dev/null +++ b/trunk/src/kernel/srs_kernel_utility.cpp @@ -0,0 +1,55 @@ +/* +The MIT License (MIT) + +Copyright (c) 2013-2014 winlin + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include + +#include + +#include + +static int64_t _srs_system_time_us_cache = 0; + +int64_t srs_get_system_time_ms() +{ + return _srs_system_time_us_cache / 1000; +} + +void srs_update_system_time_ms() +{ + timeval now; + + if (gettimeofday(&now, NULL) < 0) { + srs_warn("gettimeofday failed, ignore"); + return; + } + + // @see: https://github.com/winlinvip/simple-rtmp-server/issues/35 + // we must convert the tv_sec/tv_usec to int64_t. + int64_t now_us = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec; + if (now_us < _srs_system_time_us_cache) { + srs_warn("system time negative, " + "history=%"PRId64"us, now=%"PRId64"", _srs_system_time_us_cache, now_us); + } + + _srs_system_time_us_cache = now_us; +} diff --git a/trunk/src/kernel/srs_kernel_utility.hpp b/trunk/src/kernel/srs_kernel_utility.hpp new file mode 100644 index 000000000..4d74ab87a --- /dev/null +++ b/trunk/src/kernel/srs_kernel_utility.hpp @@ -0,0 +1,38 @@ +/* +The MIT License (MIT) + +Copyright (c) 2013-2014 winlin + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef SRS_KERNEL_UTILITY_HPP +#define SRS_KERNEL_UTILITY_HPP + +/* +#include +*/ + +#include + +// get current system time in ms, use cache to avoid performance problem +extern int64_t srs_get_system_time_ms(); +// the deamon st-thread will update it. +extern void srs_update_system_time_ms(); + +#endif diff --git a/trunk/src/srs/srs.upp b/trunk/src/srs/srs.upp index d1518ec42..2ee760de1 100755 --- a/trunk/src/srs/srs.upp +++ b/trunk/src/srs/srs.upp @@ -1,90 +1,92 @@ file - main readonly separator, - ..\main\srs_main_server.cpp, - ..\main\srs_main_bandcheck.cpp, - auto readonly separator, - ..\..\objs\srs_auto_headers.hpp, - libs readonly separator, - ..\libs\srs_librtmp.hpp, - ..\libs\srs_librtmp.cpp, - ..\libs\srs_lib_simple_socket.hpp, - ..\libs\srs_lib_simple_socket.cpp, - core readonly separator, - ..\core\srs_core.hpp, - ..\core\srs_core.cpp, - ..\core\srs_core_autofree.hpp, - ..\core\srs_core_autofree.cpp, - kernel readonly separator, - ..\kernel\srs_kernel_buffer.hpp, - ..\kernel\srs_kernel_buffer.cpp, - ..\kernel\srs_kernel_error.hpp, - ..\kernel\srs_kernel_error.cpp, - ..\kernel\srs_kernel_log.hpp, - ..\kernel\srs_kernel_log.cpp, - ..\kernel\srs_kernel_stream.hpp, - ..\kernel\srs_kernel_stream.cpp, - rtmp-protocol readonly separator, - ..\rtmp\srs_protocol_amf0.hpp, - ..\rtmp\srs_protocol_amf0.cpp, - ..\rtmp\srs_protocol_handshake.hpp, - ..\rtmp\srs_protocol_handshake.cpp, - ..\rtmp\srs_protocol_io.hpp, - ..\rtmp\srs_protocol_io.cpp, - ..\rtmp\srs_protocol_rtmp.hpp, - ..\rtmp\srs_protocol_rtmp.cpp, - ..\rtmp\srs_protocol_rtmp_stack.hpp, - ..\rtmp\srs_protocol_rtmp_stack.cpp, - ..\rtmp\srs_protocol_utility.hpp, - ..\rtmp\srs_protocol_utility.cpp, - app readonly separator, - ..\app\srs_app_bandwidth.hpp, - ..\app\srs_app_bandwidth.cpp, - ..\app\srs_app_client.hpp, - ..\app\srs_app_client.cpp, - ..\app\srs_app_codec.hpp, - ..\app\srs_app_codec.cpp, - ..\app\srs_app_conn.hpp, - ..\app\srs_app_conn.cpp, - ..\app\srs_app_config.hpp, - ..\app\srs_app_config.cpp, - ..\app\srs_app_encoder.hpp, - ..\app\srs_app_encoder.cpp, - ..\app\srs_app_forward.hpp, - ..\app\srs_app_forward.cpp, - ..\app\srs_app_hls.hpp, - ..\app\srs_app_hls.cpp, - ..\app\srs_app_http.hpp, - ..\app\srs_app_http.cpp, - ..\app\srs_app_log.hpp, - ..\app\srs_app_log.cpp, - ..\app\srs_app_refer.hpp, - ..\app\srs_app_refer.cpp, - ..\app\srs_app_reload.hpp, - ..\app\srs_app_reload.cpp, - ..\app\srs_app_pithy_print.hpp, - ..\app\srs_app_pithy_print.cpp, - ..\app\srs_app_thread.hpp, - ..\app\srs_app_thread.cpp, - ..\app\srs_app_server.hpp, - ..\app\srs_app_server.cpp, - ..\app\srs_app_st.hpp, - ..\app\srs_app_st.cpp, - ..\app\srs_app_socket.hpp, - ..\app\srs_app_socket.cpp, - ..\app\srs_app_source.hpp, - ..\app\srs_app_source.cpp, - utest readonly separator, - ..\utest\srs_utest.hpp, - ..\utest\srs_utest.cpp, - ..\utest\srs_utest_amf0.hpp, - ..\utest\srs_utest_amf0.cpp, - ..\utest\srs_utest_handshake.hpp, - ..\utest\srs_utest_handshake.cpp, - research readonly separator, - ..\..\research\librtmp\srs_play.c, - ..\..\research\librtmp\srs_publish.c, - ..\..\research\hls\ts_info.cc; + main readonly separator, + ..\main\srs_main_server.cpp, + ..\main\srs_main_bandcheck.cpp, + auto readonly separator, + ..\..\objs\srs_auto_headers.hpp, + libs readonly separator, + ..\libs\srs_librtmp.hpp, + ..\libs\srs_librtmp.cpp, + ..\libs\srs_lib_simple_socket.hpp, + ..\libs\srs_lib_simple_socket.cpp, + core readonly separator, + ..\core\srs_core.hpp, + ..\core\srs_core.cpp, + ..\core\srs_core_autofree.hpp, + ..\core\srs_core_autofree.cpp, + kernel readonly separator, + ..\kernel\srs_kernel_buffer.hpp, + ..\kernel\srs_kernel_buffer.cpp, + ..\kernel\srs_kernel_error.hpp, + ..\kernel\srs_kernel_error.cpp, + ..\kernel\srs_kernel_log.hpp, + ..\kernel\srs_kernel_log.cpp, + ..\kernel\srs_kernel_stream.hpp, + ..\kernel\srs_kernel_stream.cpp, + ..\kernel\srs_kernel_utility.hpp, + ..\kernel\srs_kernel_utility.cpp, + rtmp-protocol readonly separator, + ..\rtmp\srs_protocol_amf0.hpp, + ..\rtmp\srs_protocol_amf0.cpp, + ..\rtmp\srs_protocol_handshake.hpp, + ..\rtmp\srs_protocol_handshake.cpp, + ..\rtmp\srs_protocol_io.hpp, + ..\rtmp\srs_protocol_io.cpp, + ..\rtmp\srs_protocol_rtmp.hpp, + ..\rtmp\srs_protocol_rtmp.cpp, + ..\rtmp\srs_protocol_rtmp_stack.hpp, + ..\rtmp\srs_protocol_rtmp_stack.cpp, + ..\rtmp\srs_protocol_utility.hpp, + ..\rtmp\srs_protocol_utility.cpp, + app readonly separator, + ..\app\srs_app_bandwidth.hpp, + ..\app\srs_app_bandwidth.cpp, + ..\app\srs_app_client.hpp, + ..\app\srs_app_client.cpp, + ..\app\srs_app_codec.hpp, + ..\app\srs_app_codec.cpp, + ..\app\srs_app_conn.hpp, + ..\app\srs_app_conn.cpp, + ..\app\srs_app_config.hpp, + ..\app\srs_app_config.cpp, + ..\app\srs_app_encoder.hpp, + ..\app\srs_app_encoder.cpp, + ..\app\srs_app_forward.hpp, + ..\app\srs_app_forward.cpp, + ..\app\srs_app_hls.hpp, + ..\app\srs_app_hls.cpp, + ..\app\srs_app_http.hpp, + ..\app\srs_app_http.cpp, + ..\app\srs_app_log.hpp, + ..\app\srs_app_log.cpp, + ..\app\srs_app_refer.hpp, + ..\app\srs_app_refer.cpp, + ..\app\srs_app_reload.hpp, + ..\app\srs_app_reload.cpp, + ..\app\srs_app_pithy_print.hpp, + ..\app\srs_app_pithy_print.cpp, + ..\app\srs_app_thread.hpp, + ..\app\srs_app_thread.cpp, + ..\app\srs_app_server.hpp, + ..\app\srs_app_server.cpp, + ..\app\srs_app_st.hpp, + ..\app\srs_app_st.cpp, + ..\app\srs_app_socket.hpp, + ..\app\srs_app_socket.cpp, + ..\app\srs_app_source.hpp, + ..\app\srs_app_source.cpp, + utest readonly separator, + ..\utest\srs_utest.hpp, + ..\utest\srs_utest.cpp, + ..\utest\srs_utest_amf0.hpp, + ..\utest\srs_utest_amf0.cpp, + ..\utest\srs_utest_handshake.hpp, + ..\utest\srs_utest_handshake.cpp, + research readonly separator, + ..\..\research\librtmp\srs_play.c, + ..\..\research\librtmp\srs_publish.c, + ..\..\research\hls\ts_info.cc; mainconfig - "" = "MAIN"; + "" = "MAIN";