inline void RtspPlayer::HandleResDESCRIBE(const Parser& parser) { //发送DESCRIBE命令后的回复 if (parser.Url() != "200") { throw std::runtime_error( StrPrinter << "DESCRIBE:" << parser.Url() << " " << parser.Tail() << endl); } auto strSdp = parser.Content(); m_strContentBase = parser["Content-Base"]; auto iLen = atoi(parser["Content-Length"].data()); if(iLen > 0){ strSdp.erase(iLen); } if (m_strContentBase[m_strContentBase.length() - 1] == '/') { m_strContentBase.pop_back(); } //解析sdp m_uiTrackCnt = parserSDP(strSdp, m_aTrackInfo); for (unsigned int i=0; i<m_uiTrackCnt; i++) { m_aTrackInfo[i].ssrc=0; m_aui32SsrcErrorCnt[i]=0; } if (!m_uiTrackCnt) { throw std::runtime_error("解析SDP失败"); } if (!onCheckSDP(strSdp, m_aTrackInfo, m_uiTrackCnt)) { throw std::runtime_error("onCheckSDP faied"); } m_onHandshake = std::bind(&RtspPlayer::HandleResSETUP,this, placeholders::_1,0); sendSetup(0); }