Commit 272ab706 by ziyue

确保安全释放资源

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