正在显示
3 个修改的文件
包含
63 行增加
和
31 行删除
@@ -34,27 +34,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -34,27 +34,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
34 | 34 | ||
35 | #define SRS_STAGE_DEFAULT_INTERVAL_MS 1200 | 35 | #define SRS_STAGE_DEFAULT_INTERVAL_MS 1200 |
36 | 36 | ||
37 | -struct SrsStageInfo : public ISrsReloadHandler | 37 | +SrsStageInfo::SrsStageInfo(int _stage_id) |
38 | { | 38 | { |
39 | - int stage_id; | ||
40 | - int pithy_print_time_ms; | ||
41 | - int nb_clients; | ||
42 | - | ||
43 | - SrsStageInfo(int _stage_id) | ||
44 | - { | ||
45 | stage_id = _stage_id; | 39 | stage_id = _stage_id; |
46 | nb_clients = 0; | 40 | nb_clients = 0; |
41 | + _age = printed_age = 0; | ||
47 | 42 | ||
48 | update_print_time(); | 43 | update_print_time(); |
49 | 44 | ||
50 | _srs_config->subscribe(this); | 45 | _srs_config->subscribe(this); |
51 | - } | ||
52 | - virtual ~SrsStageInfo() | ||
53 | - { | 46 | +} |
47 | + | ||
48 | +SrsStageInfo::~SrsStageInfo() | ||
49 | +{ | ||
54 | _srs_config->unsubscribe(this); | 50 | _srs_config->unsubscribe(this); |
55 | - } | ||
56 | - void update_print_time() | ||
57 | - { | 51 | +} |
52 | + | ||
53 | +void SrsStageInfo::update_print_time() | ||
54 | +{ | ||
58 | switch (stage_id) { | 55 | switch (stage_id) { |
59 | case SRS_STAGE_PLAY_USER: { | 56 | case SRS_STAGE_PLAY_USER: { |
60 | pithy_print_time_ms = _srs_config->get_pithy_print_play(); | 57 | pithy_print_time_ms = _srs_config->get_pithy_print_play(); |
@@ -89,14 +86,31 @@ struct SrsStageInfo : public ISrsReloadHandler | @@ -89,14 +86,31 @@ struct SrsStageInfo : public ISrsReloadHandler | ||
89 | break; | 86 | break; |
90 | } | 87 | } |
91 | } | 88 | } |
89 | +} | ||
90 | + | ||
91 | +void SrsStageInfo::elapse(int64_t diff) | ||
92 | +{ | ||
93 | + _age += diff; | ||
94 | +} | ||
95 | + | ||
96 | +bool SrsStageInfo::can_print() | ||
97 | +{ | ||
98 | + int64_t can_print_age = nb_clients * pithy_print_time_ms; | ||
99 | + | ||
100 | + bool can_print = _age >= can_print_age; | ||
101 | + if (can_print) { | ||
102 | + _age = 0; | ||
92 | } | 103 | } |
93 | -public: | ||
94 | - virtual int on_reload_pithy_print() | ||
95 | - { | 104 | + |
105 | + return can_print; | ||
106 | +} | ||
107 | + | ||
108 | +int SrsStageInfo::on_reload_pithy_print() | ||
109 | +{ | ||
96 | update_print_time(); | 110 | update_print_time(); |
97 | return ERROR_SUCCESS; | 111 | return ERROR_SUCCESS; |
98 | - } | ||
99 | -}; | 112 | +} |
113 | + | ||
100 | static std::map<int, SrsStageInfo*> _srs_stages; | 114 | static std::map<int, SrsStageInfo*> _srs_stages; |
101 | 115 | ||
102 | SrsPithyPrint::SrsPithyPrint(int _stage_id) | 116 | SrsPithyPrint::SrsPithyPrint(int _stage_id) |
@@ -104,7 +118,7 @@ SrsPithyPrint::SrsPithyPrint(int _stage_id) | @@ -104,7 +118,7 @@ SrsPithyPrint::SrsPithyPrint(int _stage_id) | ||
104 | stage_id = _stage_id; | 118 | stage_id = _stage_id; |
105 | client_id = enter_stage(); | 119 | client_id = enter_stage(); |
106 | previous_tick = srs_get_system_time_ms(); | 120 | previous_tick = srs_get_system_time_ms(); |
107 | - printed_age = _age = 0; | 121 | + _age = 0; |
108 | } | 122 | } |
109 | 123 | ||
110 | SrsPithyPrint::~SrsPithyPrint() | 124 | SrsPithyPrint::~SrsPithyPrint() |
@@ -146,9 +160,14 @@ void SrsPithyPrint::leave_stage() | @@ -146,9 +160,14 @@ void SrsPithyPrint::leave_stage() | ||
146 | 160 | ||
147 | void SrsPithyPrint::elapse() | 161 | void SrsPithyPrint::elapse() |
148 | { | 162 | { |
163 | + SrsStageInfo* stage = _srs_stages[stage_id]; | ||
164 | + srs_assert(stage != NULL); | ||
165 | + | ||
149 | int64_t diff = srs_get_system_time_ms() - previous_tick; | 166 | int64_t diff = srs_get_system_time_ms() - previous_tick; |
167 | + diff = srs_max(0, diff); | ||
150 | 168 | ||
151 | - _age += srs_max(0, diff); | 169 | + stage->elapse(diff); |
170 | + _age += diff; | ||
152 | previous_tick = srs_get_system_time_ms(); | 171 | previous_tick = srs_get_system_time_ms(); |
153 | } | 172 | } |
154 | 173 | ||
@@ -157,15 +176,7 @@ bool SrsPithyPrint::can_print() | @@ -157,15 +176,7 @@ bool SrsPithyPrint::can_print() | ||
157 | SrsStageInfo* stage = _srs_stages[stage_id]; | 176 | SrsStageInfo* stage = _srs_stages[stage_id]; |
158 | srs_assert(stage != NULL); | 177 | srs_assert(stage != NULL); |
159 | 178 | ||
160 | - int64_t alive_age = _age - printed_age; | ||
161 | - int64_t can_print_age = stage->nb_clients * stage->pithy_print_time_ms; | ||
162 | - | ||
163 | - bool can_print = alive_age >= can_print_age; | ||
164 | - if (can_print) { | ||
165 | - printed_age = _age; | ||
166 | - } | ||
167 | - | ||
168 | - return can_print; | 179 | + return stage->can_print(); |
169 | } | 180 | } |
170 | 181 | ||
171 | int64_t SrsPithyPrint::age() | 182 | int64_t SrsPithyPrint::age() |
@@ -30,6 +30,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -30,6 +30,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
30 | 30 | ||
31 | #include <srs_core.hpp> | 31 | #include <srs_core.hpp> |
32 | 32 | ||
33 | +#include <srs_app_reload.hpp> | ||
34 | + | ||
33 | // the pithy stage for all play clients. | 35 | // the pithy stage for all play clients. |
34 | #define SRS_STAGE_PLAY_USER 1 | 36 | #define SRS_STAGE_PLAY_USER 1 |
35 | // the pithy stage for all publish clients. | 37 | // the pithy stage for all publish clients. |
@@ -45,6 +47,26 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -45,6 +47,26 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
45 | // the pithy stage for all edge. | 47 | // the pithy stage for all edge. |
46 | #define SRS_STAGE_EDGE 7 | 48 | #define SRS_STAGE_EDGE 7 |
47 | 49 | ||
50 | +class SrsStageInfo : public ISrsReloadHandler | ||
51 | +{ | ||
52 | +public: | ||
53 | + int stage_id; | ||
54 | + int pithy_print_time_ms; | ||
55 | + int nb_clients; | ||
56 | +public: | ||
57 | + int64_t _age; | ||
58 | + int64_t printed_age; | ||
59 | +public: | ||
60 | + SrsStageInfo(int _stage_id); | ||
61 | + virtual ~SrsStageInfo(); | ||
62 | + virtual void update_print_time(); | ||
63 | +public: | ||
64 | + virtual void elapse(int64_t diff); | ||
65 | + virtual bool can_print(); | ||
66 | +public: | ||
67 | + virtual int on_reload_pithy_print(); | ||
68 | +}; | ||
69 | + | ||
48 | /** | 70 | /** |
49 | * the stage is used for a collection of object to do print, | 71 | * the stage is used for a collection of object to do print, |
50 | * the print time in a stage is constant and not changed. | 72 | * the print time in a stage is constant and not changed. |
@@ -58,7 +80,6 @@ private: | @@ -58,7 +80,6 @@ private: | ||
58 | int stage_id; | 80 | int stage_id; |
59 | // in ms. | 81 | // in ms. |
60 | int64_t _age; | 82 | int64_t _age; |
61 | - int64_t printed_age; | ||
62 | int64_t previous_tick; | 83 | int64_t previous_tick; |
63 | public: | 84 | public: |
64 | /** | 85 | /** |
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
31 | // current release version | 31 | // current release version |
32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
34 | -#define VERSION_REVISION "97" | 34 | +#define VERSION_REVISION "98" |
35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
36 | // server info. | 36 | // server info. |
37 | #define RTMP_SIG_SRS_KEY "srs" | 37 | #define RTMP_SIG_SRS_KEY "srs" |
-
请 注册 或 登录 后发表评论