正在显示
1 个修改的文件
包含
14 行增加
和
4 行删除
@@ -714,6 +714,9 @@ int SrsHls::reopen() | @@ -714,6 +714,9 @@ int SrsHls::reopen() | ||
714 | current->duration = (stream_dts - current->segment_start_dts) / 90000.0; | 714 | current->duration = (stream_dts - current->segment_start_dts) / 90000.0; |
715 | segments.push_back(current); | 715 | segments.push_back(current); |
716 | 716 | ||
717 | + srs_trace("reap ts segment, sequence_no=%d, uri=%s, duration=%.2f, start=%"PRId64"", | ||
718 | + current->sequence_no, current->uri.c_str(), current->duration, current->segment_start_dts); | ||
719 | + | ||
717 | // close the muxer of finished segment. | 720 | // close the muxer of finished segment. |
718 | srs_freep(current->muxer); | 721 | srs_freep(current->muxer); |
719 | current = NULL; | 722 | current = NULL; |
@@ -726,19 +729,20 @@ int SrsHls::reopen() | @@ -726,19 +729,20 @@ int SrsHls::reopen() | ||
726 | std::vector<SrsM3u8Segment*>::reverse_iterator it; | 729 | std::vector<SrsM3u8Segment*>::reverse_iterator it; |
727 | for (it = segments.rbegin(); it != segments.rend(); ++it) { | 730 | for (it = segments.rbegin(); it != segments.rend(); ++it) { |
728 | SrsM3u8Segment* segment = *it; | 731 | SrsM3u8Segment* segment = *it; |
729 | - duration += segment->duration; | ||
730 | 732 | ||
733 | + // once find the overflow segment, clear all segments before it. | ||
731 | if ((int)duration > hls_window) { | 734 | if ((int)duration > hls_window) { |
732 | segment_to_remove.push_back(segment); | 735 | segment_to_remove.push_back(segment); |
736 | + continue; | ||
733 | } | 737 | } |
738 | + | ||
739 | + duration += segment->duration; | ||
734 | } | 740 | } |
735 | if (!segment_to_remove.empty()) { | 741 | if (!segment_to_remove.empty()) { |
736 | segments.erase(segments.begin(), segments.begin() + segment_to_remove.size()); | 742 | segments.erase(segments.begin(), segments.begin() + segment_to_remove.size()); |
737 | 743 | ||
738 | // refresh the m3u8, donot contains the removed ts | 744 | // refresh the m3u8, donot contains the removed ts |
739 | - if ((ret = refresh_m3u8()) != ERROR_SUCCESS) { | ||
740 | - return ret; | ||
741 | - } | 745 | + ret = refresh_m3u8(); |
742 | } | 746 | } |
743 | 747 | ||
744 | // remove the ts file. | 748 | // remove the ts file. |
@@ -747,6 +751,12 @@ int SrsHls::reopen() | @@ -747,6 +751,12 @@ int SrsHls::reopen() | ||
747 | unlink(segment->full_path.c_str()); | 751 | unlink(segment->full_path.c_str()); |
748 | srs_freep(segment); | 752 | srs_freep(segment); |
749 | } | 753 | } |
754 | + | ||
755 | + // check ret of refresh m3u8 | ||
756 | + if (ret != ERROR_SUCCESS) { | ||
757 | + srs_error("refresh m3u8 failed. ret=%d", ret); | ||
758 | + return ret; | ||
759 | + } | ||
750 | } | 760 | } |
751 | // new segment. | 761 | // new segment. |
752 | current = new SrsM3u8Segment(); | 762 | current = new SrsM3u8Segment(); |
-
请 注册 或 登录 后发表评论