mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 04:31:37 +08:00
修复hls按需拉流一次播放可能失败的问题 (#3153)
This commit is contained in:
parent
aeda47ec8c
commit
b77515d217
@ -87,7 +87,11 @@ void HlsMediaSource::setIndexFile(std::string index_file)
|
|||||||
strongSelf->onReaderChanged(size);
|
strongSelf->onReaderChanged(size);
|
||||||
};
|
};
|
||||||
_ring = std::make_shared<RingType>(0, std::move(lam));
|
_ring = std::make_shared<RingType>(0, std::move(lam));
|
||||||
|
}
|
||||||
|
if (!_registered && !_clear_cache) {
|
||||||
|
//在清空缓存期间不进行注册,否则可能播放中的ts文件会被清空
|
||||||
regist();
|
regist();
|
||||||
|
_registered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//赋值m3u8索引文件内容
|
//赋值m3u8索引文件内容
|
||||||
|
@ -62,9 +62,16 @@ public:
|
|||||||
_ring->getInfoList(cb, on_change);
|
_ring->getInfoList(cb, on_change);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置清空缓存的标志位
|
||||||
|
*/
|
||||||
|
void setClearCache(bool clear_cache) { _clear_cache = clear_cache; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RingType::Ptr _ring;
|
RingType::Ptr _ring;
|
||||||
std::string _index_file;
|
std::string _index_file;
|
||||||
|
bool _clear_cache = false;
|
||||||
|
bool _registered = false;
|
||||||
mutable std::mutex _mtx_index;
|
mutable std::mutex _mtx_index;
|
||||||
toolkit::List<std::function<void(const std::string &)>> _list_cb;
|
toolkit::List<std::function<void(const std::string &)>> _list_cb;
|
||||||
};
|
};
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
_enabled = _option.hls_demand ? (_hls->isLive() ? size : true) : true;
|
_enabled = _option.hls_demand ? (_hls->isLive() ? size : true) : true;
|
||||||
if (!size && _hls->isLive() && _option.hls_demand) {
|
if (!size && _hls->isLive() && _option.hls_demand) {
|
||||||
// hls直播时,如果无人观看就删除视频缓存,目的是为了防止视频跳跃
|
// hls直播时,如果无人观看就删除视频缓存,目的是为了防止视频跳跃
|
||||||
|
_hls->getMediaSource()->setClearCache(true);
|
||||||
_clear_cache = true;
|
_clear_cache = true;
|
||||||
}
|
}
|
||||||
MediaSourceEventInterceptor::onReaderChanged(sender, size);
|
MediaSourceEventInterceptor::onReaderChanged(sender, size);
|
||||||
@ -59,6 +60,7 @@ public:
|
|||||||
_clear_cache = false;
|
_clear_cache = false;
|
||||||
//清空旧的m3u8索引文件于ts切片
|
//清空旧的m3u8索引文件于ts切片
|
||||||
_hls->clearCache();
|
_hls->clearCache();
|
||||||
|
_hls->getMediaSource()->setClearCache(false);
|
||||||
_hls->getMediaSource()->setIndexFile("");
|
_hls->getMediaSource()->setIndexFile("");
|
||||||
}
|
}
|
||||||
if (_enabled || !_option.hls_demand) {
|
if (_enabled || !_option.hls_demand) {
|
||||||
|
Loading…
Reference in New Issue
Block a user