mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-17 05:25:57 +08:00
调整 addSSRCItem 函数 (#1224)
* update readme. * refactor(sdp): update addSSRCItem. * refactor(sdp): remove addSSRCItem. * refactor(sdp): 调整逻辑,生成a=ssrc-group:FID字段
This commit is contained in:
@@ -1022,6 +1022,8 @@ string RtcSession::toRtspSdp() const{
|
||||
return sdp->toString();
|
||||
}
|
||||
|
||||
void addSdpAttrSSRC(const RtcSSRC &rtp_ssrc, vector<SdpItem::Ptr> &items, uint32_t ssrc_num);
|
||||
|
||||
RtcSessionSdp::Ptr RtcSession::toRtcSessionSdp() const{
|
||||
RtcSessionSdp::Ptr ret = std::make_shared<RtcSessionSdp>();
|
||||
auto &sdp = *ret;
|
||||
@@ -1126,51 +1128,15 @@ RtcSessionSdp::Ptr RtcSession::toRtcSessionSdp() const{
|
||||
}
|
||||
}
|
||||
|
||||
static auto addSSRCItem = [](const RtcSSRC &rtp_ssrc, vector<SdpItem::Ptr> &items) {
|
||||
CHECK(!rtp_ssrc.empty());
|
||||
auto ssrc_num = rtp_ssrc.ssrc;
|
||||
for (auto i = 0; i < 2; ++i) {
|
||||
SdpAttrSSRC ssrc;
|
||||
ssrc.ssrc = ssrc_num;
|
||||
|
||||
ssrc.attribute = "cname";
|
||||
ssrc.attribute_value = rtp_ssrc.cname;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
|
||||
if (!rtp_ssrc.msid.empty()) {
|
||||
ssrc.attribute = "msid";
|
||||
ssrc.attribute_value = rtp_ssrc.msid;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
|
||||
if (!rtp_ssrc.mslabel.empty()) {
|
||||
ssrc.attribute = "mslabel";
|
||||
ssrc.attribute_value = rtp_ssrc.mslabel;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
|
||||
if (!rtp_ssrc.label.empty()) {
|
||||
ssrc.attribute = "label";
|
||||
ssrc.attribute_value = rtp_ssrc.label;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
if (rtp_ssrc.rtx_ssrc) {
|
||||
ssrc_num = rtp_ssrc.rtx_ssrc;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
{
|
||||
for (auto &ssrc : m.rtp_rtx_ssrc) {
|
||||
//添加a=ssrc字段
|
||||
addSSRCItem(ssrc, sdp_media.items);
|
||||
}
|
||||
|
||||
for (auto &ssrc : m.rtp_rtx_ssrc) {
|
||||
//生成a=ssrc-group:FID字段
|
||||
CHECK(!ssrc.empty());
|
||||
addSdpAttrSSRC(ssrc, sdp_media.items, ssrc.ssrc);
|
||||
if (ssrc.rtx_ssrc) {
|
||||
addSdpAttrSSRC(ssrc, sdp_media.items, ssrc.rtx_ssrc);
|
||||
|
||||
//生成a=ssrc-group:FID字段
|
||||
//有rtx ssrc
|
||||
auto group = std::make_shared<SdpAttrSSRCGroup>();
|
||||
group->type = "FID";
|
||||
@@ -1219,6 +1185,33 @@ RtcSessionSdp::Ptr RtcSession::toRtcSessionSdp() const{
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
void addSdpAttrSSRC(const RtcSSRC &rtp_ssrc, vector<SdpItem::Ptr> &items, uint32_t ssrc_num) {
|
||||
assert(ssrc_num);
|
||||
SdpAttrSSRC ssrc;
|
||||
ssrc.ssrc = ssrc_num;
|
||||
|
||||
ssrc.attribute = "cname";
|
||||
ssrc.attribute_value = rtp_ssrc.cname;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
|
||||
if (!rtp_ssrc.msid.empty()) {
|
||||
ssrc.attribute = "msid";
|
||||
ssrc.attribute_value = rtp_ssrc.msid;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
|
||||
if (!rtp_ssrc.mslabel.empty()) {
|
||||
ssrc.attribute = "mslabel";
|
||||
ssrc.attribute_value = rtp_ssrc.mslabel;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
|
||||
if (!rtp_ssrc.label.empty()) {
|
||||
ssrc.attribute = "label";
|
||||
ssrc.attribute_value = rtp_ssrc.label;
|
||||
items.emplace_back(wrapSdpAttr(std::make_shared<SdpAttrSSRC>(ssrc)));
|
||||
}
|
||||
}
|
||||
|
||||
string RtcSession::toString() const{
|
||||
return toRtcSessionSdp()->toString();
|
||||
|
||||
Reference in New Issue
Block a user