重写webrtc sdp校验逻辑,确保无有效track时抛异常:#1157

This commit is contained in:
ziyue
2021-10-16 16:46:05 +08:00
parent b10fc52384
commit 9433a0c383
3 changed files with 53 additions and 143 deletions

View File

@@ -187,6 +187,7 @@ std::string WebRtcTransport::getAnswerSdp(const string &offer){
_offer_sdp = std::make_shared<RtcSession>();
_offer_sdp->loadFrom(offer);
onCheckSdp(SdpType::offer, *_offer_sdp);
_offer_sdp->checkValid();
setRemoteDtlsFingerprint(*_offer_sdp);
//// sdp 配置 ////
@@ -201,6 +202,7 @@ std::string WebRtcTransport::getAnswerSdp(const string &offer){
//// 生成answer sdp ////
_answer_sdp = configure.createAnswer(*_offer_sdp);
onCheckSdp(SdpType::answer, *_answer_sdp);
_answer_sdp->checkValid();
return _answer_sdp->toString();
} catch (exception &ex) {
onShutdown(SockException(Err_shutdown, ex.what()));
@@ -457,10 +459,9 @@ void WebRtcTransportImp::onCheckAnswer(RtcSession &sdp) {
}
void WebRtcTransportImp::onCheckSdp(SdpType type, RtcSession &sdp) {
sdp.checkSdp();
switch (type) {
case SdpType::answer: onCheckAnswer(sdp); break;
case SdpType::offer: sdp.checkValidSSRC(); break;
case SdpType::offer: break;
default: /*不可达*/ assert(0); break;
}
}