Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebRTC: Support config the bitrate of transcoding AAC to Opus. v5.0.167, v6.0.60 #3515

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions trunk/conf/full.conf
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,11 @@ vhost rtc.vhost.srs.com {
# Overwrite by env SRS_VHOST_RTC_KEEP_BFRAME for all vhosts.
# default: off
keep_bframe off;
# The transcode audio bitrate, for RTMP to RTC.
# Overwrite by env SRS_VHOST_RTC_OPUS_BITRATE for all vhosts.
# [8000, 320000]
# default: 48000
opus_bitrate 48000;
###############################################################
# Whether enable transmuxing RTC to RTMP.
# Overwrite by env SRS_VHOST_RTC_RTC_TO_RTMP for all vhosts.
Expand All @@ -560,6 +565,11 @@ vhost rtc.vhost.srs.com {
# Overwrite by env SRS_VHOST_RTC_PLI_FOR_RTMP for all vhosts.
# Default: 6.0
pli_for_rtmp 6.0;
# The transcode audio bitrate, for RTC to RTMP.
# Overwrite by env SRS_VHOST_RTC_AAC_BITRATE for all vhosts.
# [8000, 320000]
# default: 48000
aac_bitrate 48000;
}
###############################################################
# For transmuxing RTMP to RTC, it will impact the default values if RTC is on.
Expand Down
2 changes: 2 additions & 0 deletions trunk/doc/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ The changelog for SRS.

## SRS 6.0 Changelog

* v6.0, 2023-07-18, Merge [#3515](https://github.com/ossrs/srs/pull/3515): WebRTC: Support config the bitrate of transcoding AAC to Opus. v6.0.60 (#3515)
* v6.0, 2023-07-09, Merge [#3615](https://github.com/ossrs/srs/pull/3615): Compile: Fix typo for 3rdparty. v6.0.59 (#3615)
* v6.0, 2023-07-01, Merge [#3595](https://github.com/ossrs/srs/pull/3595): WHIP: Improve WHIP deletion by token verification. v6.0.58 (#3595)
* v6.0, 2023-07-01, Merge [#3605](https://github.com/ossrs/srs/pull/3605): BugFix: Resolve the problem of srs_error_t memory leak. v6.0.57 (#3605)
Expand Down Expand Up @@ -73,6 +74,7 @@ The changelog for SRS.

## SRS 5.0 Changelog

* v5.0, 2023-07-18, Merge [#3515](https://github.com/ossrs/srs/pull/3515): WebRTC: Support config the bitrate of transcoding AAC to Opus. v5.0.167 (#3515)
* v5.0, 2023-07-09, Merge [#3615](https://github.com/ossrs/srs/pull/3615): Compile: Fix typo for 3rdparty. v5.0.166 (#3615)
* v5.0, 2023-07-01, Merge [#3595](https://github.com/ossrs/srs/pull/3595): WHIP: Improve WHIP deletion by token verification. v5.0.164 (#3595)
* v5.0, 2023-07-01, Merge [#3605](https://github.com/ossrs/srs/pull/3605): BugFix: Resolve the problem of srs_error_t memory leak. v5.0.163 (#3605)
Expand Down
71 changes: 70 additions & 1 deletion trunk/src/app/srs_app_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2669,7 +2669,8 @@ srs_error_t SrsConfig::check_normal_config()
if (m != "enabled" && m != "nack" && m != "twcc" && m != "nack_no_copy"
&& m != "bframe" && m != "aac" && m != "stun_timeout" && m != "stun_strict_check"
&& m != "dtls_role" && m != "dtls_version" && m != "drop_for_pt" && m != "rtc_to_rtmp"
&& m != "pli_for_rtmp" && m != "rtmp_to_rtc" && m != "keep_bframe") {
&& m != "pli_for_rtmp" && m != "rtmp_to_rtc" && m != "keep_bframe" && m != "opus_bitrate"
&& m != "aac_bitrate") {
return srs_error_new(ERROR_SYSTEM_CONFIG_INVALID, "illegal vhost.rtc.%s of %s", m.c_str(), vhost->arg0().c_str());
}
}
Expand Down Expand Up @@ -4641,6 +4642,74 @@ bool SrsConfig::get_rtc_twcc_enabled(string vhost)
return SRS_CONF_PERFER_TRUE(conf->arg0());
}

int SrsConfig::get_rtc_opus_bitrate(string vhost)
{
static int DEFAULT = 48000;

string opus_bitrate = srs_getenv("srs.vhost.rtc.opus_bitrate"); // SRS_VHOST_RTC_OPUS_BITRATE
if (!opus_bitrate.empty()) {
int v = ::atoi(opus_bitrate.c_str());
if (v < 8000 || v > 320000) {
srs_warn("Reset opus btirate %d to %d", v, DEFAULT);
v = DEFAULT;
}

return v;
}

SrsConfDirective* conf = get_rtc(vhost);
if (!conf) {
return DEFAULT;
}

conf = conf->get("opus_bitrate");
if (!conf || conf->arg0().empty()) {
return DEFAULT;
}

int v = ::atoi(conf->arg0().c_str());
if (v < 8000 || v > 320000) {
srs_warn("Reset opus btirate %d to %d", v, DEFAULT);
return DEFAULT;
}

return v;
}

int SrsConfig::get_rtc_aac_bitrate(string vhost)
{
static int DEFAULT = 48000;

string aac_bitrate = srs_getenv("srs.vhost.rtc.aac_bitrate"); // SRS_VHOST_RTC_AAC_BITRATE
if (!aac_bitrate.empty()) {
int v = ::atoi(aac_bitrate.c_str());
if (v < 8000 || v > 320000) {
srs_warn("Reset aac btirate %d to %d", v, DEFAULT);
v = DEFAULT;
}

return v;
}

SrsConfDirective* conf = get_rtc(vhost);
if (!conf) {
return DEFAULT;
}

conf = conf->get("aac_bitrate");
if (!conf || conf->arg0().empty()) {
return DEFAULT;
}

int v = ::atoi(conf->arg0().c_str());
if (v < 8000 || v > 320000) {
srs_warn("Reset aac btirate %d to %d", v, DEFAULT);
return DEFAULT;
}

return v;
}

SrsConfDirective* SrsConfig::get_vhost(string vhost, bool try_default_vhost)
{
srs_assert(root);
Expand Down
2 changes: 2 additions & 0 deletions trunk/src/app/srs_app_config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,8 @@ class SrsConfig
bool get_rtc_nack_enabled(std::string vhost);
bool get_rtc_nack_no_copy(std::string vhost);
bool get_rtc_twcc_enabled(std::string vhost);
int get_rtc_opus_bitrate(std::string vhost);
int get_rtc_aac_bitrate(std::string vhost);

// vhost specified section
public:
Expand Down
4 changes: 2 additions & 2 deletions trunk/src/app/srs_app_rtc_source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ srs_error_t SrsRtcRtpBuilder::init_codec(SrsAudioCodecId codec)
codec_ = new SrsAudioTranscoder();

// Initialize the codec according to the codec in stream.
int bitrate = 48000; // The output bitrate in bps.
int bitrate = _srs_config->get_rtc_opus_bitrate(req->vhost);// The output bitrate in bps.
chundonglinlin marked this conversation as resolved.
Show resolved Hide resolved
if ((err = codec_->initialize(codec, SrsAudioCodecIdOpus, kAudioChannel, kAudioSamplerate, bitrate)) != srs_success) {
return srs_error_wrap(err, "init codec=%d", codec);
}
Expand Down Expand Up @@ -1337,7 +1337,7 @@ srs_error_t SrsRtcFrameBuilder::initialize(SrsRequest* r)
SrsAudioCodecId to = SrsAudioCodecIdAAC; // The output audio codec.
int channels = 2; // The output audio channels.
int sample_rate = 48000; // The output audio sample rate in HZ.
int bitrate = 48000; // The output audio bitrate in bps.
int bitrate = _srs_config->get_rtc_aac_bitrate(r->vhost); // The output audio bitrate in bps.
if ((err = codec_->initialize(from, to, channels, sample_rate, bitrate)) != srs_success) {
return srs_error_wrap(err, "bridge initialize");
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/src/core/srs_core_version5.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@

#define VERSION_MAJOR 5
#define VERSION_MINOR 0
#define VERSION_REVISION 166
#define VERSION_REVISION 167

#endif
2 changes: 1 addition & 1 deletion trunk/src/core/srs_core_version6.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@

#define VERSION_MAJOR 6
#define VERSION_MINOR 0
#define VERSION_REVISION 59
#define VERSION_REVISION 60

#endif