修复rtsp播放器在处理rtp包时,清空状态导致的bug

This commit is contained in:
xiongziliang 2021-01-17 10:25:00 +08:00
parent 2dd87c8b59
commit c445ad2cdf
3 changed files with 12 additions and 5 deletions

View File

@ -116,9 +116,11 @@ private:
}
void popIterator(typename map<SEQ, T>::iterator it) {
_cb(it->first, it->second);
_next_seq_out = it->first + 1;
auto seq = it->first;
auto data = std::move(it->second);
_rtp_sort_cache_map.erase(it);
_next_seq_out = seq + 1;
_cb(seq, data);
}
void tryPopPacket() {

View File

@ -30,19 +30,23 @@ enum PlayType {
};
RtspPlayer::RtspPlayer(const EventPoller::Ptr &poller) : TcpClient(poller){
RtpReceiver::setPoolSize(64);
}
RtspPlayer::~RtspPlayer(void) {
DebugL << endl;
}
void RtspPlayer::teardown(){
void RtspPlayer::sendTeardown(){
if (alive()) {
if (!_content_base.empty()) {
sendRtspRequest("TEARDOWN", _content_base);
}
shutdown(SockException(Err_shutdown, "teardown"));
}
}
void RtspPlayer::teardown(){
sendTeardown();
_md5_nonce.clear();
_realm.clear();
_sdp_track.clear();
@ -792,7 +796,7 @@ void RtspPlayer::onPlayResult_l(const SockException &ex , bool handshake_done) {
//创建rtp数据接收超时检测定时器
_rtp_check_timer = std::make_shared<Timer>(timeoutMS / 2000.0, lam, getPoller());
} else {
teardown();
sendTeardown();
}
}

View File

@ -102,6 +102,7 @@ private:
void sendSetup(unsigned int track_idx);
void sendPause(int type , uint32_t ms);
void sendDescribe();
void sendTeardown();
void sendKeepAlive();
void sendRtspRequest(const string &cmd, const string &url ,const StrCaseMap &header = StrCaseMap());
void sendRtspRequest(const string &cmd, const string &url ,const std::initializer_list<string> &header);