From f6074bfd25f69cbfffc543830db125b673f54d2d Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sat, 28 Apr 2018 18:37:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=BC=E5=AE=B9=E6=80=A7bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtsp/RtpParser.cpp | 15 +++++++++++++-- src/Rtsp/RtpParser.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Rtsp/RtpParser.cpp b/src/Rtsp/RtpParser.cpp index a97c37ae..4682c451 100644 --- a/src/Rtsp/RtpParser.cpp +++ b/src/Rtsp/RtpParser.cpp @@ -211,6 +211,11 @@ inline void RtpParser::onGetVideoTrack(const RtspTrack& video) { throw std::runtime_error("只支持264格式的视频!"); } string sps_pps = FindField(video.trackSdp.c_str(), "sprop-parameter-sets=", "\r\n"); + if(sps_pps.empty()){ + //SDP里面没SPS_PPS描述,需要在后续rtp中获取 + m_bParseSpsDelay = true; + return; + } string base64_SPS = FindField(sps_pps.c_str(), NULL, ","); string base64_PPS = FindField(sps_pps.c_str(), ",", NULL); if(base64_PPS.back() == ';'){ @@ -270,8 +275,14 @@ inline void RtpParser::_onGetH264(H264Frame& frame) { case 1: //P onGetH264(frame); break; - case 7://SPS - m_strSPS=frame.data;break; + case 7: {//SPS + m_strSPS = frame.data; + if(m_bParseSpsDelay && !m_strSPS.empty()){ + m_bParseSpsDelay = false; + getAVCInfo(m_strSPS, m_iVideoWidth, m_iVideoHeight, m_fVideoFps); + } + } + break; case 8://PPS m_strPPS=frame.data;break; default: diff --git a/src/Rtsp/RtpParser.h b/src/Rtsp/RtpParser.h index b45f726a..6f9e4849 100644 --- a/src/Rtsp/RtpParser.h +++ b/src/Rtsp/RtpParser.h @@ -139,6 +139,7 @@ private: bool m_bHaveAudio = false; bool m_bHaveVideo= false; float m_fDuration = 0; + bool m_bParseSpsDelay = false; function onVideo; function onAudio;