From 72f9557458a2db84e760b759c4c60bb2c436eb09 Mon Sep 17 00:00:00 2001 From: xiongguangjie Date: Tue, 24 Sep 2024 23:31:24 +0800 Subject: [PATCH 1/2] 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(); From faa6c283d7eca3b272030f8ea98c00f591ab23ef Mon Sep 17 00:00:00 2001 From: xiongguangjie Date: Wed, 25 Sep 2024 19:57:55 +0800 Subject: [PATCH 2/2] rtsp audio packet always update timestamp, seq etc --- src/Rtsp/RtspMediaSourceImp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rtsp/RtspMediaSourceImp.cpp b/src/Rtsp/RtspMediaSourceImp.cpp index 74d22033..513e9d9d 100644 --- a/src/Rtsp/RtspMediaSourceImp.cpp +++ b/src/Rtsp/RtspMediaSourceImp.cpp @@ -55,8 +55,8 @@ void RtspMediaSource::onWrite(RtpPacket::Ptr rtp, bool keyPos) { auto &track = _tracks[rtp->type]; auto stamp = rtp->getStampMS(); bool is_video = rtp->type == TrackVideo; - - if (track && ((keyPos && _have_video && is_video) || (!_have_video))) { + // 音频总是更新,视频在关键包时更新 + if (track && ((keyPos && _have_video && is_video) || (!is_video))) { track->_seq = rtp->getSeq(); track->_time_stamp = rtp->getStamp() * uint64_t(1000) / rtp->sample_rate; track->_ssrc = rtp->getSSRC();