This commit is contained in:
kevin cheng 2021-08-30 19:04:50 +08:00
commit 7d456a0513
2 changed files with 20 additions and 1 deletions

View File

@ -724,6 +724,14 @@ std::shared_ptr<MediaSourceEvent> MediaSourceEventInterceptor::getDelegate() con
/////////////////////////////////////FlushPolicy////////////////////////////////////// /////////////////////////////////////FlushPolicy//////////////////////////////////////
template<>
bool PacketCache<RtpPacket>::flushImmediatelyWhenCloseMerge() {
//因为rtp的包很小一个RtpPacket包中也不是完整的一帧图像所以在关闭合并写时
//还是有必要缓冲一帧的rtp(也就是时间戳相同的rtp)再输出,这样虽然会增加一帧的延时
//但是却对性能提升很大,这样做还是比较划算的
return false;
}
static bool isFlushAble_default(bool is_video, uint64_t last_stamp, uint64_t new_stamp, size_t cache_size) { static bool isFlushAble_default(bool is_video, uint64_t last_stamp, uint64_t new_stamp, size_t cache_size) {
if (new_stamp + 500 < last_stamp) { if (new_stamp + 500 < last_stamp) {
//时间戳回退比较大(可能seek中)由于rtp中时间戳是pts是可能存在一定程度的回退的 //时间戳回退比较大(可能seek中)由于rtp中时间戳是pts是可能存在一定程度的回退的

View File

@ -342,7 +342,8 @@ public:
virtual ~PacketCache() = default; virtual ~PacketCache() = default;
void inputPacket(uint64_t stamp, bool is_video, std::shared_ptr<packet> pkt, bool key_pos) { void inputPacket(uint64_t stamp, bool is_video, std::shared_ptr<packet> pkt, bool key_pos) {
if (_policy.isFlushAble(is_video, key_pos, stamp, _cache->size())) { bool flush = flushImmediatelyWhenCloseMerge();
if (!flush && _policy.isFlushAble(is_video, key_pos, stamp, _cache->size())) {
flushAll(); flushAll();
} }
@ -351,6 +352,10 @@ public:
if (key_pos) { if (key_pos) {
_key_pos = key_pos; _key_pos = key_pos;
} }
if (flush) {
flushAll();
}
} }
virtual void clearCache() { virtual void clearCache() {
@ -369,6 +374,12 @@ private:
_key_pos = false; _key_pos = false;
} }
bool flushImmediatelyWhenCloseMerge() {
//一般的协议关闭合并写时立即刷新缓存这样可以减少一帧的延时但是rtp例外请看相应的模板特例化函数
GET_CONFIG(int, mergeWriteMS, General::kMergeWriteMS);
return mergeWriteMS <= 0;
}
private: private:
bool _key_pos = false; bool _key_pos = false;
policy _policy; policy _policy;