Commit 272ab706 by ziyue

确保安全释放资源

parent cc960a32
......@@ -1062,15 +1062,11 @@ void installWebApi() {
}
headerOut["Content-Type"] = "text/plain";
headerOut["Access-Control-Allow-Origin"] = "*";
auto poller = EventPollerPool::Instance().getFirstPoller();
auto rtc = std::make_shared<WebRtcTransportImp>(poller);
poller->async([invoker, rtc, headerOut, src]() {
auto rtc = WebRtcTransportImp::create(EventPollerPool::Instance().getPoller());
rtc->attach(src);
auto sdp = rtc->GetLocalSdp();
invoker(200, headerOut, sdp);
invoker(200, headerOut, rtc->GetLocalSdp());
rtcs.emplace_back(rtc);
});
});
#endif
////////////以下是注册的Hook API////////////
......
......@@ -2,12 +2,12 @@
#include <iostream>
#include "Rtcp/Rtcp.h"
WebRtcTransport::WebRtcTransport() {
dtls_transport_ = std::make_shared<RTC::DtlsTransport>(EventPollerPool::Instance().getFirstPoller(), this);
WebRtcTransport::WebRtcTransport(const EventPoller::Ptr &poller) {
dtls_transport_ = std::make_shared<RTC::DtlsTransport>(poller, this);
ice_server_ = std::make_shared<RTC::IceServer>(this, makeRandStr(4), makeRandStr(24));
}
WebRtcTransport::~WebRtcTransport() {
void WebRtcTransport::onDestory(){
dtls_transport_ = nullptr;
ice_server_ = nullptr;
}
......@@ -163,8 +163,15 @@ void WebRtcTransport::WritRtpPacket(char *buf, size_t len) {
}
///////////////////////////////////////////////////////////////////////////////////
WebRtcTransportImp::Ptr WebRtcTransportImp::create(const EventPoller::Ptr &poller){
WebRtcTransportImp::Ptr ret(new WebRtcTransportImp(poller), [](WebRtcTransportImp *ptr){
ptr->onDestory();
delete ptr;
});
return ret;
}
WebRtcTransportImp::WebRtcTransportImp(const EventPoller::Ptr &poller) {
WebRtcTransportImp::WebRtcTransportImp(const EventPoller::Ptr &poller) : WebRtcTransport(poller) {
_socket = Socket::createSocket(poller, false);
//随机端口,绑定全部网卡
_socket->bindUdpSock(0);
......@@ -173,6 +180,10 @@ WebRtcTransportImp::WebRtcTransportImp(const EventPoller::Ptr &poller) {
});
}
void WebRtcTransportImp::onDestory() {
WebRtcTransport::onDestory();
}
void WebRtcTransportImp::attach(const RtspMediaSource::Ptr &src) {
assert(src);
_src = src;
......
......@@ -11,8 +11,11 @@
class WebRtcTransport : public RTC::DtlsTransport::Listener, public RTC::IceServer::Listener {
public:
using Ptr = std::shared_ptr<WebRtcTransport>;
WebRtcTransport();
virtual ~WebRtcTransport();
WebRtcTransport(const EventPoller::Ptr &poller);
~WebRtcTransport() override = default;
/// 销毁对象
virtual void onDestory();
/// 获取本地sdp
/// \return
......@@ -85,7 +88,7 @@ class WebRtcTransportImp : public WebRtcTransport, public std::enable_shared_fro
public:
using Ptr = std::shared_ptr<WebRtcTransportImp>;
WebRtcTransportImp(const EventPoller::Ptr &poller);
static Ptr create(const EventPoller::Ptr &poller);
~WebRtcTransportImp() override = default;
void attach(const RtspMediaSource::Ptr &src);
......@@ -97,6 +100,8 @@ protected:
uint16_t getPort() const override;
std::string getIP() const override;
void onDtlsConnected() override;
WebRtcTransportImp(const EventPoller::Ptr &poller);
void onDestory() override;
private:
Socket::Ptr _socket;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论