Commit 7110dc75 by ziyue

整理代码

parent 33d2e713
...@@ -1237,6 +1237,13 @@ shared_ptr<RtcSession> RtcConfigure::createAnswer(const RtcSession &offer){ ...@@ -1237,6 +1237,13 @@ shared_ptr<RtcSession> RtcConfigure::createAnswer(const RtcSession &offer){
if (ret->media.empty()) { if (ret->media.empty()) {
throw std::invalid_argument("生成的answer sdp中媒体个数为0"); throw std::invalid_argument("生成的answer sdp中媒体个数为0");
} }
//设置音视频端口复用
if (!offer.group.mids.empty()) {
for (auto &m : ret->media) {
ret->group.mids.emplace_back(m.mid);
}
}
return ret; return ret;
} }
......
...@@ -437,6 +437,7 @@ public: ...@@ -437,6 +437,7 @@ public:
class SdpAttrCandidate : public SdpItem { class SdpAttrCandidate : public SdpItem {
public: public:
using Ptr = std::shared_ptr<SdpAttrCandidate>;
//https://tools.ietf.org/html/rfc5245 //https://tools.ietf.org/html/rfc5245
//15.1. "candidate" Attribute //15.1. "candidate" Attribute
//a=candidate:4 1 udp 2 192.168.1.7 58107 typ host //a=candidate:4 1 udp 2 192.168.1.7 58107 typ host
...@@ -656,6 +657,7 @@ public: ...@@ -656,6 +657,7 @@ public:
class RtcConfigure { class RtcConfigure {
public: public:
using Ptr = std::shared_ptr<RtcConfigure>;
class RtcTrackConfigure { class RtcTrackConfigure {
public: public:
bool enable; bool enable;
......
...@@ -2,12 +2,16 @@ ...@@ -2,12 +2,16 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "DtlsTransport.hpp" #include "DtlsTransport.hpp"
#include "IceServer.hpp" #include "IceServer.hpp"
#include "SrtpSession.hpp" #include "SrtpSession.hpp"
#include "StunPacket.hpp" #include "StunPacket.hpp"
#include "Sdp.h" #include "Sdp.h"
#include "Poller/EventPoller.h"
#include "Network/Socket.h"
#include "Rtsp/RtspMediaSource.h"
using namespace toolkit;
using namespace mediakit;
class WebRtcTransport : public RTC::DtlsTransport::Listener, public RTC::IceServer::Listener { class WebRtcTransport : public RTC::DtlsTransport::Listener, public RTC::IceServer::Listener {
public: public:
...@@ -15,33 +19,43 @@ public: ...@@ -15,33 +19,43 @@ public:
WebRtcTransport(const EventPoller::Ptr &poller); WebRtcTransport(const EventPoller::Ptr &poller);
~WebRtcTransport() override = default; ~WebRtcTransport() override = default;
/// 销毁对象 /**
* 消费对象
*/
virtual void onDestory(); virtual void onDestory();
/**
* 创建webrtc answer sdp
* @param offer offer sdp
* @return answer sdp
*/
std::string getAnswerSdp(const string &offer); std::string getAnswerSdp(const string &offer);
/// 收到udp数据 /**
/// \param buf * socket收到udp数据
/// \param len * @param buf 数据指针
/// \param remote_address * @param len 数据长度
void OnInputDataPacket(char *buf, size_t len, RTC::TransportTuple *tuple); * @param tuple 数据来源
*/
/// 发送rtp void inputSockData(char *buf, size_t len, RTC::TransportTuple *tuple);
/// \param buf
/// \param len /**
void WritRtpPacket(char *buf, size_t len); * 发送rtp
* @param buf rtcp内容
* @param len rtcp长度
*/
void sendRtpPacket(char *buf, size_t len);
protected: protected:
// dtls相关的回调 //// dtls相关的回调 ////
void OnDtlsTransportConnecting(const RTC::DtlsTransport *dtlsTransport) override {}; void OnDtlsTransportConnecting(const RTC::DtlsTransport *dtlsTransport) override {};
void OnDtlsTransportConnected( void OnDtlsTransportConnected(const RTC::DtlsTransport *dtlsTransport,
const RTC::DtlsTransport *dtlsTransport, RTC::SrtpSession::CryptoSuite srtpCryptoSuite,
RTC::SrtpSession::CryptoSuite srtpCryptoSuite, uint8_t *srtpLocalKey,
uint8_t *srtpLocalKey, size_t srtpLocalKeyLen,
size_t srtpLocalKeyLen, uint8_t *srtpRemoteKey,
uint8_t *srtpRemoteKey, size_t srtpRemoteKeyLen,
size_t srtpRemoteKeyLen, std::string &remoteCert) override;
std::string &remoteCert) override;
void OnDtlsTransportFailed(const RTC::DtlsTransport *dtlsTransport) override {}; void OnDtlsTransportFailed(const RTC::DtlsTransport *dtlsTransport) override {};
void OnDtlsTransportClosed(const RTC::DtlsTransport *dtlsTransport) override {}; void OnDtlsTransportClosed(const RTC::DtlsTransport *dtlsTransport) override {};
...@@ -49,7 +63,7 @@ protected: ...@@ -49,7 +63,7 @@ protected:
void OnDtlsTransportApplicationDataReceived(const RTC::DtlsTransport *dtlsTransport, const uint8_t *data, size_t len) override {}; void OnDtlsTransportApplicationDataReceived(const RTC::DtlsTransport *dtlsTransport, const uint8_t *data, size_t len) override {};
protected: protected:
//ice相关的回调 //// ice相关的回调 ///
void OnIceServerSendStunPacket(const RTC::IceServer *iceServer, const RTC::StunPacket *packet, RTC::TransportTuple *tuple) override; void OnIceServerSendStunPacket(const RTC::IceServer *iceServer, const RTC::StunPacket *packet, RTC::TransportTuple *tuple) override;
void OnIceServerSelectedTuple(const RTC::IceServer *iceServer, RTC::TransportTuple *tuple) override; void OnIceServerSelectedTuple(const RTC::IceServer *iceServer, RTC::TransportTuple *tuple) override;
void OnIceServerConnected(const RTC::IceServer *iceServer) override; void OnIceServerConnected(const RTC::IceServer *iceServer) override;
...@@ -57,51 +71,57 @@ protected: ...@@ -57,51 +71,57 @@ protected:
void OnIceServerDisconnected(const RTC::IceServer *iceServer) override; void OnIceServerDisconnected(const RTC::IceServer *iceServer) override;
protected: protected:
/// 输出udp数据
/// \param buf
/// \param len
/// \param dst
virtual void onWrite(const char *buf, size_t len, struct sockaddr_in *dst) = 0;
virtual uint32_t getSSRC() const = 0; virtual uint32_t getSSRC() const = 0;
virtual uint16_t getPort() const = 0; virtual uint16_t getPort() const = 0;
virtual std::string getIP() const = 0; virtual std::string getIP() const = 0;
virtual int getPayloadType() const = 0; virtual void onStartWebRTC() = 0;
virtual void onDtlsConnected() = 0; virtual void onRtcConfigure(RtcConfigure &configure) const {}
virtual void onCheckSdp(SdpType type, const RtcSession &sdp) const;
virtual SdpAttrCandidate::Ptr getIceCandidate() const = 0;
virtual void onSendSockData(const char *buf, size_t len, struct sockaddr_in *dst) = 0;
private: private:
void onWrite(const char *buf, size_t len); void onSendSockData(const char *buf, size_t len);
void setRemoteDtlsFingerprint(const RtcSession &remote);
private: private:
std::shared_ptr<RTC::IceServer> ice_server_; std::shared_ptr<RTC::IceServer> _ice_server;
std::shared_ptr<RTC::DtlsTransport> dtls_transport_; std::shared_ptr<RTC::DtlsTransport> _dtls_transport;
std::shared_ptr<RTC::SrtpSession> srtp_session_; std::shared_ptr<RTC::SrtpSession> _srtp_session_send;
std::shared_ptr<RTC::SrtpSession> srtp_session_recv_; std::shared_ptr<RTC::SrtpSession> _srtp_session_recv;
RtcSession::Ptr _offer_sdp; RtcSession::Ptr _offer_sdp;
RtcSession::Ptr _answer_sdp; RtcSession::Ptr _answer_sdp;
}; };
#include "Poller/EventPoller.h"
#include "Network/Socket.h"
#include "Rtsp/RtspMediaSource.h"
using namespace toolkit;
using namespace mediakit;
class WebRtcTransportImp : public WebRtcTransport, public std::enable_shared_from_this<WebRtcTransportImp>{ class WebRtcTransportImp : public WebRtcTransport, public std::enable_shared_from_this<WebRtcTransportImp>{
public: public:
using Ptr = std::shared_ptr<WebRtcTransportImp>; using Ptr = std::shared_ptr<WebRtcTransportImp>;
~WebRtcTransportImp() override = default;
/**
* 创建WebRTC对象
* @param poller 改对象需要绑定的线程
* @return 对象
*/
static Ptr create(const EventPoller::Ptr &poller); static Ptr create(const EventPoller::Ptr &poller);
~WebRtcTransportImp() override = default;
/**
* 绑定rtsp媒体源
* @param src 媒体源
*/
void attach(const RtspMediaSource::Ptr &src); void attach(const RtspMediaSource::Ptr &src);
protected: protected:
void onWrite(const char *buf, size_t len, struct sockaddr_in *dst) override; void onStartWebRTC() override;
int getPayloadType() const override; void onSendSockData(const char *buf, size_t len, struct sockaddr_in *dst) override;
uint32_t getSSRC() const override; uint32_t getSSRC() const override;
uint16_t getPort() const override; uint16_t getPort() const override;
std::string getIP() const override; std::string getIP() const override;
void onDtlsConnected() override; SdpAttrCandidate::Ptr getIceCandidate() const override;
private:
WebRtcTransportImp(const EventPoller::Ptr &poller); WebRtcTransportImp(const EventPoller::Ptr &poller);
void onDestory() override; void onDestory() override;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论