Refine(webrtc/sdp): 函数 WebRtcTransport::onCheckSdp() 拆分为WebRtcTransport::onCheckAnswer() 和 RtcSession::checkSdp()

This commit is contained in:
Johnny 2021-10-12 15:53:30 +08:00
parent c7633fb5bb
commit 0f4289a584
4 changed files with 18 additions and 24 deletions

View File

@ -1381,6 +1381,16 @@ bool RtcSession::supportSimulcast() const {
}
return false;
}
void RtcSession::checkSdp() const {
for (auto &m : media) {
if (m.type != TrackApplication && !m.rtcp_mux) {
throw std::invalid_argument("只支持rtcp-mux模式");
}
}
if (group.mids.empty()) {
throw std::invalid_argument("只支持group BUNDLE模式");
}
}
string const SdpConst::kTWCCRtcpFb = "transport-cc";
string const SdpConst::kRembRtcpFb = "goog-remb";

View File

@ -667,6 +667,7 @@ public:
void loadFrom(const string &sdp, bool check = true);
void checkValid() const;
//offer sdp,如果指定了发送rtp,那么应该指定ssrc
void checkSdp() const;
void checkValidSSRC() const;
string toString() const;
string toRtspSdp() const;

View File

@ -174,19 +174,6 @@ void WebRtcTransport::setRemoteDtlsFingerprint(const RtcSession &remote){
_dtls_transport->SetRemoteFingerprint(remote_fingerprint);
}
void WebRtcTransport::onCheckSdp(SdpType type, RtcSession &sdp){
for (auto &m : sdp.media) {
if (m.type != TrackApplication && !m.rtcp_mux) {
throw std::invalid_argument("只支持rtcp-mux模式");
}
}
if (sdp.group.mids.empty()) {
throw std::invalid_argument("只支持group BUNDLE模式");
}
if (type == SdpType::offer) {
sdp.checkValidSSRC();
}
}
void WebRtcTransport::onRtcConfigure(RtcConfigure &configure) const {
//开启remb后关闭twcc因为开启twcc后remb无效
@ -199,7 +186,8 @@ std::string WebRtcTransport::getAnswerSdp(const string &offer){
//// 解析offer sdp ////
_offer_sdp = std::make_shared<RtcSession>();
_offer_sdp->loadFrom(offer);
onCheckSdp(SdpType::offer, *_offer_sdp);
_offer_sdp->checkSdp();
_offer_sdp->checkValidSSRC();
setRemoteDtlsFingerprint(*_offer_sdp);
//// sdp 配置 ////
@ -213,7 +201,8 @@ std::string WebRtcTransport::getAnswerSdp(const string &offer){
//// 生成answer sdp ////
_answer_sdp = configure.createAnswer(*_offer_sdp);
onCheckSdp(SdpType::answer, *_answer_sdp);
_answer_sdp->checkSdp();
onCheckAnswer(*_answer_sdp);
return _answer_sdp->toString();
} catch (exception &ex) {
onShutdown(SockException(Err_shutdown, ex.what()));
@ -520,13 +509,7 @@ void WebRtcTransportImp::onStartWebRTC() {
_play_src = nullptr;
}
void WebRtcTransportImp::onCheckSdp(SdpType type, RtcSession &sdp){
WebRtcTransport::onCheckSdp(type, sdp);
if (type != SdpType::answer) {
//我们只修改answer sdp
return;
}
void WebRtcTransportImp::onCheckAnswer(RtcSession &sdp) {
//修改answer sdp的ip、端口信息
GET_CONFIG(string, extern_ip, RTC::kExternIP);
for (auto &m : sdp.media) {

View File

@ -106,7 +106,7 @@ protected:
protected:
virtual void onStartWebRTC() = 0;
virtual void onRtcConfigure(RtcConfigure &configure) const;
virtual void onCheckSdp(SdpType type, RtcSession &sdp);
virtual void onCheckAnswer(RtcSession &sdp) = 0;
virtual void onSendSockData(const char *buf, size_t len, struct sockaddr_in *dst, bool flush = true) = 0;
virtual void onRtp(const char *buf, size_t len, uint64_t stamp_ms) = 0;
@ -184,7 +184,7 @@ public:
protected:
void onStartWebRTC() override;
void onSendSockData(const char *buf, size_t len, struct sockaddr_in *dst, bool flush = true) override;
void onCheckSdp(SdpType type, RtcSession &sdp) override;
void onCheckAnswer(RtcSession &sdp) override;
void onRtcConfigure(RtcConfigure &configure) const override;
void onRtp(const char *buf, size_t len, uint64_t stamp_ms) override;