mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 12:37:09 +08:00
整理与校验
This commit is contained in:
parent
87c53dab92
commit
a1b2aa9abb
@ -949,9 +949,7 @@ void RtcSession::loadFrom(const string &str) {
|
|||||||
if (group.isFID()) {
|
if (group.isFID()) {
|
||||||
ssrc_rtp = group.u.fid.rtp_ssrc;
|
ssrc_rtp = group.u.fid.rtp_ssrc;
|
||||||
ssrc_rtx = group.u.fid.rtx_ssrc;
|
ssrc_rtx = group.u.fid.rtx_ssrc;
|
||||||
rtc_media.rtx = true;
|
|
||||||
} else if (group.isSIM()) {
|
} else if (group.isSIM()) {
|
||||||
rtc_media.simulcast = true;
|
|
||||||
ssrc_rtp_low = group.u.sim.rtp_ssrc_low;
|
ssrc_rtp_low = group.u.sim.rtp_ssrc_low;
|
||||||
ssrc_rtp_mid = group.u.sim.rtp_ssrc_mid;
|
ssrc_rtp_mid = group.u.sim.rtp_ssrc_mid;
|
||||||
ssrc_rtp_high = group.u.sim.rtp_ssrc_high;
|
ssrc_rtp_high = group.u.sim.rtp_ssrc_high;
|
||||||
@ -1033,4 +1031,55 @@ void RtcSession::loadFrom(const string &str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = sdp.getItemClass<SdpAttrGroup>('a', "group");
|
group = sdp.getItemClass<SdpAttrGroup>('a', "group");
|
||||||
|
checkValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
string RtcCodecPlan::getFmtp(const char *key) const{
|
||||||
|
for (auto &item : fmtp) {
|
||||||
|
if (item.first == key) {
|
||||||
|
return item.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const RtcCodecPlan *RtcMedia::getPlan(uint8_t pt) const{
|
||||||
|
for (auto &item : plan) {
|
||||||
|
if (item.pt == pt) {
|
||||||
|
return &item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RtcMedia::checkValid() const{
|
||||||
|
switch (direction) {
|
||||||
|
case RtpDirection::sendonly:
|
||||||
|
case RtpDirection::sendrecv: {
|
||||||
|
if (rtp_ssrc.empty()) {
|
||||||
|
throw std::invalid_argument("发送rtp但是未指定rtp ssrc");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
for (auto &item : plan) {
|
||||||
|
if (item.codec == "rtx") {
|
||||||
|
if (rtx_ssrc.empty()) {
|
||||||
|
throw std::invalid_argument("指定开启rtx但是未指定rtx ssrc");
|
||||||
|
}
|
||||||
|
auto apt = atoi(item.getFmtp("apt").data());
|
||||||
|
if (!getPlan(apt)) {
|
||||||
|
throw std::invalid_argument("找不到rtx关联的plan信息");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//todo 校验更多信息
|
||||||
|
}
|
||||||
|
|
||||||
|
void RtcSession::checkValid() const{
|
||||||
|
for (auto &item : media) {
|
||||||
|
item.checkValid();
|
||||||
|
}
|
||||||
|
//todo 校验更多信息
|
||||||
}
|
}
|
43
webrtc/Sdp.h
43
webrtc/Sdp.h
@ -517,6 +517,8 @@ public:
|
|||||||
string msid;
|
string msid;
|
||||||
string mslabel;
|
string mslabel;
|
||||||
string label;
|
string label;
|
||||||
|
|
||||||
|
bool empty() const {return ssrc == 0;}
|
||||||
};
|
};
|
||||||
|
|
||||||
//rtc传输编码方案
|
//rtc传输编码方案
|
||||||
@ -527,47 +529,48 @@ public:
|
|||||||
uint32_t sample_rate;
|
uint32_t sample_rate;
|
||||||
//音频时有效
|
//音频时有效
|
||||||
uint32_t channel = 0;
|
uint32_t channel = 0;
|
||||||
|
//rtcp反馈
|
||||||
vector<string> rtcp_fb;
|
vector<string> rtcp_fb;
|
||||||
vector<std::pair<string/*key*/, string/*value*/> > fmtp;
|
vector<std::pair<string/*key*/, string/*value*/> > fmtp;
|
||||||
|
|
||||||
|
string getFmtp(const char *key) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
//rtc 媒体描述
|
//rtc 媒体描述
|
||||||
class RtcMedia{
|
class RtcMedia{
|
||||||
public:
|
public:
|
||||||
TrackType type;
|
TrackType type{TrackType::TrackInvalid};
|
||||||
string mid;
|
string mid;
|
||||||
uint16_t port;
|
uint16_t port{0};
|
||||||
|
SdpConnection addr;
|
||||||
string proto;
|
string proto;
|
||||||
|
RtpDirection direction{RtpDirection::invalid};
|
||||||
|
vector<RtcCodecPlan> plan;
|
||||||
|
|
||||||
//////// rtp ////////
|
//////// rtp ////////
|
||||||
RtcSSRC rtp_ssrc;
|
RtcSSRC rtp_ssrc;
|
||||||
// for simulcast
|
RtcSSRC rtx_ssrc;
|
||||||
bool simulcast{false};
|
|
||||||
|
//////// simulcast ////////
|
||||||
RtcSSRC rtp_ssrc_low;
|
RtcSSRC rtp_ssrc_low;
|
||||||
RtcSSRC rtp_ssrc_mid;
|
RtcSSRC rtp_ssrc_mid;
|
||||||
RtcSSRC rtp_ssrc_high;
|
RtcSSRC rtp_ssrc_high;
|
||||||
|
|
||||||
SdpConnection addr;
|
//////// rtcp ////////
|
||||||
RtpDirection direction;
|
bool rtcp_mux{false};
|
||||||
vector<RtcCodecPlan> plan;
|
bool rtcp_rsize{false};
|
||||||
|
|
||||||
//////// rtx - rtcp ////////
|
|
||||||
bool rtx{false};
|
|
||||||
bool rtcp_mux;
|
|
||||||
bool rtcp_rsize;
|
|
||||||
RtcSSRC rtx_ssrc;
|
|
||||||
SdpAttrRtcp rtcp_addr;
|
SdpAttrRtcp rtcp_addr;
|
||||||
|
|
||||||
//////// ice ////////
|
//////// ice ////////
|
||||||
bool ice_trickle;
|
bool ice_trickle{false};
|
||||||
bool ice_lite;
|
bool ice_lite{false};
|
||||||
bool ice_renomination;
|
bool ice_renomination{false};
|
||||||
string ice_ufrag;
|
string ice_ufrag;
|
||||||
string ice_pwd;
|
string ice_pwd;
|
||||||
std::vector<SdpAttrCandidate> candidate;
|
std::vector<SdpAttrCandidate> candidate;
|
||||||
|
|
||||||
//////// dtls ////////
|
//////// dtls ////////
|
||||||
DtlsRole role;
|
DtlsRole role{DtlsRole::invalid};
|
||||||
SdpAttrFingerprint fingerprint;
|
SdpAttrFingerprint fingerprint;
|
||||||
|
|
||||||
//////// extmap ////////
|
//////// extmap ////////
|
||||||
@ -575,7 +578,10 @@ public:
|
|||||||
|
|
||||||
//////// sctp ////////////
|
//////// sctp ////////////
|
||||||
SdpAttrSctpMap sctpmap;
|
SdpAttrSctpMap sctpmap;
|
||||||
uint32_t sctp_port {0};
|
uint32_t sctp_port{0};
|
||||||
|
|
||||||
|
void checkValid() const;
|
||||||
|
const RtcCodecPlan *getPlan(uint8_t pt) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RtcSession{
|
class RtcSession{
|
||||||
@ -591,6 +597,7 @@ public:
|
|||||||
SdpAttrGroup group;
|
SdpAttrGroup group;
|
||||||
|
|
||||||
void loadFrom(const string &sdp);
|
void loadFrom(const string &sdp);
|
||||||
|
void checkValid() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user