RTC: 链接迁移后确保老链接及时销毁

This commit is contained in:
ziyue 2021-12-15 15:55:43 +08:00
parent d3a92c4ab8
commit 254bc6889e
2 changed files with 16 additions and 10 deletions

View File

@ -47,7 +47,7 @@ static atomic<uint64_t> s_key{0};
WebRtcTransport::WebRtcTransport(const EventPoller::Ptr &poller) {
_poller = poller;
_identifier = "zlm_"+to_string(++s_key);
_identifier = "zlm_" + to_string(++s_key);
_packet_pool.setSize(64);
}
@ -333,13 +333,13 @@ void WebRtcTransportImp::onDestory() {
}
void WebRtcTransportImp::onSendSockData(Buffer::Ptr buf, bool flush, RTC::TransportTuple *tuple) {
if (!_session) {
if (!_selected_session) {
WarnL << "send data failed:" << buf->size();
return;
}
//一次性发送一帧的rtp数据提高网络io性能
_session->setSendFlushFlag(flush);
_session->send(std::move(buf));
_selected_session->setSendFlushFlag(flush);
_selected_session->send(std::move(buf));
}
///////////////////////////////////////////////////////////////////
@ -860,18 +860,22 @@ void WebRtcTransportImp::onBeforeEncryptRtp(const char *buf, int &len, void *ctx
void WebRtcTransportImp::onShutdown(const SockException &ex){
WarnL << ex.what();
unrefSelf();
if (_session) {
_session->shutdown(ex);
for (auto &pr : _history_sessions) {
auto session = pr.second.lock();
if (session) {
session->shutdown(ex);
}
}
}
void WebRtcTransportImp::setSession(Session::Ptr session) {
_session = std::move(session);
_history_sessions.emplace(session.get(), session);
_selected_session = std::move(session);
unrefSelf();
}
const Session::Ptr &WebRtcTransportImp::getSession() const {
return _session;
return _selected_session;
}
uint64_t WebRtcTransportImp::getBytesUsage() const{

View File

@ -270,8 +270,10 @@ private:
Ticker _alive_ticker;
//pli rtcp计时器
Ticker _pli_ticker;
//udp session
Session::Ptr _session;
//当前选中的udp链接
Session::Ptr _selected_session;
//链接迁移前后使用过的udp链接
unordered_map<Session *, weak_ptr<Session> > _history_sessions;
//twcc rtcp发送上下文对象
TwccContext _twcc_ctx;
//根据发送rtp的track类型获取相关信息