diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 92ba24982..3e08b9e94 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -6413,9 +6413,9 @@ string SrsConfig::get_hds_path(const string &vhost) return conf->arg0(); } -double SrsConfig::get_hds_fragment(const string &vhost) +srs_utime_t SrsConfig::get_hds_fragment(const string &vhost) { - static double DEFAULT = 10; + static srs_utime_t DEFAULT = (10 * SRS_UTIME_SECONDS); SrsConfDirective* conf = get_hds(vhost); if (!conf) { @@ -6427,12 +6427,12 @@ double SrsConfig::get_hds_fragment(const string &vhost) return DEFAULT; } - return ::atof(conf->arg0().c_str()); + return srs_utime_t(::atof(conf->arg0().c_str()) * SRS_UTIME_SECONDS); } -double SrsConfig::get_hds_window(const string &vhost) +srs_utime_t SrsConfig::get_hds_window(const string &vhost) { - static double DEFAULT = 60; + static srs_utime_t DEFAULT = (60 * SRS_UTIME_SECONDS); SrsConfDirective* conf = get_hds(vhost); if (!conf) { @@ -6444,7 +6444,7 @@ double SrsConfig::get_hds_window(const string &vhost) return DEFAULT; } - return ::atof(conf->arg0().c_str()); + return srs_utime_t(::atof(conf->arg0().c_str()) * SRS_UTIME_SECONDS); } SrsConfDirective* SrsConfig::get_dvr(string vhost) diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index 235bb715f..d45a1b4c6 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -1277,15 +1277,14 @@ public: */ virtual std::string get_hds_path(const std::string &vhost); /** - * get the hds fragment time, in seconds. + * get the hds fragment time, in srs_utime_t. */ - // TODO: FIXME: Refine to time unit. - virtual double get_hds_fragment(const std::string &vhost); + virtual srs_utime_t get_hds_fragment(const std::string &vhost); /** - * get the hds window time, in seconds. + * get the hds window time, in srs_utime_t. * a window is a set of hds fragments. */ - virtual double get_hds_window(const std::string &vhost); + virtual srs_utime_t get_hds_window(const std::string &vhost); // dvr section private: /** diff --git a/trunk/src/app/srs_app_hds.cpp b/trunk/src/app/srs_app_hds.cpp index 67952fc5d..dc5d38a7f 100644 --- a/trunk/src/app/srs_app_hds.cpp +++ b/trunk/src/app/srs_app_hds.cpp @@ -348,7 +348,7 @@ srs_error_t SrsHds::on_video(SrsSharedPtrMessage* msg) currentSegment->on_video(msg); - double fragment_duration = _srs_config->get_hds_fragment(hds_req->vhost) * 1000; + double fragment_duration = srsu2ms(_srs_config->get_hds_fragment(hds_req->vhost)); if (currentSegment->duration() >= fragment_duration) { // flush segment if ((err = currentSegment->flush()) != srs_success) { @@ -398,7 +398,7 @@ srs_error_t SrsHds::on_audio(SrsSharedPtrMessage* msg) currentSegment->on_audio(msg); - double fragment_duration = _srs_config->get_hds_fragment(hds_req->vhost) * 1000; + double fragment_duration = srsu2ms(_srs_config->get_hds_fragment(hds_req->vhost)); if (currentSegment->duration() >= fragment_duration) { // flush segment if ((err = currentSegment->flush()) != srs_success) { @@ -718,7 +718,7 @@ void SrsHds::adjust_windows() windows_size += fragment->duration(); } - double windows_size_limit = _srs_config->get_hds_window(hds_req->vhost) * 1000; + double windows_size_limit = srsu2ms(_srs_config->get_hds_window(hds_req->vhost)); if (windows_size > windows_size_limit ) { SrsHdsFragment *fragment = fragments.front(); unlink(fragment->fragment_path().c_str()); diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp index 90f2d4099..8dc37b3d2 100644 --- a/trunk/src/utest/srs_utest_config.cpp +++ b/trunk/src/utest/srs_utest_config.cpp @@ -1879,6 +1879,16 @@ VOID TEST(ConfigUnitTest, CheckDefaultValuesVhost) EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_hls_window("v")); } + if (true) { + EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF)); + EXPECT_EQ(10 * SRS_UTIME_SECONDS, conf.get_hds_fragment("")); + EXPECT_EQ(60 * SRS_UTIME_SECONDS, conf.get_hds_window("")); + + EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF"vhost v{hds{hds_fragment 20;hds_window 30;}}")); + EXPECT_EQ(20 * SRS_UTIME_SECONDS, conf.get_hds_fragment("v")); + EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_hds_window("v")); + } + if (true) { EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF)); EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_queue_length(""));