mirror of
https://github.com/ossrs/srs.git
synced 2025-02-14 20:31:56 +00:00
WebRTC: Support config the bitrate of transcoding AAC to Opus. v5.0.167, v6.0.60 (#3515)
--------- Co-authored-by: john <hondaxiao@tencent.com>
This commit is contained in:
parent
497ea2bc90
commit
e11b93d664
6 changed files with 86 additions and 4 deletions
|
@ -546,6 +546,11 @@ vhost rtc.vhost.srs.com {
|
||||||
# Overwrite by env SRS_VHOST_RTC_KEEP_BFRAME for all vhosts.
|
# Overwrite by env SRS_VHOST_RTC_KEEP_BFRAME for all vhosts.
|
||||||
# default: off
|
# default: off
|
||||||
keep_bframe 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.
|
# Whether enable transmuxing RTC to RTMP.
|
||||||
# Overwrite by env SRS_VHOST_RTC_RTC_TO_RTMP for all vhosts.
|
# Overwrite by env SRS_VHOST_RTC_RTC_TO_RTMP for all vhosts.
|
||||||
|
@ -556,6 +561,11 @@ vhost rtc.vhost.srs.com {
|
||||||
# Overwrite by env SRS_VHOST_RTC_PLI_FOR_RTMP for all vhosts.
|
# Overwrite by env SRS_VHOST_RTC_PLI_FOR_RTMP for all vhosts.
|
||||||
# Default: 6.0
|
# Default: 6.0
|
||||||
pli_for_rtmp 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.
|
# For transmuxing RTMP to RTC, it will impact the default values if RTC is on.
|
||||||
|
|
|
@ -8,6 +8,7 @@ The changelog for SRS.
|
||||||
|
|
||||||
## SRS 5.0 Changelog
|
## 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-09, Merge [#3615](https://github.com/ossrs/srs/pull/3615): Compile: Fix typo for 3rdparty. v5.0.166 (#3615)
|
||||||
* v5.0, 2023-07-09, Fix issue of srs-player failing to play HTTP-FLV. v5.0.165
|
* v5.0, 2023-07-09, Fix issue of srs-player failing to play HTTP-FLV. v5.0.165
|
||||||
* 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 [#3595](https://github.com/ossrs/srs/pull/3595): WHIP: Improve WHIP deletion by token verification. v5.0.164 (#3595)
|
||||||
|
|
|
@ -2669,7 +2669,8 @@ srs_error_t SrsConfig::check_normal_config()
|
||||||
if (m != "enabled" && m != "nack" && m != "twcc" && m != "nack_no_copy"
|
if (m != "enabled" && m != "nack" && m != "twcc" && m != "nack_no_copy"
|
||||||
&& m != "bframe" && m != "aac" && m != "stun_timeout" && m != "stun_strict_check"
|
&& 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 != "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());
|
return srs_error_new(ERROR_SYSTEM_CONFIG_INVALID, "illegal vhost.rtc.%s of %s", m.c_str(), vhost->arg0().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4641,6 +4642,74 @@ bool SrsConfig::get_rtc_twcc_enabled(string vhost)
|
||||||
return SRS_CONF_PERFER_TRUE(conf->arg0());
|
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)
|
SrsConfDirective* SrsConfig::get_vhost(string vhost, bool try_default_vhost)
|
||||||
{
|
{
|
||||||
srs_assert(root);
|
srs_assert(root);
|
||||||
|
|
|
@ -531,6 +531,8 @@ public:
|
||||||
bool get_rtc_nack_enabled(std::string vhost);
|
bool get_rtc_nack_enabled(std::string vhost);
|
||||||
bool get_rtc_nack_no_copy(std::string vhost);
|
bool get_rtc_nack_no_copy(std::string vhost);
|
||||||
bool get_rtc_twcc_enabled(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
|
// vhost specified section
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -895,7 +895,7 @@ srs_error_t SrsRtcFromRtmpBridge::init_codec(SrsAudioCodecId codec)
|
||||||
codec_ = new SrsAudioTranscoder();
|
codec_ = new SrsAudioTranscoder();
|
||||||
|
|
||||||
// Initialize the codec according to the codec in stream.
|
// 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.
|
||||||
if ((err = codec_->initialize(codec, SrsAudioCodecIdOpus, kAudioChannel, kAudioSamplerate, bitrate)) != srs_success) {
|
if ((err = codec_->initialize(codec, SrsAudioCodecIdOpus, kAudioChannel, kAudioSamplerate, bitrate)) != srs_success) {
|
||||||
return srs_error_wrap(err, "init codec=%d", codec);
|
return srs_error_wrap(err, "init codec=%d", codec);
|
||||||
}
|
}
|
||||||
|
@ -1352,7 +1352,7 @@ srs_error_t SrsRtmpFromRtcBridge::initialize(SrsRequest* r)
|
||||||
SrsAudioCodecId to = SrsAudioCodecIdAAC; // The output audio codec.
|
SrsAudioCodecId to = SrsAudioCodecIdAAC; // The output audio codec.
|
||||||
int channels = 2; // The output audio channels.
|
int channels = 2; // The output audio channels.
|
||||||
int sample_rate = 48000; // The output audio sample rate in HZ.
|
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) {
|
if ((err = codec_->initialize(from, to, channels, sample_rate, bitrate)) != srs_success) {
|
||||||
return srs_error_wrap(err, "bridge initialize");
|
return srs_error_wrap(err, "bridge initialize");
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
#define VERSION_MAJOR 5
|
#define VERSION_MAJOR 5
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_REVISION 166
|
#define VERSION_REVISION 167
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue