From fb772936488da8b3af7d3c77ccf1a8827e0c11f2 Mon Sep 17 00:00:00 2001 From: baiyfcu Date: Wed, 8 Apr 2020 15:37:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Drtsp=20seek=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E6=97=B6rtsp=20server=E8=BF=94=E5=9B=9Enpt=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E4=B8=8D=E5=AF=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtsp/RtspSession.cpp | 38 +++++++++++++++++++------------------- tests/test_rtp.cpp | 5 ++++- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index a64a640d..1e9bf5bd 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -743,22 +743,22 @@ void RtspSession::handleReq_Play(const Parser &parser) { } bool useBuf = true; - _enableSendRtp = false; - - if (strRange.size() && !_bFirstPlay) { + _enableSendRtp = false; + float iStartTime = 0; + if (strRange.size() && !_bFirstPlay) { //这个是seek操作 - auto strStart = FindField(strRange.data(), "npt=", "-"); - if (strStart == "now") { - strStart = "0"; - } - auto iStartTime = 1000 * atof(strStart.data()); - InfoP(this) << "rtsp seekTo(ms):" << iStartTime; - useBuf = !pMediaSrc->seekTo(iStartTime); - }else if(pMediaSrc->totalReaderCount() == 0){ - //第一个消费者 - pMediaSrc->seekTo(0); - } - _bFirstPlay = false; + auto strStart = FindField(strRange.data(), "npt=", "-"); + if (strStart == "now") { + strStart = "0"; + } + iStartTime = 1000 * atof(strStart.data()); + InfoP(this) << "rtsp seekTo(ms):" << iStartTime; + useBuf = !pMediaSrc->seekTo(iStartTime); + }else if(pMediaSrc->totalReaderCount() == 0){ + //第一个消费者 + pMediaSrc->seekTo(0); + } + _bFirstPlay = false; _StrPrinter rtp_info; for(auto &track : _aTrackInfo){ @@ -778,10 +778,10 @@ void RtspSession::handleReq_Play(const Parser &parser) { rtp_info.pop_back(); - sendRtspResponse("200 OK", - {"Range", StrPrinter << "npt=" << setiosflags(ios::fixed) << setprecision(2) << pMediaSrc->getTimeStamp(TrackInvalid) / 1000.0 << "-", - "RTP-Info",rtp_info - }); + sendRtspResponse("200 OK", + {"Range", StrPrinter << "npt=" << setiosflags(ios::fixed) << setprecision(2) << /*pMediaSrc->getTimeStamp(TrackInvalid) / 1000.0*/iStartTime/1000, + "RTP-Info",rtp_info + }); _enableSendRtp = true; setSocketFlags(); diff --git a/tests/test_rtp.cpp b/tests/test_rtp.cpp index 9248a24b..4f16899c 100644 --- a/tests/test_rtp.cpp +++ b/tests/test_rtp.cpp @@ -85,7 +85,10 @@ int main(int argc,char *argv[]) { //此处选择是否导出调试文件 // mINI::Instance()[RtpProxy::kDumpDir] = "/Users/xzl/Desktop/"; - loadFile(argv[1]); + if (argc == 2) + loadFile(argv[1]); + else + ErrorL << "parameter error."; #else ErrorL << "please ENABLE_RTPPROXY and then test"; #endif//#if defined(ENABLE_RTPPROXY)