зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1279049 - add sdp handling for audio FEC, r=jesup
MozReview-Commit-ID: J0ax8TnR3p8 --HG-- extra : transplant_source : %D5Y%15%E6%C3d%F5%BD%9B%D7%CC%BA%DA%DE%12.%88%DD%A1%5B
This commit is contained in:
Родитель
0c62c74b9f
Коммит
f1dd9b78e0
|
@ -172,6 +172,7 @@ class JsepAudioCodecDescription : public JsepCodecDescription {
|
||||||
// We prefer to receive stereo, if available.
|
// We prefer to receive stereo, if available.
|
||||||
opusParams.stereo = 1;
|
opusParams.stereo = 1;
|
||||||
}
|
}
|
||||||
|
opusParams.useInBandFec = mFECEnabled ? 1 : 0;
|
||||||
msection.SetFmtp(SdpFmtpAttributeList::Fmtp(mDefaultPt, opusParams));
|
msection.SetFmtp(SdpFmtpAttributeList::Fmtp(mDefaultPt, opusParams));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,6 +188,10 @@ class JsepAudioCodecDescription : public JsepCodecDescription {
|
||||||
|
|
||||||
mMaxPlaybackRate = opusParams.maxplaybackrate;
|
mMaxPlaybackRate = opusParams.maxplaybackrate;
|
||||||
mForceMono = !opusParams.stereo;
|
mForceMono = !opusParams.stereo;
|
||||||
|
// draft-ietf-rtcweb-fec-03.txt section 4.2 says support for FEC
|
||||||
|
// at the received side is declarative and can be negotiated
|
||||||
|
// separately for either media direction.
|
||||||
|
mFECEnabled = opusParams.useInBandFec;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -876,7 +876,8 @@ class ConfigureCodec {
|
||||||
mVP8MaxFs(0),
|
mVP8MaxFs(0),
|
||||||
mVP8MaxFr(0),
|
mVP8MaxFr(0),
|
||||||
mUseTmmbr(false),
|
mUseTmmbr(false),
|
||||||
mUseRemb(false)
|
mUseRemb(false),
|
||||||
|
mUseAudioFec(false)
|
||||||
{
|
{
|
||||||
#ifdef MOZ_WEBRTC_OMX
|
#ifdef MOZ_WEBRTC_OMX
|
||||||
// Check to see if what HW codecs are available (not in use) at this moment.
|
// Check to see if what HW codecs are available (not in use) at this moment.
|
||||||
|
@ -945,13 +946,21 @@ class ConfigureCodec {
|
||||||
|
|
||||||
// REMB is enabled by default, but can be disabled from about:config
|
// REMB is enabled by default, but can be disabled from about:config
|
||||||
branch->GetBoolPref("media.navigator.video.use_remb", &mUseRemb);
|
branch->GetBoolPref("media.navigator.video.use_remb", &mUseRemb);
|
||||||
|
|
||||||
|
branch->GetBoolPref("media.navigator.audio.use_fec", &mUseAudioFec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void operator()(JsepCodecDescription* codec) const
|
void operator()(JsepCodecDescription* codec) const
|
||||||
{
|
{
|
||||||
switch (codec->mType) {
|
switch (codec->mType) {
|
||||||
case SdpMediaSection::kAudio:
|
case SdpMediaSection::kAudio:
|
||||||
// Nothing to configure here, for now.
|
{
|
||||||
|
JsepAudioCodecDescription& audioCodec =
|
||||||
|
static_cast<JsepAudioCodecDescription&>(*codec);
|
||||||
|
if (audioCodec.mName == "opus") {
|
||||||
|
audioCodec.mFECEnabled = mUseAudioFec;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SdpMediaSection::kVideo:
|
case SdpMediaSection::kVideo:
|
||||||
{
|
{
|
||||||
|
@ -1016,6 +1025,7 @@ class ConfigureCodec {
|
||||||
int32_t mVP8MaxFr;
|
int32_t mVP8MaxFr;
|
||||||
bool mUseTmmbr;
|
bool mUseTmmbr;
|
||||||
bool mUseRemb;
|
bool mUseRemb;
|
||||||
|
bool mUseAudioFec;
|
||||||
};
|
};
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
|
|
@ -1243,11 +1243,13 @@ public:
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum { kDefaultMaxPlaybackRate = 48000,
|
enum { kDefaultMaxPlaybackRate = 48000,
|
||||||
kDefaultStereo = 0 };
|
kDefaultStereo = 0,
|
||||||
|
kDefaultUseInBandFec = 0 };
|
||||||
OpusParameters() :
|
OpusParameters() :
|
||||||
Parameters(SdpRtpmapAttributeList::kOpus),
|
Parameters(SdpRtpmapAttributeList::kOpus),
|
||||||
maxplaybackrate(kDefaultMaxPlaybackRate),
|
maxplaybackrate(kDefaultMaxPlaybackRate),
|
||||||
stereo(kDefaultStereo)
|
stereo(kDefaultStereo),
|
||||||
|
useInBandFec(kDefaultUseInBandFec)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Parameters*
|
Parameters*
|
||||||
|
@ -1259,12 +1261,14 @@ public:
|
||||||
void
|
void
|
||||||
Serialize(std::ostream& os) const override
|
Serialize(std::ostream& os) const override
|
||||||
{
|
{
|
||||||
os << "maxplaybackrate=" << maxplaybackrate << ";"
|
os << "maxplaybackrate=" << maxplaybackrate
|
||||||
<< "stereo=" << stereo;
|
<< ";stereo=" << stereo
|
||||||
|
<< ";useinbandfec=" << useInBandFec;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int maxplaybackrate;
|
unsigned int maxplaybackrate;
|
||||||
unsigned int stereo;
|
unsigned int stereo;
|
||||||
|
unsigned int useInBandFec;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Fmtp
|
class Fmtp
|
||||||
|
|
|
@ -726,6 +726,7 @@ SipccSdpAttributeList::LoadFmtp(sdp_t* sdp, uint16_t level)
|
||||||
new SdpFmtpAttributeList::OpusParameters);
|
new SdpFmtpAttributeList::OpusParameters);
|
||||||
opusParameters->maxplaybackrate = fmtp->maxplaybackrate;
|
opusParameters->maxplaybackrate = fmtp->maxplaybackrate;
|
||||||
opusParameters->stereo = fmtp->stereo;
|
opusParameters->stereo = fmtp->stereo;
|
||||||
|
opusParameters->useInBandFec = fmtp->useinbandfec;
|
||||||
parameters.reset(opusParameters);
|
parameters.reset(opusParameters);
|
||||||
} break;
|
} break;
|
||||||
default: {
|
default: {
|
||||||
|
|
|
@ -1561,7 +1561,7 @@ const std::string kH264AudioVideoOffer =
|
||||||
"a=rtpmap:0 PCMU/8000" CRLF
|
"a=rtpmap:0 PCMU/8000" CRLF
|
||||||
"a=rtpmap:8 PCMA/8000" CRLF
|
"a=rtpmap:8 PCMA/8000" CRLF
|
||||||
"a=rtpmap:101 telephone-event/8000" CRLF
|
"a=rtpmap:101 telephone-event/8000" CRLF
|
||||||
"a=fmtp:109 maxplaybackrate=32000;stereo=1" CRLF
|
"a=fmtp:109 maxplaybackrate=32000;stereo=1;useinbandfec=1" CRLF
|
||||||
"a=ice-ufrag:00000000" CRLF
|
"a=ice-ufrag:00000000" CRLF
|
||||||
"a=ice-pwd:0000000000000000000000000000000" CRLF
|
"a=ice-pwd:0000000000000000000000000000000" CRLF
|
||||||
"a=sendonly" CRLF
|
"a=sendonly" CRLF
|
||||||
|
@ -1623,6 +1623,7 @@ TEST_P(NewSdpTest, CheckFormatParameters) {
|
||||||
audio_format_params[0].parameters.get());
|
audio_format_params[0].parameters.get());
|
||||||
ASSERT_EQ(32000U, opus_parameters->maxplaybackrate);
|
ASSERT_EQ(32000U, opus_parameters->maxplaybackrate);
|
||||||
ASSERT_EQ(1U, opus_parameters->stereo);
|
ASSERT_EQ(1U, opus_parameters->stereo);
|
||||||
|
ASSERT_EQ(1U, opus_parameters->useInBandFec);
|
||||||
|
|
||||||
ASSERT_TRUE(mSdp->GetMediaSection(1).GetAttributeList().HasAttribute(
|
ASSERT_TRUE(mSdp->GetMediaSection(1).GetAttributeList().HasAttribute(
|
||||||
SdpAttribute::kFmtpAttribute));
|
SdpAttribute::kFmtpAttribute));
|
||||||
|
|
|
@ -399,7 +399,7 @@ pref("media.navigator.video.default_fps",30);
|
||||||
pref("media.navigator.video.default_minfps",10);
|
pref("media.navigator.video.default_minfps",10);
|
||||||
pref("media.navigator.video.use_remb", true);
|
pref("media.navigator.video.use_remb", true);
|
||||||
pref("media.navigator.video.use_tmmbr", true);
|
pref("media.navigator.video.use_tmmbr", true);
|
||||||
|
pref("media.navigator.audio.use_fec", true);
|
||||||
|
|
||||||
pref("media.webrtc.debug.trace_mask", 0);
|
pref("media.webrtc.debug.trace_mask", 0);
|
||||||
pref("media.webrtc.debug.multi_log", false);
|
pref("media.webrtc.debug.multi_log", false);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче