From 72f9557458a2db84e760b759c4c60bb2c436eb09 Mon Sep 17 00:00:00 2001 From: xiongguangjie Date: Tue, 24 Sep 2024 23:31:24 +0800 Subject: [PATCH] optimaztion for issue #3815 ffmpeg rtsp pull stream has negative pts --- src/Rtsp/RtspMediaSourceImp.cpp | 6 ++++-- src/Rtsp/RtspSession.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Rtsp/RtspMediaSourceImp.cpp b/src/Rtsp/RtspMediaSourceImp.cpp index 50522317..74d22033 100644 --- a/src/Rtsp/RtspMediaSourceImp.cpp +++ b/src/Rtsp/RtspMediaSourceImp.cpp @@ -54,7 +54,9 @@ void RtspMediaSource::onWrite(RtpPacket::Ptr rtp, bool keyPos) { assert(rtp->type >= 0 && rtp->type < TrackMax); auto &track = _tracks[rtp->type]; auto stamp = rtp->getStampMS(); - if (track) { + bool is_video = rtp->type == TrackVideo; + + if (track && ((keyPos && _have_video && is_video) || (!_have_video))) { track->_seq = rtp->getSeq(); track->_time_stamp = rtp->getStamp() * uint64_t(1000) / rtp->sample_rate; track->_ssrc = rtp->getSSRC(); @@ -77,7 +79,7 @@ void RtspMediaSource::onWrite(RtpPacket::Ptr rtp, bool keyPos) { regist(); } } - bool is_video = rtp->type == TrackVideo; + PacketCache::inputPacket(stamp, is_video, std::move(rtp), keyPos); } diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index 2cbaf217..ef02ff59 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -833,7 +833,7 @@ void RtspSession::handleReq_Play(const Parser &parser) { rtp_info << "url=" << track->getControlUrl(_content_base) << ";" << "seq=" << track->_seq << ";" - << "rtptime=" << (int) (track->_time_stamp * (track->_samplerate / 1000)) << ","; + << "rtptime=" << (int64_t)(track->_time_stamp) * (int64_t)(track->_samplerate/ 1000) << ","; } rtp_info.pop_back();