避免 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) {
|
||||
try {
|
||||
decltype(_on_response) func;
|
||||
_on_response.swap(func);
|
||||
if (func) {
|
||||
func(parser);
|
||||
auto headerMap = parser.getHeader();
|
||||
auto cseqIter = headerMap.find("CSeq");
|
||||
if (cseqIter != headerMap.end()) {
|
||||
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();
|
||||
} 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) {
|
||||
_cseq_func_map.emplace(_cseq_send, _on_response);
|
||||
|
||||
auto header = header_const;
|
||||
header.emplace("CSeq", StrPrinter << _cseq_send++);
|
||||
header.emplace("User-Agent", kServerName);
|
||||
|
|
|
|||
|
|
@ -116,12 +116,14 @@ private:
|
|||
|
||||
std::string _play_url;
|
||||
std::vector<SdpTrack::Ptr> _sdp_track;
|
||||
std::function<void(const Parser&)> _on_response;
|
||||
//RTP端口,trackid idx 为数组下标
|
||||
toolkit::Socket::Ptr _rtp_sock[2];
|
||||
//RTCP端口,trackid idx 为数组下标
|
||||
toolkit::Socket::Ptr _rtcp_sock[2];
|
||||
|
||||
using OnResponseFunc = std::function<void(const Parser&)>;
|
||||
OnResponseFunc _on_response;
|
||||
|
||||
//rtsp鉴权相关
|
||||
std::string _md5_nonce;
|
||||
std::string _realm;
|
||||
|
|
@ -146,6 +148,8 @@ private:
|
|||
toolkit::Ticker _rtcp_send_ticker[2];
|
||||
//统计rtp并发送rtcp
|
||||
std::vector<RtcpContext::Ptr> _rtcp_context;
|
||||
|
||||
std::map<uint32_t, OnResponseFunc> _cseq_func_map;
|
||||
};
|
||||
|
||||
} /* namespace mediakit */
|
||||
|
|
|
|||
Loading…
Reference in New Issue