diff --git a/src/MediaFile/HlsMaker.cpp b/src/MediaFile/HlsMaker.cpp index 36f88c39..f58b4f41 100644 --- a/src/MediaFile/HlsMaker.cpp +++ b/src/MediaFile/HlsMaker.cpp @@ -42,6 +42,12 @@ HlsMaker::~HlsMaker() { void HlsMaker::makeIndexFile(bool eof) { char file_content[1024]; int maxSegmentDuration = 0; + + //停止写之后将最后的片段也写进m3u8文件中 + if (eof && stampInc > 0) { + _seg_dur_list.push_back(std::make_tuple(stampInc, _last_file_name)); + } + for (auto &tp : _seg_dur_list) { int dur = std::get<0>(tp); if (dur > maxSegmentDuration) { @@ -57,7 +63,7 @@ void HlsMaker::makeIndexFile(bool eof) { "#EXT-X-TARGETDURATION:%u\n" "#EXT-X-MEDIA-SEQUENCE:%llu\n", (maxSegmentDuration + 999) / 1000, - _file_index); + _seg_number ? _file_index : 0); m3u8.assign(file_content); @@ -96,7 +102,7 @@ void HlsMaker::delOldFile() { } void HlsMaker::addNewFile(uint32_t) { - int stampInc = _ticker.elapsedTime(); + stampInc = _ticker.elapsedTime(); if (stampInc >= _seg_duration * 1000) { _ticker.resetTime(); auto file_name = onOpenFile(_file_index); diff --git a/src/MediaFile/HlsMaker.h b/src/MediaFile/HlsMaker.h index 0a1e9617..6b611fba 100644 --- a/src/MediaFile/HlsMaker.h +++ b/src/MediaFile/HlsMaker.h @@ -92,6 +92,7 @@ protected: protected: uint32_t _seg_number = 0; private: + int stampInc = 0; float _seg_duration = 0; uint64_t _file_index = 0; Ticker _ticker;