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:
parent
6e9cb059b3
commit
4d0863468a
9 changed files with 135 additions and 133 deletions
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue