winlin

fix isse #35: the gettimeofday jitter, log warn message

@@ -338,7 +338,7 @@ CORE_OBJS="${MODULE_OBJS[@]}" @@ -338,7 +338,7 @@ CORE_OBJS="${MODULE_OBJS[@]}"
338 MODULE_ID="KERNEL" 338 MODULE_ID="KERNEL"
339 MODULE_DEPENDS=("CORE") 339 MODULE_DEPENDS=("CORE")
340 ModuleLibIncs=(${SRS_OBJS}) 340 ModuleLibIncs=(${SRS_OBJS})
341 -MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer") 341 +MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer" "srs_kernel_utility")
342 KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh 342 KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh
343 KERNEL_OBJS="${MODULE_OBJS[@]}" 343 KERNEL_OBJS="${MODULE_OBJS[@]}"
344 # 344 #
@@ -34,6 +34,7 @@ using namespace std; @@ -34,6 +34,7 @@ using namespace std;
34 #include <srs_protocol_rtmp_stack.hpp> 34 #include <srs_protocol_rtmp_stack.hpp>
35 #include <srs_app_config.hpp> 35 #include <srs_app_config.hpp>
36 #include <srs_core_autofree.hpp> 36 #include <srs_core_autofree.hpp>
  37 +#include <srs_kernel_utility.hpp>
