1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Cache the large buffer allocation

This commit is contained in:
winlin 2021-02-26 19:46:52 +08:00
parent 6e9cb059b3
commit 4d0863468a
9 changed files with 135 additions and 133 deletions

View file

@ -3651,7 +3651,7 @@ srs_error_t SrsConfig::check_normal_config()
string n = conf->at(i)->name;
if (n != "enabled" && n != "listen" && n != "dir" && n != "candidate" && n != "ecdsa"
&& n != "encrypt" && n != "reuseport" && n != "merge_nalus" && n != "perf_stat" && n != "black_hole"
&& n != "ip_family" && n != "rtp_cache") {
&& n != "ip_family" && n != "rtp_cache" && n != "rtp_msg_cache") {
return srs_error_new(ERROR_SYSTEM_CONFIG_INVALID, "illegal rtc_server.%s", n.c_str());
}
}
@ -4919,6 +4919,23 @@ bool SrsConfig::get_rtc_server_rtp_cache()
return SRS_CONF_PERFER_FALSE(conf->arg0());
}
bool SrsConfig::get_rtc_server_rtp_msg_cache()
{
static bool DEFAULT = false;
SrsConfDirective* conf = root->get("rtc_server");
if (!conf) {
return DEFAULT;
}
conf = conf->get("rtp_msg_cache");
if (!conf || conf->arg0().empty()) {
return DEFAULT;
}
return SRS_CONF_PERFER_FALSE(conf->arg0());
}
bool SrsConfig::get_rtc_server_black_hole()
{
static bool DEFAULT = false;

View file

@ -535,6 +535,7 @@ public:
virtual bool get_rtc_server_merge_nalus();
virtual bool get_rtc_server_perf_stat();
virtual bool get_rtc_server_rtp_cache();
virtual bool get_rtc_server_rtp_msg_cache();
virtual bool get_rtc_server_black_hole();
virtual std::string get_rtc_server_black_hole_addr();
private:

View file

@ -1193,11 +1193,11 @@ srs_error_t SrsRtcPublishStream::on_rtp_plaintext(char* plaintext, int nb_plaint
SrsRtpPacket2* pkt = _srs_rtp_cache->allocate();
// Copy the packet body.
pkt->wrap(plaintext, nb_plaintext);
srs_assert(pkt->cache_buffer()->pos() == 0);
char* p = pkt->wrap(plaintext, nb_plaintext);
// Handle the packet.
err = do_on_rtp_plaintext(pkt);
SrsBuffer buf(p, nb_plaintext);
err = do_on_rtp_plaintext(pkt, &buf);
// Release the packet to cache.
_srs_rtp_cache->recycle(pkt);
@ -1205,14 +1205,14 @@ srs_error_t SrsRtcPublishStream::on_rtp_plaintext(char* plaintext, int nb_plaint
return err;
}
srs_error_t SrsRtcPublishStream::do_on_rtp_plaintext(SrsRtpPacket2* pkt)
srs_error_t SrsRtcPublishStream::do_on_rtp_plaintext(SrsRtpPacket2* pkt, SrsBuffer* buf)
{
srs_error_t err = srs_success;
pkt->set_decode_handler(this);
pkt->set_extension_types(&extension_types_);
if ((err = pkt->decode(pkt->cache_buffer())) != srs_success) {
if ((err = pkt->decode(buf)) != srs_success) {
return srs_error_wrap(err, "decode rtp packet");
}

View file

@ -357,7 +357,7 @@ private:
// @remark We copy the plaintext, user should free it.
srs_error_t on_rtp_plaintext(char* plaintext, int nb_plaintext);
private:
srs_error_t do_on_rtp_plaintext(SrsRtpPacket2* pkt);
srs_error_t do_on_rtp_plaintext(SrsRtpPacket2* pkt, SrsBuffer* buf);
public:
srs_error_t check_send_nacks();
public:

View file

@ -287,7 +287,10 @@ srs_error_t SrsRtcServer::initialize()
bool rtp_cache = _srs_config->get_rtc_server_rtp_cache();
_srs_rtp_cache->set_enabled(rtp_cache);
srs_trace("RTC server init ok, rtp_cache=%d", rtp_cache);
bool rtp_msg_cache = _srs_config->get_rtc_server_rtp_msg_cache();
_srs_rtp_msg_cache->set_enabled(rtp_msg_cache);
srs_trace("RTC server init ok, rc=%d, rmc=%d", rtp_cache, rtp_msg_cache);
return err;
}