From b70d6cd2c2090de7bb0d8669d457f0671c1c09f4 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Tue, 6 Aug 2019 22:54:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BF=AE=E6=AD=A3=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MediaFile/Stamp.cpp | 9 +++++++-- src/MediaFile/Stamp.h | 7 +++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/MediaFile/Stamp.cpp b/src/MediaFile/Stamp.cpp index d90679b5..544559c5 100644 --- a/src/MediaFile/Stamp.cpp +++ b/src/MediaFile/Stamp.cpp @@ -33,6 +33,12 @@ void Stamp::revise(uint32_t dts, uint32_t pts, int64_t &dts_out, int64_t &pts_ou //记录第一次时间戳,后面好计算时间戳增量 _start_dts = dts; _first = false; + _ticker = std::make_shared(); + } + //pts和dts的差值 + int pts_dts_diff = pts - dts; + if(_modifyStamp){ + dts = _ticker->elapsedTime(); } //相对时间戳 @@ -58,8 +64,7 @@ void Stamp::revise(uint32_t dts, uint32_t pts, int64_t &dts_out, int64_t &pts_ou //没有播放时间戳 pts = dts; } - //pts和dts的差值 - int pts_dts_diff = pts - dts; + if(pts_dts_diff > 200 || pts_dts_diff < -200){ //如果差值大于200毫秒,则认为由于回环导致时间戳错乱了 pts_dts_diff = 0; diff --git a/src/MediaFile/Stamp.h b/src/MediaFile/Stamp.h index d111c947..a99269a8 100644 --- a/src/MediaFile/Stamp.h +++ b/src/MediaFile/Stamp.h @@ -27,20 +27,23 @@ #ifndef ZLMEDIAKIT_STAMP_H #define ZLMEDIAKIT_STAMP_H - +#include "Util/TimeTicker.h" #include +using namespace toolkit; namespace mediakit { class Stamp { public: - Stamp() = default; + Stamp(bool modifyStamp = false) {_modifyStamp = modifyStamp;}; ~Stamp() = default; void revise(uint32_t dts, uint32_t pts, int64_t &dts_out, int64_t &pts_out); private: int64_t _start_dts = 0; int64_t _dts_inc = 0; bool _first = true; + bool _modifyStamp; + std::shared_ptr _ticker; }; }//namespace mediakit