From 39a528cc02564fb9eacb32362d4ae7d457fb6063 Mon Sep 17 00:00:00 2001 From: "Weiwei.Zhou" Date: Sun, 29 Sep 2019 22:05:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=9C=E6=AD=A2=E5=86=99=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=E5=B0=86=E6=9C=80=E5=90=8E=E7=9A=84=E7=89=87=E6=AE=B5=E4=B9=9F?= =?UTF-8?q?=E5=86=99=E8=BF=9Bm3u8=E6=96=87=E4=BB=B6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MediaFile/HlsMaker.cpp | 10 ++++++++-- src/MediaFile/HlsMaker.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) 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;