don't clean up hls ts files when hls_total_m3u8_file is not empty
正在显示
3 个修改的文件
包含
28 行增加
和
17 行删除
@@ -72,7 +72,7 @@ const char* _srs_version = "XCORE-"RTMP_SIG_SRS_SERVER; | @@ -72,7 +72,7 @@ const char* _srs_version = "XCORE-"RTMP_SIG_SRS_SERVER; | ||
72 | #define SRS_CONF_DEFAULT_MAX_CONNECTIONS 1000 | 72 | #define SRS_CONF_DEFAULT_MAX_CONNECTIONS 1000 |
73 | #define SRS_CONF_DEFAULT_HLS_PATH "./objs/nginx/html" | 73 | #define SRS_CONF_DEFAULT_HLS_PATH "./objs/nginx/html" |
74 | #define SRS_CONF_DEFAULT_HLS_M3U8_FILE "[app]/[stream].m3u8" | 74 | #define SRS_CONF_DEFAULT_HLS_M3U8_FILE "[app]/[stream].m3u8" |
75 | -#define SRS_CONF_DEFAULT_HLS_TOTAL_M3U8_FILE "[app]/[stream]_total.m3u8" | 75 | +#define SRS_CONF_DEFAULT_HLS_TOTAL_M3U8_FILE "" |
76 | #define SRS_CONF_DEFAULT_HLS_TOTAL_FILE "[app]/[stream]_total" | 76 | #define SRS_CONF_DEFAULT_HLS_TOTAL_FILE "[app]/[stream]_total" |
77 | #define SRS_CONF_DEFAULT_HLS_TS_FILE "[app]/[stream]-[seq].ts" | 77 | #define SRS_CONF_DEFAULT_HLS_TS_FILE "[app]/[stream]-[seq].ts" |
78 | #define SRS_CONF_DEFAULT_HLS_TS_FLOOR false | 78 | #define SRS_CONF_DEFAULT_HLS_TS_FLOOR false |
@@ -302,6 +302,7 @@ SrsHlsMuxer::SrsHlsMuxer() | @@ -302,6 +302,7 @@ SrsHlsMuxer::SrsHlsMuxer() | ||
302 | should_write_file = true; | 302 | should_write_file = true; |
303 | async = new SrsAsyncCallWorker(); | 303 | async = new SrsAsyncCallWorker(); |
304 | context = new SrsTsContext(); | 304 | context = new SrsTsContext(); |
305 | + save_m3u8_total = false; | ||
305 | } | 306 | } |
306 | 307 | ||
307 | SrsHlsMuxer::~SrsHlsMuxer() | 308 | SrsHlsMuxer::~SrsHlsMuxer() |
@@ -415,6 +416,7 @@ int SrsHlsMuxer::update_config(SrsRequest* r, string entry_prefix, | @@ -415,6 +416,7 @@ int SrsHlsMuxer::update_config(SrsRequest* r, string entry_prefix, | ||
415 | // generate the total m3u8 dir and path. | 416 | // generate the total m3u8 dir and path. |
416 | total_m3u8_url = srs_path_build_stream(total_m3u8_file, req->vhost, req->app, req->stream); | 417 | total_m3u8_url = srs_path_build_stream(total_m3u8_file, req->vhost, req->app, req->stream); |
417 | total_m3u8 = path + "/" + total_m3u8_url; | 418 | total_m3u8 = path + "/" + total_m3u8_url; |
419 | + save_m3u8_total = !total_m3u8_url.empty(); | ||
418 | 420 | ||
419 | // generate the m3u8 dir and path. | 421 | // generate the m3u8 dir and path. |
420 | total_url = srs_path_build_stream(total_file, req->vhost, req->app, req->stream); | 422 | total_url = srs_path_build_stream(total_file, req->vhost, req->app, req->stream); |
@@ -761,37 +763,42 @@ int SrsHlsMuxer::segment_close(string log_desc) | @@ -761,37 +763,42 @@ int SrsHlsMuxer::segment_close(string log_desc) | ||
761 | } | 763 | } |
762 | 764 | ||
763 | 765 | ||
766 | + if (save_m3u8_total) { | ||
764 | SrsFileWriter total_m3u8_writer; | 767 | SrsFileWriter total_m3u8_writer; |
765 | //add segment to total.m3u8 | 768 | //add segment to total.m3u8 |
766 | std::stringstream ss; | 769 | std::stringstream ss; |
767 | 770 | ||
768 | - if(currentSeg->sequence_no == 0){ | 771 | + if (currentSeg->sequence_no == 0) { |
769 | ret = total_m3u8_writer.open(total_m3u8); | 772 | ret = total_m3u8_writer.open(total_m3u8); |
770 | - if(ret != ERROR_SUCCESS){ | ||
771 | - srs_error("open total file %s error:%s reap ts segment, sequence_no=%d, uri=%s, duration=%.2f, start=%"PRId64, | ||
772 | - total_m3u8.c_str(), log_desc.c_str(), currentSeg->sequence_no, currentSeg->uri.c_str(), currentSeg->duration, | 773 | + if (ret != ERROR_SUCCESS) { |
774 | + srs_error( | ||
775 | + "open total file %s error:%s reap ts segment, sequence_no=%d, uri=%s, duration=%.2f, start=%"PRId64, | ||
776 | + total_m3u8.c_str(), log_desc.c_str(), | ||
777 | + currentSeg->sequence_no, currentSeg->uri.c_str(), | ||
778 | + currentSeg->duration, | ||
773 | currentSeg->segment_start_dts); | 779 | currentSeg->segment_start_dts); |
774 | return ret; | 780 | return ret; |
775 | } | 781 | } |
776 | //write total m3u8 header | 782 | //write total m3u8 header |
777 | 783 | ||
778 | - ss << "#EXTM3U" << SRS_CONSTS_LF | ||
779 | - << "#EXT-X-VERSION:3" << SRS_CONSTS_LF | ||
780 | - << "#EXT-X-ALLOW-CACHE:YES" << SRS_CONSTS_LF; | 784 | + ss << "#EXTM3U" << SRS_CONSTS_LF << "#EXT-X-VERSION:3" |
785 | + << SRS_CONSTS_LF << "#EXT-X-ALLOW-CACHE:YES" | ||
786 | + << SRS_CONSTS_LF; | ||
781 | srs_verbose("write m3u8 header success."); | 787 | srs_verbose("write m3u8 header success."); |
782 | 788 | ||
783 | - } | ||
784 | - else{ | 789 | + } else { |
785 | ret = total_m3u8_writer.open_append(total_m3u8); | 790 | ret = total_m3u8_writer.open_append(total_m3u8); |
786 | - if(ret != ERROR_SUCCESS){ | ||
787 | - srs_error("open total file %s error:%s reap ts segment, sequence_no=%d, uri=%s, duration=%.2f, start=%"PRId64, | ||
788 | - total_m3u8.c_str(), log_desc.c_str(), currentSeg->sequence_no, currentSeg->uri.c_str(), currentSeg->duration, | 791 | + if (ret != ERROR_SUCCESS) { |
792 | + srs_error( | ||
793 | + "open total file %s error:%s reap ts segment, sequence_no=%d, uri=%s, duration=%.2f, start=%"PRId64, | ||
794 | + total_m3u8.c_str(), log_desc.c_str(), | ||
795 | + currentSeg->sequence_no, currentSeg->uri.c_str(), | ||
796 | + currentSeg->duration, | ||
789 | currentSeg->segment_start_dts); | 797 | currentSeg->segment_start_dts); |
790 | return ret; | 798 | return ret; |
791 | } | 799 | } |
792 | } | 800 | } |
793 | 801 | ||
794 | - | ||
795 | if (currentSeg->is_sequence_header) { | 802 | if (currentSeg->is_sequence_header) { |
796 | // #EXT-X-DISCONTINUITY\n | 803 | // #EXT-X-DISCONTINUITY\n |
797 | ss << "#EXT-X-DISCONTINUITY" << SRS_CONSTS_LF; | 804 | ss << "#EXT-X-DISCONTINUITY" << SRS_CONSTS_LF; |
@@ -801,7 +808,8 @@ int SrsHlsMuxer::segment_close(string log_desc) | @@ -801,7 +808,8 @@ int SrsHlsMuxer::segment_close(string log_desc) | ||
801 | // "#EXTINF:4294967295.208,\n" | 808 | // "#EXTINF:4294967295.208,\n" |
802 | ss.precision(3); | 809 | ss.precision(3); |
803 | ss.setf(std::ios::fixed, std::ios::floatfield); | 810 | ss.setf(std::ios::fixed, std::ios::floatfield); |
804 | - ss << "#EXTINF:" << currentSeg->duration << ", no desc" << SRS_CONSTS_LF; | 811 | + ss << "#EXTINF:" << currentSeg->duration << ", no desc" |
812 | + << SRS_CONSTS_LF; | ||
805 | srs_verbose("write m3u8 segment info success."); | 813 | srs_verbose("write m3u8 segment info success."); |
806 | 814 | ||
807 | // {file name}\n | 815 | // {file name}\n |
@@ -810,11 +818,13 @@ int SrsHlsMuxer::segment_close(string log_desc) | @@ -810,11 +818,13 @@ int SrsHlsMuxer::segment_close(string log_desc) | ||
810 | 818 | ||
811 | // write m3u8 to writer. | 819 | // write m3u8 to writer. |
812 | std::string m3u8 = ss.str(); | 820 | std::string m3u8 = ss.str(); |
813 | - if ((ret = total_m3u8_writer.write((char*)m3u8.c_str(), (int)m3u8.length(), NULL)) != ERROR_SUCCESS) { | 821 | + if ((ret = total_m3u8_writer.write((char*) m3u8.c_str(), |
822 | + (int) m3u8.length(), NULL)) != ERROR_SUCCESS) { | ||
814 | srs_error("write m3u8 failed. ret=%d", ret); | 823 | srs_error("write m3u8 failed. ret=%d", ret); |
815 | return ret; | 824 | return ret; |
816 | } | 825 | } |
817 | srs_info("write total m3u8 %s success.", m3u8_total_file.c_str()); | 826 | srs_info("write total m3u8 %s success.", m3u8_total_file.c_str()); |
827 | + } | ||
818 | 828 | ||
819 | } else { | 829 | } else { |
820 | // reuse current segment index. | 830 | // reuse current segment index. |
@@ -1023,7 +1033,7 @@ int SrsHlsCache::on_publish(SrsHlsMuxer* muxer, SrsRequest* req, int64_t segment | @@ -1023,7 +1033,7 @@ int SrsHlsCache::on_publish(SrsHlsMuxer* muxer, SrsRequest* req, int64_t segment | ||
1023 | std::string total_m3u8_file = _srs_config->get_hls_total_m3u8_file(vhost); | 1033 | std::string total_m3u8_file = _srs_config->get_hls_total_m3u8_file(vhost); |
1024 | std::string total_file = _srs_config->get_hls_total_file(vhost); | 1034 | std::string total_file = _srs_config->get_hls_total_file(vhost); |
1025 | std::string ts_file = _srs_config->get_hls_ts_file(vhost); | 1035 | std::string ts_file = _srs_config->get_hls_ts_file(vhost); |
1026 | - bool cleanup = _srs_config->get_hls_cleanup(vhost); | 1036 | + bool cleanup = _srs_config->get_hls_cleanup(vhost) && total_m3u8_file.empty(); |
1027 | bool wait_keyframe = _srs_config->get_hls_wait_keyframe(vhost); | 1037 | bool wait_keyframe = _srs_config->get_hls_wait_keyframe(vhost); |
1028 | // the audio overflow, for pure audio to reap segment. | 1038 | // the audio overflow, for pure audio to reap segment. |
1029 | double hls_aof_ratio = _srs_config->get_hls_aof_ratio(vhost); | 1039 | double hls_aof_ratio = _srs_config->get_hls_aof_ratio(vhost); |
@@ -209,6 +209,7 @@ private: | @@ -209,6 +209,7 @@ private: | ||
209 | std::string total_m3u8_url; | 209 | std::string total_m3u8_url; |
210 | std::string total; | 210 | std::string total; |
211 | std::string total_url; | 211 | std::string total_url; |
212 | + bool save_m3u8_total; | ||
212 | private: | 213 | private: |
213 | // TODO: FIXME: remove it. | 214 | // TODO: FIXME: remove it. |
214 | bool should_write_cache; | 215 | bool should_write_cache; |
-
请 注册 或 登录 后发表评论