diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index 836dbd7e1..7d1bf1cf8 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -63,6 +63,17 @@ void SrsHlsSegment::config_cipher(unsigned char* key,unsigned char* iv) SrsEncFileWriter* fw = (SrsEncFileWriter*)writer; fw->config_cipher(key, iv); +} + +srs_error_t SrsHlsSegment::rename() +{ + if (true) { + std::stringstream ss; + ss << srsu2msi(duration()); + uri = srs_string_replace(uri, "[duration]", ss.str()); + } + + return SrsFragment::rename(); } SrsDvrAsyncCallOnHls::SrsDvrAsyncCallOnHls(SrsContextId c, SrsRequest* r, string p, string t, string m, string mu, int s, srs_utime_t d) @@ -607,6 +618,11 @@ srs_error_t SrsHlsMuxer::do_segment_close() bool matchMinDuration = current->duration() >= SRS_HLS_SEGMENT_MIN_DURATION; bool matchMaxDuration = current->duration() <= max_td * 2 * 1000; if (matchMinDuration && matchMaxDuration) { + // rename from tmp to real path + if ((err = current->rename()) != srs_success) { + return srs_error_wrap(err, "rename"); + } + // use async to call the http hooks, for it will cause thread switch. if ((err = async->execute(new SrsDvrAsyncCallOnHls(_srs_context->get_id(), req, current->fullpath(), current->uri, m3u8, m3u8_url, current->sequence_no, current->duration()))) != srs_success) { @@ -620,12 +636,7 @@ srs_error_t SrsHlsMuxer::do_segment_close() // close the muxer of finished segment. srs_freep(current->tscw); - - // rename from tmp to real path - if ((err = current->rename()) != srs_success) { - return srs_error_wrap(err, "rename"); - } - + segments->append(current); current = NULL; } else { diff --git a/trunk/src/app/srs_app_hls.hpp b/trunk/src/app/srs_app_hls.hpp index 1c5cad790..332eaa41f 100644 --- a/trunk/src/app/srs_app_hls.hpp +++ b/trunk/src/app/srs_app_hls.hpp @@ -57,6 +57,8 @@ public: virtual ~SrsHlsSegment(); public: void config_cipher(unsigned char* key,unsigned char* iv); + // replace the placeholder + virtual srs_error_t rename(); }; // The hls async call: on_hls