diff --git a/README.md b/README.md index 554c1da8d..8fd93055a 100755 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ Compare SRS with other media server. | RTMP Edge | Stable | X | X | Stable | X | | RTMP Backup | Stable | X | X | X | X | | VHOST | Stable | X | X | Stable | Stable | -| Reload | Stable | Stable | X | X | X | +| Reload | Stable | X | X | X | X | | Forward | Stable | X | X | X | X | | ATC | Stable | X | X | X | X | @@ -312,6 +312,7 @@ Remark: 1. HLS aonly: The HLS audio only streaming delivery. 1. BW check: The bandwidth check. 1. Security: To allow or deny stream publish or play. +1. Reload: Nginx supports reload, but not nginx-rtmp. ## Releases diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index a7ad5a5ef..a03aaf2cd 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -292,6 +292,7 @@ SrsHlsMuxer::SrsHlsMuxer() SrsHlsMuxer::~SrsHlsMuxer() { + std::vector::iterator it; for (it = segments.begin(); it != segments.end(); ++it) { SrsHlsSegment* segment = *it; @@ -305,6 +306,40 @@ SrsHlsMuxer::~SrsHlsMuxer() srs_freep(context); } +void SrsHlsMuxer::dispose() +{ + if (!should_write_file) { + return; + } + + std::vector::iterator it; + for (it = segments.begin(); it != segments.end(); ++it) { + SrsHlsSegment* segment = *it; + if (unlink(segment->full_path.c_str()) < 0) { + srs_warn("dispose unlink path failed, file=%s.", segment->full_path.c_str()); + } + } + + if (current) { + std::string path = current->full_path + ".tmp"; + if (unlink(path.c_str()) < 0) { + srs_warn("dispose unlink path failed, file=%s", path.c_str()); + } + } + + if (unlink(m3u8.c_str()) < 0) { + srs_warn("dispose unlink path failed. file=%s", m3u8.c_str()); + } + srs_trace("gracefully dispose hls %s", req? req->get_stream_url().c_str() : ""); +} + +int SrsHlsMuxer::cycle() +{ + int ret = ERROR_SUCCESS; + // TODO: FIXME: implements it. + return ret; +} + int SrsHlsMuxer::sequence_no() { return _sequence_no; @@ -720,6 +755,9 @@ int SrsHlsMuxer::segment_close(string log_desc) std::string tmp_file = current->full_path + ".tmp"; if (should_write_file) { unlink(tmp_file.c_str()); + if (unlink(tmp_file.c_str()) < 0) { + srs_warn("drop unlink path failed, file=%s.", tmp_file.c_str()); + } } srs_freep(current); @@ -754,7 +792,9 @@ int SrsHlsMuxer::segment_close(string log_desc) SrsHlsSegment* segment = segment_to_remove[i]; if (hls_cleanup) { - unlink(segment->full_path.c_str()); + if (unlink(segment->full_path.c_str()) < 0) { + srs_warn("cleanup unlink path failed, file=%s.", segment->full_path.c_str()); + } } srs_freep(segment); @@ -1111,15 +1151,17 @@ SrsHls::~SrsHls() void SrsHls::dispose() { + if (hls_enabled) { + on_unpublish(); + } + + muxer->dispose(); } int SrsHls::cycle() { - int ret = ERROR_SUCCESS; - srs_info("hls cycle for source %d", source->source_id()); - - return ret; + return muxer->cycle(); } int SrsHls::initialize(SrsSource* s, ISrsHlsHandler* h) diff --git a/trunk/src/app/srs_app_hls.hpp b/trunk/src/app/srs_app_hls.hpp index 78e660410..192ba3a9c 100644 --- a/trunk/src/app/srs_app_hls.hpp +++ b/trunk/src/app/srs_app_hls.hpp @@ -259,6 +259,9 @@ private: public: SrsHlsMuxer(); virtual ~SrsHlsMuxer(); +public: + virtual void dispose(); + virtual int cycle(); public: virtual int sequence_no(); virtual std::string ts_url();