37 38
38 SrsBandwidth::SrsBandwidth() 39 SrsBandwidth::SrsBandwidth()
39 { 40 {
@@ -37,6 +37,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -37,6 +37,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 #include <srs_kernel_error.hpp> 37 #include <srs_kernel_error.hpp>
38 #include <srs_app_client.hpp> 38 #include <srs_app_client.hpp>
39 #include <srs_app_config.hpp> 39 #include <srs_app_config.hpp>
  40 +#include <srs_kernel_utility.hpp>
40 41
41 #define SERVER_LISTEN_BACKLOG 512 42 #define SERVER_LISTEN_BACKLOG 512
42 #define SRS_TIME_RESOLUTION_MS 500 43 #define SRS_TIME_RESOLUTION_MS 500
@@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 #include <srs_app_socket.hpp> 24 #include <srs_app_socket.hpp>
25 25
26 #include <srs_kernel_error.hpp> 26 #include <srs_kernel_error.hpp>
  27 +#include <srs_kernel_utility.hpp>
27 28
28 SrsSocket::SrsSocket(st_netfd_t client_stfd) 29 SrsSocket::SrsSocket(st_netfd_t client_stfd)
29 { 30 {
@@ -24,30 +24,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -24,30 +24,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 #include <srs_core.hpp> 24 #include <srs_core.hpp>
25 25
26 #include <string.h> 26 #include <string.h>
27 -#include <sys/time.h>  
28 #include <netdb.h> 27 #include <netdb.h>
29 #include <arpa/inet.h> 28 #include <arpa/inet.h>
30 29
31 -static int64_t _srs_system_time_us_cache = 0;  
32 -  
33 -int64_t srs_get_system_time_ms()  
34 -{  
35 - return _srs_system_time_us_cache / 1000;  
36 -}  
37 -  
38 -void srs_update_system_time_ms()  
39 -{  
40 - timeval now;  
41 -  
42 - gettimeofday(&now, NULL);  
43 -  
44 - // @see: https://github.com/winlinvip/simple-rtmp-server/issues/35  
45 - // we must convert the tv_sec/tv_usec to int64_t.  
46 - _srs_system_time_us_cache = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec;  
47 -  
48 - _srs_system_time_us_cache = srs_max(0, _srs_system_time_us_cache);  
49 -}  
50 -  
51 std::string srs_replace(std::string str, std::string old_str, std::string new_str) 30 std::string srs_replace(std::string str, std::string old_str, std::string new_str)
52 { 31 {
53 std::string ret = str; 32 std::string ret = str;
@@ -86,11 +86,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -86,11 +86,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
86 #define srs_min(a, b) (((a) < (b))? (a) : (b)) 86 #define srs_min(a, b) (((a) < (b))? (a) : (b))
87 #define srs_max(a, b) (((a) < (b))? (b) : (a)) 87 #define srs_max(a, b) (((a) < (b))? (b) : (a))
88 88
89 -// get current system time in ms, use cache to avoid performance problem  
90 -extern int64_t srs_get_system_time_ms();  
91 -// the deamon st-thread will update it.  
92 -extern void srs_update_system_time_ms();  
93 -  
94 // signal defines. 89 // signal defines.
95 #define SIGNAL_RELOAD SIGHUP 90 #define SIGNAL_RELOAD SIGHUP
96 91
  1 +/*
  2 +The MIT License (MIT)
  3 +
  4 +Copyright (c) 2013-2014 winlin
  5 +
  6 +Permission is hereby granted, free of charge, to any person obtaining a copy of
  7 +this software and associated documentation files (the "Software"), to deal in
  8 +the Software without restriction, including without limitation the rights to
  9 +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  10 +the Software, and to permit persons to whom the Software is furnished to do so,
  11 +subject to the following conditions:
  12 +
  13 +The above copyright notice and this permission notice shall be included in all
  14 +copies or substantial portions of the Software.
  15 +
  16 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  18 +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  19 +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20 +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21 +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22 +*/
  23 +
  24 +#include <srs_kernel_utility.hpp>
  25 +
  26 +#include <sys/time.h>
  27 +
  28 +#include <srs_kernel_log.hpp>
  29 +
  30 +static int64_t _srs_system_time_us_cache = 0;
  31 +
  32 +int64_t srs_get_system_time_ms()
  33 +{
  34 + return _srs_system_time_us_cache / 1000;
  35 +}
  36 +
  37 +void srs_update_system_time_ms()
  38 +{
  39 + timeval now;
  40 +
  41 + if (gettimeofday(&now, NULL) < 0) {
  42 + srs_warn("gettimeofday failed, ignore");
  43 + return;
  44 + }
  45 +
  46 + // @see: https://github.com/winlinvip/simple-rtmp-server/issues/35
  47 + // we must convert the tv_sec/tv_usec to int64_t.
  48 + int64_t now_us = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec;
  49 + if (now_us < _srs_system_time_us_cache) {
  50 + srs_warn("system time negative, "
  51 + "history=%"PRId64"us, now=%"PRId64"", _srs_system_time_us_cache, now_us);
  52 + }
  53 +
  54 + _srs_system_time_us_cache = now_us;
  55 +}
  1 +/*
  2 +The MIT License (MIT)
  3 +
  4 +Copyright (c) 2013-2014 winlin
  5 +
  6 +Permission is hereby granted, free of charge, to any person obtaining a copy of
  7 +this software and associated documentation files (the "Software"), to deal in
  8 +the Software without restriction, including without limitation the rights to
  9 +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  10 +the Software, and to permit persons to whom the Software is furnished to do so,
  11 +subject to the following conditions:
  12 +
  13 +The above copyright notice and this permission notice shall be included in all
  14 +copies or substantial portions of the Software.
  15 +
  16 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  18 +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  19 +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20 +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21 +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22 +*/
  23 +
  24 +#ifndef SRS_KERNEL_UTILITY_HPP
  25 +#define SRS_KERNEL_UTILITY_HPP
  26 +
  27 +/*
  28 +#include <srs_kernel_utility.hpp>
  29 +*/
  30 +
  31 +#include <srs_core.hpp>
  32 +
  33 +// get current system time in ms, use cache to avoid performance problem
  34 +extern int64_t srs_get_system_time_ms();
  35 +// the deamon st-thread will update it.
  36 +extern void srs_update_system_time_ms();
  37 +
  38 +#endif
1 file 1 file
2 - main readonly separator,  
3 - ..\main\srs_main_server.cpp,  
4 - ..\main\srs_main_bandcheck.cpp,  
5 - auto readonly separator,  
6 - ..\..\objs\srs_auto_headers.hpp,  
7 - libs readonly separator,  
8 - ..\libs\srs_librtmp.hpp,  
9 - ..\libs\srs_librtmp.cpp,  
10 - ..\libs\srs_lib_simple_socket.hpp,  
11 - ..\libs\srs_lib_simple_socket.cpp,  
12 - core readonly separator,  
13 - ..\core\srs_core.hpp,  
14 - ..\core\srs_core.cpp,  
15 - ..\core\srs_core_autofree.hpp,  
16 - ..\core\srs_core_autofree.cpp,  
17 - kernel readonly separator,  
18 - ..\kernel\srs_kernel_buffer.hpp,  
19 - ..\kernel\srs_kernel_buffer.cpp,  
20 - ..\kernel\srs_kernel_error.hpp,  
21 - ..\kernel\srs_kernel_error.cpp,  
22 - ..\kernel\srs_kernel_log.hpp,  
23 - ..\kernel\srs_kernel_log.cpp,  
24 - ..\kernel\srs_kernel_stream.hpp,  
25 - ..\kernel\srs_kernel_stream.cpp,  
26 - rtmp-protocol readonly separator,  
27 - ..\rtmp\srs_protocol_amf0.hpp,  
28 - ..\rtmp\srs_protocol_amf0.cpp,  
29 - ..\rtmp\srs_protocol_handshake.hpp,  
30 - ..\rtmp\srs_protocol_handshake.cpp,  
31 - ..\rtmp\srs_protocol_io.hpp,  
32 - ..\rtmp\srs_protocol_io.cpp,  
33 - ..\rtmp\srs_protocol_rtmp.hpp,  
34 - ..\rtmp\srs_protocol_rtmp.cpp,  
35 - ..\rtmp\srs_protocol_rtmp_stack.hpp,  
36 - ..\rtmp\srs_protocol_rtmp_stack.cpp,  
37 - ..\rtmp\srs_protocol_utility.hpp,  
38 - ..\rtmp\srs_protocol_utility.cpp,  
39 - app readonly separator,  
40 - ..\app\srs_app_bandwidth.hpp,  
41 - ..\app\srs_app_bandwidth.cpp,  
42 - ..\app\srs_app_client.hpp,  
43 - ..\app\srs_app_client.cpp,  
44 - ..\app\srs_app_codec.hpp,  
45 - ..\app\srs_app_codec.cpp,  
46 - ..\app\srs_app_conn.hpp,  
47 - ..\app\srs_app_conn.cpp,  
48 - ..\app\srs_app_config.hpp,  
49 - ..\app\srs_app_config.cpp,  
50 - ..\app\srs_app_encoder.hpp,  
51 - ..\app\srs_app_encoder.cpp,  
52 - ..\app\srs_app_forward.hpp,  
53 - ..\app\srs_app_forward.cpp,  
54 - ..\app\srs_app_hls.hpp,  
55 - ..\app\srs_app_hls.cpp,  
56 - ..\app\srs_app_http.hpp,  
57 - ..\app\srs_app_http.cpp,  
58 - ..\app\srs_app_log.hpp,  
59 - ..\app\srs_app_log.cpp,  
60 - ..\app\srs_app_refer.hpp,  
61 - ..\app\srs_app_refer.cpp,  
62 - ..\app\srs_app_reload.hpp,  
63 - ..\app\srs_app_reload.cpp,  
64 - ..\app\srs_app_pithy_print.hpp,  
65 - ..\app\srs_app_pithy_print.cpp,  
66 - ..\app\srs_app_thread.hpp,  
67 - ..\app\srs_app_thread.cpp,  
68 - ..\app\srs_app_server.hpp,  
69 - ..\app\srs_app_server.cpp,  
70 - ..\app\srs_app_st.hpp,  
71 - ..\app\srs_app_st.cpp,  
72 - ..\app\srs_app_socket.hpp,  
73 - ..\app\srs_app_socket.cpp,  
74 - ..\app\srs_app_source.hpp,  
75 - ..\app\srs_app_source.cpp,  
76 - utest readonly separator,  
77 - ..\utest\srs_utest.hpp,  
78 - ..\utest\srs_utest.cpp,  
79 - ..\utest\srs_utest_amf0.hpp,  
80 - ..\utest\srs_utest_amf0.cpp,  
81 - ..\utest\srs_utest_handshake.hpp,  
82 - ..\utest\srs_utest_handshake.cpp,  
83 - research readonly separator,  
84 - ..\..\research\librtmp\srs_play.c,  
85 - ..\..\research\librtmp\srs_publish.c,  
86 - ..\..\research\hls\ts_info.cc; 2 + main readonly separator,
  3 + ..\main\srs_main_server.cpp,
  4 + ..\main\srs_main_bandcheck.cpp,
  5 + auto readonly separator,
  6 + ..\..\objs\srs_auto_headers.hpp,
  7 + libs readonly separator,
  8 + ..\libs\srs_librtmp.hpp,
  9 + ..\libs\srs_librtmp.cpp,
  10 + ..\libs\srs_lib_simple_socket.hpp,
  11 + ..\libs\srs_lib_simple_socket.cpp,
  12 + core readonly separator,
  13 + ..\core\srs_core.hpp,
  14 + ..\core\srs_core.cpp,
  15 + ..\core\srs_core_autofree.hpp,
  16 + ..\core\srs_core_autofree.cpp,
  17 + kernel readonly separator,
  18 + ..\kernel\srs_kernel_buffer.hpp,
  19 + ..\kernel\srs_kernel_buffer.cpp,
  20 + ..\kernel\srs_kernel_error.hpp,
  21 + ..\kernel\srs_kernel_error.cpp,
  22 + ..\kernel\srs_kernel_log.hpp,
  23 + ..\kernel\srs_kernel_log.cpp,
  24 + ..\kernel\srs_kernel_stream.hpp,
  25 + ..\kernel\srs_kernel_stream.cpp,
  26 + ..\kernel\srs_kernel_utility.hpp,
  27 + ..\kernel\srs_kernel_utility.cpp,
  28 + rtmp-protocol readonly separator,
  29 + ..\rtmp\srs_protocol_amf0.hpp,
  30 + ..\rtmp\srs_protocol_amf0.cpp,
  31 + ..\rtmp\srs_protocol_handshake.hpp,
  32 + ..\rtmp\srs_protocol_handshake.cpp,
  33 + ..\rtmp\srs_protocol_io.hpp,
  34 + ..\rtmp\srs_protocol_io.cpp,
  35 + ..\rtmp\srs_protocol_rtmp.hpp,
  36 + ..\rtmp\srs_protocol_rtmp.cpp,
  37 + ..\rtmp\srs_protocol_rtmp_stack.hpp,
  38 + ..\rtmp\srs_protocol_rtmp_stack.cpp,
  39 + ..\rtmp\srs_protocol_utility.hpp,
  40 + ..\rtmp\srs_protocol_utility.cpp,
  41 + app readonly separator,
  42 + ..\app\srs_app_bandwidth.hpp,
  43 + ..\app\srs_app_bandwidth.cpp,
  44 + ..\app\srs_app_client.hpp,
  45 + ..\app\srs_app_client.cpp,
  46 + ..\app\srs_app_codec.hpp,
  47 + ..\app\srs_app_codec.cpp,
  48 + ..\app\srs_app_conn.hpp,
  49 + ..\app\srs_app_conn.cpp,
  50 + ..\app\srs_app_config.hpp,
  51 + ..\app\srs_app_config.cpp,
  52 + ..\app\srs_app_encoder.hpp,
  53 + ..\app\srs_app_encoder.cpp,
  54 + ..\app\srs_app_forward.hpp,
  55 + ..\app\srs_app_forward.cpp,
  56 + ..\app\srs_app_hls.hpp,
  57 + ..\app\srs_app_hls.cpp,
  58 + ..\app\srs_app_http.hpp,
  59 + ..\app\srs_app_http.cpp,
  60 + ..\app\srs_app_log.hpp,
  61 + ..\app\srs_app_log.cpp,
  62 + ..\app\srs_app_refer.hpp,
  63 + ..\app\srs_app_refer.cpp,
  64 + ..\app\srs_app_reload.hpp,
  65 + ..\app\srs_app_reload.cpp,
  66 + ..\app\srs_app_pithy_print.hpp,
  67 + ..\app\srs_app_pithy_print.cpp,
  68 + ..\app\srs_app_thread.hpp,
  69 + ..\app\srs_app_thread.cpp,
  70 + ..\app\srs_app_server.hpp,
  71 + ..\app\srs_app_server.cpp,
  72 + ..\app\srs_app_st.hpp,
  73 + ..\app\srs_app_st.cpp,
  74 + ..\app\srs_app_socket.hpp,
  75 + ..\app\srs_app_socket.cpp,
  76 + ..\app\srs_app_source.hpp,
  77 + ..\app\srs_app_source.cpp,
  78 + utest readonly separator,
  79 + ..\utest\srs_utest.hpp,
  80 + ..\utest\srs_utest.cpp,
  81 + ..\utest\srs_utest_amf0.hpp,
  82 + ..\utest\srs_utest_amf0.cpp,
  83 + ..\utest\srs_utest_handshake.hpp,
  84 + ..\utest\srs_utest_handshake.cpp,
  85 + research readonly separator,
  86 + ..\..\research\librtmp\srs_play.c,
  87 + ..\..\research\librtmp\srs_publish.c,
  88 + ..\..\research\hls\ts_info.cc;
87 89
88 mainconfig 90 mainconfig
89 - "" = "MAIN"; 91 + "" = "MAIN";
90 92