Add API to set track id in msid

This commit is contained in:
Filip Klembara
2021-02-05 12:10:51 +01:00
parent 8a61043bd7
commit 9f3b004756
4 changed files with 17 additions and 11 deletions

View File

@ -141,9 +141,9 @@ public:
void removeFormat(const string &fmt); void removeFormat(const string &fmt);
void addSSRC(uint32_t ssrc, std::optional<string> name, void addSSRC(uint32_t ssrc, std::optional<string> name,
std::optional<string> msid = nullopt); std::optional<string> msid = nullopt, std::optional<string> trackID = nullopt);
void replaceSSRC(uint32_t oldSSRC, uint32_t ssrc, std::optional<string> name, void replaceSSRC(uint32_t oldSSRC, uint32_t ssrc, std::optional<string> name,
std::optional<string> msid = nullopt); std::optional<string> msid = nullopt, std::optional<string> trackID = nullopt);
bool hasSSRC(uint32_t ssrc); bool hasSSRC(uint32_t ssrc);
std::vector<uint32_t> getSSRCs(); std::vector<uint32_t> getSSRCs();

View File

@ -215,8 +215,9 @@ RTC_EXPORT int rtcGetTrackDescription(int tr, char *buffer, int size);
/// @param _direction Direction /// @param _direction Direction
/// @param _name Name (optional) /// @param _name Name (optional)
/// @param _msid MSID (optional) /// @param _msid MSID (optional)
/// @param _trackID Track ID used in MSID (optional)
/// @returns Track id /// @returns Track id
RTC_EXPORT int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const char *_mid, rtcDirection direction, const char *_name, const char *_msid); RTC_EXPORT int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const char *_mid, rtcDirection direction, const char *_name, const char *_msid, const char *_trackID);
/// Set H264PacketizationHandler for track /// Set H264PacketizationHandler for track
/// @param tr Track id /// @param tr Track id

View File

@ -435,7 +435,7 @@ int rtcDeleteDataChannel(int dc) {
#if RTC_ENABLE_MEDIA #if RTC_ENABLE_MEDIA
void setSSRC(Description::Media *description, uint32_t ssrc, const char *_name, const char *_msid) { void setSSRC(Description::Media *description, uint32_t ssrc, const char *_name, const char *_msid, const char *_trackID) {
optional<string> name = nullopt; optional<string> name = nullopt;
if (_name) { if (_name) {
@ -447,11 +447,16 @@ void setSSRC(Description::Media *description, uint32_t ssrc, const char *_name,
msid = string(_msid); msid = string(_msid);
} }
description->addSSRC(ssrc, name, msid); optional<string> trackID = nullopt;
if (_trackID) {
trackID = string(_trackID);
}
description->addSSRC(ssrc, name, msid, trackID);
} }
int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const char *_mid, int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const char *_mid,
rtcDirection _direction, const char *_name, const char *_msid) { rtcDirection _direction, const char *_name, const char *_msid, const char *_trackID) {
return WRAP({ return WRAP({
auto peerConnection = getPeerConnection(pc); auto peerConnection = getPeerConnection(pc);
@ -516,7 +521,7 @@ int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const
throw std::invalid_argument("Unexpected codec"); throw std::invalid_argument("Unexpected codec");
} else { } else {
auto description = optDescription.value(); auto description = optDescription.value();
setSSRC(&description, ssrc, _name, _msid); setSSRC(&description, ssrc, _name, _msid, _trackID);
int tr = emplaceTrack(peerConnection->addTrack(std::move(description))); int tr = emplaceTrack(peerConnection->addTrack(std::move(description)));
if (auto ptr = getUserPointer(pc)) { if (auto ptr = getUserPointer(pc)) {

View File

@ -525,20 +525,20 @@ Description::Entry::removeAttribute(std::vector<string>::iterator it) {
} }
void Description::Media::addSSRC(uint32_t ssrc, std::optional<string> name, void Description::Media::addSSRC(uint32_t ssrc, std::optional<string> name,
std::optional<string> msid) { std::optional<string> msid, std::optional<string> trackID) {
if (name) if (name)
mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " cname:" + *name); mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " cname:" + *name);
else else
mAttributes.emplace_back("ssrc:" + std::to_string(ssrc)); mAttributes.emplace_back("ssrc:" + std::to_string(ssrc));
if (msid) if (msid)
mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " msid:" + *msid + " " + *msid); mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " msid:" + *msid + " " + trackID.value_or(*msid));
mSsrcs.emplace_back(ssrc); mSsrcs.emplace_back(ssrc);
} }
void Description::Media::replaceSSRC(uint32_t oldSSRC, uint32_t ssrc, std::optional<string> name, void Description::Media::replaceSSRC(uint32_t oldSSRC, uint32_t ssrc, std::optional<string> name,
std::optional<string> msid) { std::optional<string> msid, std::optional<string> trackID) {
auto it = mAttributes.begin(); auto it = mAttributes.begin();
while (it != mAttributes.end()) { while (it != mAttributes.end()) {
if (it->find("ssrc:" + std::to_string(oldSSRC)) == 0) { if (it->find("ssrc:" + std::to_string(oldSSRC)) == 0) {
@ -546,7 +546,7 @@ void Description::Media::replaceSSRC(uint32_t oldSSRC, uint32_t ssrc, std::optio
} else } else
it++; it++;
} }
addSSRC(ssrc, std::move(name), std::move(msid)); addSSRC(ssrc, std::move(name), std::move(msid), std::move(trackID));
} }
void Description::Media::removeSSRC(uint32_t oldSSRC) { void Description::Media::removeSSRC(uint32_t oldSSRC) {