From dc192c95fc3f918b0caa518f614e53d58fb15775 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sat, 12 Sep 2020 18:53:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96hls=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Http/HlsPlayer.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Http/HlsPlayer.cpp b/src/Http/HlsPlayer.cpp index c7b0f3e5..97ea6428 100644 --- a/src/Http/HlsPlayer.cpp +++ b/src/Http/HlsPlayer.cpp @@ -264,8 +264,8 @@ void HlsPlayerImp::onPlayResult(const SockException &ex) { setPlayPosition(0); weak_ptr weakSelf = dynamic_pointer_cast(shared_from_this()); - //每20毫秒执行一次 - _timer = std::make_shared(0.02, [weakSelf]() { + //每50毫秒执行一次 + _timer = std::make_shared(0.05, [weakSelf]() { auto strongSelf = weakSelf.lock(); if (!strongSelf) { return false; @@ -326,6 +326,13 @@ void HlsPlayerImp::onTick() { //这些帧还未到时间播放 break; } + + if (getBufferMS() < 3 * 1000) { + //缓存小于3秒,那么降低定时器消费速度(让剩余的数据在3秒后消费完毕) + //目的是为了防止定时器长时间干等后,数据瞬间消费完毕 + setPlayPosition(_frame_cache.begin()->first); + } + //消费掉已经到期的帧 MediaSink::inputFrame(it->second); it = _frame_cache.erase(it);