- Filter data channel codecs based on codec name instead of payload type, which may have been remapped.
- Rename the data codec payload types to end with "PlType" instead of "Id", for consistency. BUG=webrtc:2795 Review-Url: https://codereview.webrtc.org/2397413002 Cr-Commit-Position: refs/heads/master@{#14581}
This commit is contained in:
parent
9e31cca8f4
commit
9fa49759e5
@ -1260,8 +1260,8 @@ void BuildMediaDescription(const ContentInfo* content_info,
|
||||
for (std::vector<cricket::DataCodec>::const_iterator it =
|
||||
data_desc->codecs().begin();
|
||||
it != data_desc->codecs().end(); ++it) {
|
||||
if (it->id == cricket::kGoogleSctpDataCodecId &&
|
||||
it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
|
||||
if (cricket::CodecNamesEq(it->name, cricket::kGoogleSctpDataCodecName)
|
||||
&& it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1651,13 +1651,15 @@ void AddRtcpFbLines(const T& codec, std::string* message) {
|
||||
|
||||
bool AddSctpDataCodec(DataContentDescription* media_desc,
|
||||
int sctp_port) {
|
||||
if (media_desc->HasCodec(cricket::kGoogleSctpDataCodecId)) {
|
||||
return ParseFailed("",
|
||||
"Can't have multiple sctp port attributes.",
|
||||
NULL);
|
||||
for (const auto& codec : media_desc->codecs()) {
|
||||
if (cricket::CodecNamesEq(codec.name, cricket::kGoogleSctpDataCodecName)) {
|
||||
return ParseFailed("",
|
||||
"Can't have multiple sctp port attributes.",
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
// Add the SCTP Port number as a pseudo-codec "port" parameter
|
||||
cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecId,
|
||||
cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecPlType,
|
||||
cricket::kGoogleSctpDataCodecName);
|
||||
codec_port.SetParam(cricket::kCodecParamPort, sctp_port);
|
||||
LOG(INFO) << "AddSctpDataCodec: Got SCTP Port Number "
|
||||
@ -2185,9 +2187,7 @@ void MaybeCreateStaticPayloadAudioCodecs(
|
||||
return;
|
||||
}
|
||||
RTC_DCHECK(media_desc->codecs().empty());
|
||||
std::vector<int>::const_iterator it = fmts.begin();
|
||||
for (; it != fmts.end(); ++it) {
|
||||
int payload_type = *it;
|
||||
for (int payload_type : fmts) {
|
||||
if (!media_desc->HasCodec(payload_type) &&
|
||||
payload_type >= 0 &&
|
||||
static_cast<uint32_t>(payload_type) <
|
||||
|
||||
@ -1395,7 +1395,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
std::unique_ptr<DataContentDescription> data(new DataContentDescription());
|
||||
data_desc_ = data.get();
|
||||
data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp);
|
||||
DataCodec codec(cricket::kGoogleSctpDataCodecId,
|
||||
DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
|
||||
cricket::kGoogleSctpDataCodecName);
|
||||
codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort);
|
||||
data_desc_->AddCodec(codec);
|
||||
@ -1990,7 +1990,7 @@ TEST_F(WebRtcSdpTest, SerializeWithSctpDataChannelAndNewPort) {
|
||||
jsep_desc.description()->GetContentDescriptionByName(kDataContentName));
|
||||
|
||||
const int kNewPort = 1234;
|
||||
cricket::DataCodec codec(cricket::kGoogleSctpDataCodecId,
|
||||
cricket::DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
|
||||
cricket::kGoogleSctpDataCodecName);
|
||||
codec.SetParam(cricket::kCodecParamPort, kNewPort);
|
||||
dcdesc->AddOrReplaceCodec(codec);
|
||||
@ -2605,7 +2605,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelAndNewPort) {
|
||||
mutant->GetContentDescriptionByName(kDataContentName));
|
||||
std::vector<cricket::DataCodec> codecs(dcdesc->codecs());
|
||||
EXPECT_EQ(1U, codecs.size());
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecId, codecs[0].id);
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, codecs[0].id);
|
||||
codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort);
|
||||
dcdesc->set_codecs(codecs);
|
||||
|
||||
|
||||
@ -3967,7 +3967,7 @@ TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) {
|
||||
int portnum = -1;
|
||||
ASSERT_TRUE(ch != NULL);
|
||||
ASSERT_EQ(1UL, ch->send_codecs().size());
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->send_codecs()[0].id);
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->send_codecs()[0].id);
|
||||
EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
|
||||
ch->send_codecs()[0].name.c_str()));
|
||||
EXPECT_TRUE(ch->send_codecs()[0].GetParam(cricket::kCodecParamPort,
|
||||
@ -3975,7 +3975,7 @@ TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) {
|
||||
EXPECT_EQ(new_send_port, portnum);
|
||||
|
||||
ASSERT_EQ(1UL, ch->recv_codecs().size());
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->recv_codecs()[0].id);
|
||||
EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->recv_codecs()[0].id);
|
||||
EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
|
||||
ch->recv_codecs()[0].name.c_str()));
|
||||
EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort,
|
||||
|
||||
@ -83,10 +83,10 @@ const char kCodecParamStartBitrate[] = "x-google-start-bitrate";
|
||||
const char kCodecParamMaxQuantization[] = "x-google-max-quantization";
|
||||
const char kCodecParamPort[] = "x-google-port";
|
||||
|
||||
const int kGoogleRtpDataCodecId = 101;
|
||||
const int kGoogleRtpDataCodecPlType = 109;
|
||||
const char kGoogleRtpDataCodecName[] = "google-data";
|
||||
|
||||
const int kGoogleSctpDataCodecId = 108;
|
||||
const int kGoogleSctpDataCodecPlType = 108;
|
||||
const char kGoogleSctpDataCodecName[] = "google-sctp-data";
|
||||
|
||||
const char kComfortNoiseCodecName[] = "CN";
|
||||
|
||||
@ -106,13 +106,13 @@ extern const char kCodecParamPort[];
|
||||
// We put the data codec names here so callers of
|
||||
// DataEngine::CreateChannel don't have to import rtpdataengine.h or
|
||||
// sctpdataengine.h to get the codec names they want to pass in.
|
||||
extern const int kGoogleRtpDataCodecId;
|
||||
extern const int kGoogleRtpDataCodecPlType;
|
||||
extern const char kGoogleRtpDataCodecName[];
|
||||
|
||||
// TODO(pthatcher): Find an id that won't conflict with anything. On
|
||||
// the other hand, it really shouldn't matter since the id won't be
|
||||
// used on the wire.
|
||||
extern const int kGoogleSctpDataCodecId;
|
||||
extern const int kGoogleSctpDataCodecPlType;
|
||||
extern const char kGoogleSctpDataCodecName[];
|
||||
|
||||
extern const char kComfortNoiseCodecName[];
|
||||
|
||||
@ -35,7 +35,7 @@ static const size_t kMaxSrtpHmacOverhead = 16;
|
||||
|
||||
RtpDataEngine::RtpDataEngine() {
|
||||
data_codecs_.push_back(
|
||||
DataCodec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName));
|
||||
DataCodec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName));
|
||||
}
|
||||
|
||||
DataMediaChannel* RtpDataEngine::CreateChannel(
|
||||
@ -84,7 +84,7 @@ void RtpClock::Tick(double now, int* seq_num, uint32_t* timestamp) {
|
||||
}
|
||||
|
||||
const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) {
|
||||
DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
|
||||
DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
|
||||
std::vector<DataCodec>::const_iterator iter;
|
||||
for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
|
||||
if (!iter->Matches(data_codec)) {
|
||||
@ -95,7 +95,7 @@ const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) {
|
||||
}
|
||||
|
||||
const DataCodec* FindKnownCodec(const std::vector<DataCodec>& codecs) {
|
||||
DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
|
||||
DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
|
||||
std::vector<DataCodec>::const_iterator iter;
|
||||
for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
|
||||
if (iter->Matches(data_codec)) {
|
||||
|
||||
@ -320,7 +320,7 @@ void DecrementUsrSctpUsageCount() {
|
||||
}
|
||||
|
||||
DataCodec GetSctpDataCodec() {
|
||||
DataCodec codec(kGoogleSctpDataCodecId, kGoogleSctpDataCodecName);
|
||||
DataCodec codec(kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName);
|
||||
codec.SetParam(kCodecParamPort, kSctpDefaultPort);
|
||||
return codec;
|
||||
}
|
||||
@ -985,14 +985,14 @@ static bool GetCodecIntParameter(const std::vector<DataCodec>& codecs,
|
||||
|
||||
bool SctpDataMediaChannel::SetSendCodecs(const std::vector<DataCodec>& codecs) {
|
||||
return GetCodecIntParameter(
|
||||
codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
|
||||
&remote_port_);
|
||||
codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
|
||||
kCodecParamPort, &remote_port_);
|
||||
}
|
||||
|
||||
bool SctpDataMediaChannel::SetRecvCodecs(const std::vector<DataCodec>& codecs) {
|
||||
return GetCodecIntParameter(
|
||||
codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
|
||||
&local_port_);
|
||||
codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
|
||||
kCodecParamPort, &local_port_);
|
||||
}
|
||||
|
||||
void SctpDataMediaChannel::OnPacketFromSctpToNetwork(
|
||||
|
||||
@ -302,10 +302,11 @@ static void GetCurrentStreamParams(const SessionDescription* sdesc,
|
||||
// Filters the data codecs for the data channel type.
|
||||
void FilterDataCodecs(std::vector<DataCodec>* codecs, bool sctp) {
|
||||
// Filter RTP codec for SCTP and vice versa.
|
||||
int codec_id = sctp ? kGoogleRtpDataCodecId : kGoogleSctpDataCodecId;
|
||||
const char* codec_name =
|
||||
sctp ? kGoogleRtpDataCodecName : kGoogleSctpDataCodecName;
|
||||
for (std::vector<DataCodec>::iterator iter = codecs->begin();
|
||||
iter != codecs->end();) {
|
||||
if (iter->id == codec_id) {
|
||||
if (CodecNamesEq(iter->name, codec_name)) {
|
||||
iter = codecs->erase(iter);
|
||||
} else {
|
||||
++iter;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user