避免 rtsp player 请求与回复无法对应
This commit is contained in:
parent
2378617dd8
commit
56afb0e76d
|
|
@ -484,10 +484,14 @@ void RtspPlayer::handleResPAUSE(const Parser &parser, int type) {
|
||||||
|
|
||||||
void RtspPlayer::onWholeRtspPacket(Parser &parser) {
|
void RtspPlayer::onWholeRtspPacket(Parser &parser) {
|
||||||
try {
|
try {
|
||||||
decltype(_on_response) func;
|
auto headerMap = parser.getHeader();
|
||||||
_on_response.swap(func);
|
auto cseqIter = headerMap.find("CSeq");
|
||||||
if (func) {
|
if (cseqIter != headerMap.end()) {
|
||||||
func(parser);
|
auto funcIter = _cseq_func_map.find(std::stoi(cseqIter->second));
|
||||||
|
if (funcIter != _cseq_func_map.end()) {
|
||||||
|
funcIter->second(parser);
|
||||||
|
_cseq_func_map.erase(funcIter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
parser.clear();
|
parser.clear();
|
||||||
} catch (std::exception &err) {
|
} catch (std::exception &err) {
|
||||||
|
|
@ -578,6 +582,8 @@ void RtspPlayer::sendRtspRequest(const string &cmd, const string &url, const std
|
||||||
}
|
}
|
||||||
|
|
||||||
void RtspPlayer::sendRtspRequest(const string &cmd, const string &url, const StrCaseMap &header_const) {
|
void RtspPlayer::sendRtspRequest(const string &cmd, const string &url, const StrCaseMap &header_const) {
|
||||||
|
_cseq_func_map.emplace(_cseq_send, _on_response);
|
||||||
|
|
||||||
auto header = header_const;
|
auto header = header_const;
|
||||||
header.emplace("CSeq", StrPrinter << _cseq_send++);
|
header.emplace("CSeq", StrPrinter << _cseq_send++);
|
||||||
header.emplace("User-Agent", kServerName);
|
header.emplace("User-Agent", kServerName);
|
||||||
|
|
|
||||||
|
|
@ -116,12 +116,14 @@ private:
|
||||||
|
|
||||||
std::string _play_url;
|
std::string _play_url;
|
||||||
std::vector<SdpTrack::Ptr> _sdp_track;
|
std::vector<SdpTrack::Ptr> _sdp_track;
|
||||||
std::function<void(const Parser&)> _on_response;
|
|
||||||
//RTP端口,trackid idx 为数组下标
|
//RTP端口,trackid idx 为数组下标
|
||||||
toolkit::Socket::Ptr _rtp_sock[2];
|
toolkit::Socket::Ptr _rtp_sock[2];
|
||||||
//RTCP端口,trackid idx 为数组下标
|
//RTCP端口,trackid idx 为数组下标
|
||||||
toolkit::Socket::Ptr _rtcp_sock[2];
|
toolkit::Socket::Ptr _rtcp_sock[2];
|
||||||
|
|
||||||
|
using OnResponseFunc = std::function<void(const Parser&)>;
|
||||||
|
OnResponseFunc _on_response;
|
||||||
|
|
||||||
//rtsp鉴权相关
|
//rtsp鉴权相关
|
||||||
std::string _md5_nonce;
|
std::string _md5_nonce;
|
||||||
std::string _realm;
|
std::string _realm;
|
||||||
|
|
@ -146,6 +148,8 @@ private:
|
||||||
toolkit::Ticker _rtcp_send_ticker[2];
|
toolkit::Ticker _rtcp_send_ticker[2];
|
||||||
//统计rtp并发送rtcp
|
//统计rtp并发送rtcp
|
||||||
std::vector<RtcpContext::Ptr> _rtcp_context;
|
std::vector<RtcpContext::Ptr> _rtcp_context;
|
||||||
|
|
||||||
|
std::map<uint32_t, OnResponseFunc> _cseq_func_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace mediakit */
|
} /* namespace mediakit */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue