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

for bug #251, remove the mic(message iovs cache), no use.

This commit is contained in:
winlin 2014-12-10 09:15:38 +08:00
parent 149d5863e9
commit 7150a99f41
7 changed files with 2 additions and 452 deletions

View file

@ -822,10 +822,6 @@ SrsSource::SrsSource(SrsRequest* req)
_srs_config->subscribe(this); _srs_config->subscribe(this);
atc = _srs_config->get_atc(_req->vhost); atc = _srs_config->get_atc(_req->vhost);
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
chunk_size = 0;
#endif
} }
SrsSource::~SrsSource() SrsSource::~SrsSource()
@ -1052,26 +1048,6 @@ int SrsSource::on_reload_vhost_dvr(string vhost)
return ret; return ret;
} }
int SrsSource::on_reload_vhost_chunk_size(string vhost)
{
int ret = ERROR_SUCCESS;
if (_req->vhost != vhost) {
return ret;
}
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
int size = _srs_config->get_chunk_size(_req->vhost);
if (chunk_size != size) {
srs_warn("connected clients will error for mic chunk_size changed %d=>%d",
chunk_size, size);
}
chunk_size = size;
#endif
return ret;
}
int SrsSource::on_reload_vhost_transcode(string vhost) int SrsSource::on_reload_vhost_transcode(string vhost)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
@ -1301,14 +1277,6 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata
} }
srs_verbose("initialize shared ptr metadata success."); srs_verbose("initialize shared ptr metadata success.");
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
if ((ret = cache_metadata->mic_evaluate(chunk_size)) != ERROR_SUCCESS) {
srs_error("mic metadata iovs failed, chunk_size=%d. ret=%d", chunk_size, ret);
return ret;
}
srs_info("mic metadata iovs ok, chunk_size=%d", chunk_size);
#endif
// copy to all consumer // copy to all consumer
if (true) { if (true) {
std::vector<SrsConsumer*>::iterator it; std::vector<SrsConsumer*>::iterator it;
@ -1350,14 +1318,6 @@ int SrsSource::on_audio(SrsCommonMessage* __audio)
} }
srs_verbose("initialize shared ptr audio success."); srs_verbose("initialize shared ptr audio success.");
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
if ((ret = msg.mic_evaluate(chunk_size)) != ERROR_SUCCESS) {
srs_error("mic audio iovs failed, chunk_size=%d. ret=%d", chunk_size, ret);
return ret;
}
srs_info("mic audio iovs ok, chunk_size=%d", chunk_size);
#endif
#ifdef SRS_AUTO_HLS #ifdef SRS_AUTO_HLS
if ((ret = hls->on_audio(&msg)) != ERROR_SUCCESS) { if ((ret = hls->on_audio(&msg)) != ERROR_SUCCESS) {
srs_warn("hls process audio message failed, ignore and disable hls. ret=%d", ret); srs_warn("hls process audio message failed, ignore and disable hls. ret=%d", ret);
@ -1468,14 +1428,6 @@ int SrsSource::on_video(SrsCommonMessage* __video)
} }
srs_verbose("initialize shared ptr video success."); srs_verbose("initialize shared ptr video success.");
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
if ((ret = msg.mic_evaluate(chunk_size)) != ERROR_SUCCESS) {
srs_error("mic video iovs failed, chunk_size=%d. ret=%d", chunk_size, ret);
return ret;
}
srs_info("mic video iovs ok, chunk_size=%d", chunk_size);
#endif
#ifdef SRS_AUTO_HLS #ifdef SRS_AUTO_HLS
if ((ret = hls->on_video(&msg)) != ERROR_SUCCESS) { if ((ret = hls->on_video(&msg)) != ERROR_SUCCESS) {
srs_warn("hls process video message failed, ignore and disable hls. ret=%d", ret); srs_warn("hls process video message failed, ignore and disable hls. ret=%d", ret);
@ -1727,11 +1679,6 @@ int SrsSource::on_publish()
return ret; return ret;
} }
#endif #endif
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
chunk_size = _srs_config->get_chunk_size(_req->vhost);
srs_trace("mic use chunk_size=%d to send msgs", chunk_size);
#endif
return ret; return ret;
} }

View file

@ -403,11 +403,6 @@ private:
std::vector<SrsForwarder*> forwarders; std::vector<SrsForwarder*> forwarders;
// for aggregate message // for aggregate message
SrsStream* aggregate_stream; SrsStream* aggregate_stream;
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
// the chunk size for mic,
// update when publish stream.
int chunk_size;
#endif
private: private:
/** /**
* the sample rate of audio in metadata. * the sample rate of audio in metadata.
@ -452,7 +447,6 @@ public:
virtual int on_reload_vhost_forward(std::string vhost); virtual int on_reload_vhost_forward(std::string vhost);
virtual int on_reload_vhost_hls(std::string vhost); virtual int on_reload_vhost_hls(std::string vhost);
virtual int on_reload_vhost_dvr(std::string vhost); virtual int on_reload_vhost_dvr(std::string vhost);
virtual int on_reload_vhost_chunk_size(std::string vhost);
virtual int on_reload_vhost_transcode(std::string vhost); virtual int on_reload_vhost_transcode(std::string vhost);
// for the tools callback // for the tools callback
public: public:

View file

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version // current release version
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 0 #define VERSION_MINOR 0
#define VERSION_REVISION 67 #define VERSION_REVISION 68
// server info. // server info.
#define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_KEY "SRS"
#define RTMP_SIG_SRS_ROLE "origin/edge server" #define RTMP_SIG_SRS_ROLE "origin/edge server"

View file

@ -97,25 +97,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// the default config of mw. // the default config of mw.
#define SRS_PERF_MW_SLEEP 350 #define SRS_PERF_MW_SLEEP 350
/** /**
* use iovs cache in each msg,
* for the shared ptr message, we calc once and used for every copy.
* @see https://github.com/winlinvip/simple-rtmp-server/issues/251
* @remark if enable this, donot use protocol iovs cache.
* @remark when reload change the chunk size, previous clients error.
*/
#undef SRS_PERF_MW_MSG_IOVS_CACHE
/**
* how many msgs can be send entirely. * how many msgs can be send entirely.
* for play clients to get msgs then totally send out. * for play clients to get msgs then totally send out.
* for the mw sleep set to 1800, the msgs is about 133. * for the mw sleep set to 1800, the msgs is about 133.
* @remark, recomment to 128. * @remark, recomment to 128.
* @remark, when mic enabled, use larger iovs cache, to 512.
*/ */
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE #define SRS_PERF_MW_MSGS 128
#define SRS_PERF_MW_MSGS 128
#else
#define SRS_PERF_MW_MSGS 512
#endif
/** /**
* whether set the socket send buffer size. * whether set the socket send buffer size.

View file

@ -149,11 +149,6 @@ void show_macro_features()
#endif #endif
srs_trace("system default latency in ms: mw(0-%d) + mr(0-%d) + play-queue(0-%d)", srs_trace("system default latency in ms: mw(0-%d) + mr(0-%d) + play-queue(0-%d)",
SRS_PERF_MW_SLEEP, possible_mr_latency, SRS_PERF_PLAY_QUEUE*1000); SRS_PERF_MW_SLEEP, possible_mr_latency, SRS_PERF_PLAY_QUEUE*1000);
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
srs_warn("MIC(message iovs cache) enabled, the connected clients will be"
"disconneted when reload changed the chunk_size.");
#endif
} }
void check_macro_features() void check_macro_features()

View file

@ -387,109 +387,16 @@ SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
payload = NULL; payload = NULL;
size = 0; size = 0;
shared_count = 0; shared_count = 0;
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
nb_iovs = 0;
iovs = NULL;
chunk_size = 0;
#endif
} }
SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr() SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
{ {
srs_freep(payload); srs_freep(payload);
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
srs_freep(iovs);
#endif
} }
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
int SrsSharedPtrMessage::__SrsSharedPtr::mic_evaluate(int chunk_size)
{
int ret = ERROR_SUCCESS;
// use the chunk size, shuold not be changed.
this->chunk_size = chunk_size;
// c0 header
int nbh = srs_chunk_header_c0(
header.perfer_cid, 0, header.payload_length,
header.message_type, 0,
mic_c0, sizeof(mic_c0));
srs_assert(nbh > 0);;
// c3 header
mic_c3 = 0xC0 | (header.perfer_cid & 0x3F);
// calc number of iovs
nb_chunks = header.payload_length / chunk_size;
if (header.payload_length % chunk_size) {
nb_chunks++;
}
nb_iovs = 1/*cid*/ + 1/*size*//*type*/+ 1/*chunk*/;
// left chunks, always cid+chunk.
if (nb_chunks > 0) {
nb_iovs += (nb_chunks - 1) * 2;
}
// create iovs
srs_freep(iovs);
iovs = new iovec[nb_iovs];
// for payload chunks.
char* p = payload;
char* end = p + size;
iovec* iov = iovs + 0;
while (p < end) {
// size of payload.
int payload_size = srs_min(chunk_size, end - p);
// header, c0 or c3
if (p == payload) {
// c0, cid+size+type
// cid, 1B
iov[0].iov_base = mic_c0;
iov[0].iov_len = 1;
// size(payload length), 3B
// type(message type), 1B
iov[1].iov_base = mic_c0 + 4;
iov[1].iov_len = 4;
// chunk
iov[2].iov_base = p;
iov[2].iov_len = payload_size;
// move to next iovs.
iov += 3;
} else {
// c3
iov[0].iov_base = &mic_c3;
iov[0].iov_len = 1;
// chunk
iov[1].iov_base = p;
iov[1].iov_len = payload_size;
// move to next iovs.
iov += 2;
}
// to next chunk
p += payload_size;
}
return ret;
}
#endif
SrsSharedPtrMessage::SrsSharedPtrMessage() SrsSharedPtrMessage::SrsSharedPtrMessage()
{ {
ptr = NULL; ptr = NULL;
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
mic_etime_present = false;
#endif
} }
SrsSharedPtrMessage::~SrsSharedPtrMessage() SrsSharedPtrMessage::~SrsSharedPtrMessage()
@ -592,7 +499,6 @@ bool SrsSharedPtrMessage::is_video()
return ptr->header.message_type == RTMP_MSG_VideoMessage; return ptr->header.message_type == RTMP_MSG_VideoMessage;
} }
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
int SrsSharedPtrMessage::chunk_header(char* cache, int nb_cache, bool c0) int SrsSharedPtrMessage::chunk_header(char* cache, int nb_cache, bool c0)
{ {
if (c0) { if (c0) {
@ -606,7 +512,6 @@ int SrsSharedPtrMessage::chunk_header(char* cache, int nb_cache, bool c0)
cache, nb_cache); cache, nb_cache);
} }
} }
#endif
SrsSharedPtrMessage* SrsSharedPtrMessage::copy() SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
{ {
@ -625,155 +530,6 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
return copy; return copy;
} }
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
int SrsSharedPtrMessage::mic_evaluate(int chunk_size)
{
int ret = ERROR_SUCCESS;
// when chunk size changed, error to disconnect the client..
if (ptr->chunk_size > 0 && chunk_size != ptr->chunk_size) {
ret = ERROR_RTMP_MIC_CHUNKSIZE_CHANGED;
srs_warn("mic chunk size changed %d=>%d, ret=%d",
ptr->chunk_size, chunk_size, ret);
return ret;
}
// calc the shared ptr iovs at the first time.
if (ptr->chunk_size <= 0) {
if ((ret = ptr->mic_evaluate(chunk_size)) != ERROR_SUCCESS) {
srs_warn("mic evaluate source iovs failed. ret=%d", ret);
return ret;
}
}
return ret;
}
int SrsSharedPtrMessage::mic_iovs_dump(iovec* iovs, int max_nb_iovs)
{
// calc the private iovs
char* pp = NULL;
// calc number of iovs.
int nb_iovs = 1/*time*/ + 1/*sid*/;
// insert etime before all chunks.
if (mic_etime_present) {
nb_iovs += ptr->nb_chunks;
}
// not enough, return nagetive to try another loop.
if (max_nb_iovs < nb_iovs + ptr->nb_iovs) {
return -1;
}
// timestamp for c0/c3
u_int32_t timestamp = (u_int32_t)this->timestamp;
mic_etime_present = timestamp >= RTMP_EXTENDED_TIMESTAMP;
// chunk message header, 11 bytes
// timestamp, 3bytes, big-endian
char* p = mic_c0_time;
if (!mic_etime_present) {
pp = (char*)&timestamp;
*p++ = pp[2];
*p++ = pp[1];
*p++ = pp[0];
} else {
*p++ = 0xFF;
*p++ = 0xFF;
*p++ = 0xFF;
}
// stream_id, 4bytes, little-endian
p = mic_c0_sid;
pp = (char*)&stream_id;
*p++ = pp[0];
*p++ = pp[1];
*p++ = pp[2];
*p++ = pp[3];
// for c0
// chunk extended timestamp header, 0 or 4 bytes, big-endian
//
// for c3:
// chunk extended timestamp header, 0 or 4 bytes, big-endian
// 6.1.3. Extended Timestamp
// This field is transmitted only when the normal time stamp in the
// chunk message header is set to 0x00ffffff. If normal time stamp is
// set to any value less than 0x00ffffff, this field MUST NOT be
// present. This field MUST NOT be present if the timestamp field is not
// present. Type 3 chunks MUST NOT have this field.
// adobe changed for Type3 chunk:
// FMLE always sendout the extended-timestamp,
// must send the extended-timestamp to FMS,
// must send the extended-timestamp to flash-player.
// @see: ngx_rtmp_prepare_message
// @see: http://blog.csdn.net/win_lin/article/details/13363699
// TODO: FIXME: extract to outer.
p = mic_etime;
if (mic_etime_present) {
pp = (char*)&timestamp;
*p++ = pp[3];
*p++ = pp[2];
*p++ = pp[1];
*p++ = pp[0];
}
// dumps all ovs
iovec* shared = ptr->iovs;
iovec* iov = iovs;
// dump the c0 chunk
// cid
iov->iov_len = shared->iov_len;
iov->iov_base = shared->iov_base;
iov++; shared++;
// time, 3B
iov->iov_base = mic_c0_time;
iov->iov_len = 3;
iov++;
// size, type
iov->iov_len = shared->iov_len;
iov->iov_base = shared->iov_base;
iov++; shared++;
// sid, 4B
iov->iov_base = mic_c0_sid;
iov->iov_len = 4;
iov++;
// etime, 4B
if (mic_etime_present) {
// etime
iov->iov_base = mic_etime;
iov->iov_len = 4;
iov++;
}
// chunk
iov->iov_len = shared->iov_len;
iov->iov_base = shared->iov_base;
iov++; shared++;
// dump left c3 chunks
for (int i = 1; i < ptr->nb_chunks; i++) {
// cid
iov->iov_len = shared->iov_len;
iov->iov_base = shared->iov_base;
iov++; shared++;
if (mic_etime_present) {
// etime
iov->iov_base = mic_etime;
iov->iov_len = 4;
iov++;
}
// chunk
iov->iov_len = shared->iov_len;
iov->iov_base = shared->iov_base;
iov++; shared++;
}
return nb_iovs + ptr->nb_iovs;
}
#endif
SrsProtocol::AckWindowSize::AckWindowSize() SrsProtocol::AckWindowSize::AckWindowSize()
{ {
ack_window_size = 0; ack_window_size = 0;
@ -793,10 +549,8 @@ SrsProtocol::SrsProtocol(ISrsProtocolReaderWriter* io)
// each chunk consumers atleast 2 iovs // each chunk consumers atleast 2 iovs
srs_assert(nb_out_iovs >= 2); srs_assert(nb_out_iovs >= 2);
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
warned_c0c3_cache_dry = false; warned_c0c3_cache_dry = false;
auto_response_when_recv = true; auto_response_when_recv = true;
#endif
cs_cache = NULL; cs_cache = NULL;
if (SRS_PERF_CHUNK_STREAM_CACHE > 0) { if (SRS_PERF_CHUNK_STREAM_CACHE > 0) {
@ -1004,7 +758,6 @@ int SrsProtocol::do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
int iov_index = 0; int iov_index = 0;
iovec* iov = out_iovs + iov_index; iovec* iov = out_iovs + iov_index;
@ -1105,51 +858,6 @@ int SrsProtocol::do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs)
nb_msgs, iov_index, SRS_PERF_MW_MSGS, nb_out_iovs); nb_msgs, iov_index, SRS_PERF_MW_MSGS, nb_out_iovs);
return do_iovs_send(out_iovs, iov_index); return do_iovs_send(out_iovs, iov_index);
#else
// send all iovs for all msgs.
int msg_sent = 0;
while (msg_sent < nb_msgs) {
int iov_index = 0;
for (int i = msg_sent; i < nb_msgs; i++) {
SrsSharedPtrMessage* msg = msgs[i];
// evaluate the first
if (i == 0 && (ret = msg->mic_evaluate(out_chunk_size)) != ERROR_SUCCESS) {
return ret;
}
// dump msg to iovec.
int ok_iovs = msg->mic_iovs_dump(
out_iovs + iov_index, nb_out_iovs - iov_index
);
// protocol iovs cache exceed.
if (ok_iovs <= 0) {
break;
}
// ok, dump next.
msg_sent++;
iov_index += ok_iovs;
}
srs_info("mic nb_iovs=%d, msgs=%d, msg_sent=%d, iovs_sent=%d",
nb_out_iovs, nb_msgs, msg_sent, iov_index);
// cache not enough.
if (iov_index <= 0) {
ret = ERROR_RTMP_MIC_CACHE_OVERFLOW;
srs_warn("mic iovs overflow, nb_iovs=%d, msgs=%d, msg_sent=%d, iovs_sent=%d, ret=%d",
nb_out_iovs, nb_msgs, msg_sent, iov_index, ret);
return ret;
}
// send out these iovs.
if ((ret = do_iovs_send(out_iovs, iov_index)) != ERROR_SUCCESS) {
return ret;
}
}
return ret;
#endif
} }
int SrsProtocol::do_iovs_send(iovec* iovs, int size) int SrsProtocol::do_iovs_send(iovec* iovs, int size)

View file

@ -264,73 +264,11 @@ private:
int size; int size;
// the reference count // the reference count
int shared_count; int shared_count;
public:
// the iovs cache in shared ptr message.
// @see https://github.com/winlinvip/simple-rtmp-server/issues/251
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
/**
* the mic(msg iovs cache).
* why share the cache in msg?
* all msgs of a source are same for:
* 1. cid, all use the same cid, copy from src msg.
* 2. size, all msg size never changed.
* 3. type, type never changed.
* 4. chunk size, all connections in a vhost use the same chunk size.
* the different:
* 1. time and etime, almost different.
* 2. stream id, maybe different, but almost the same.
* @remark, when reload change the chunk size, clients will be disconnected.
*/
// the c0 shared section for all msgs
// 1. cid, 1B, same.
// 2. [*]time, 3B, not same.
// 3. size, 3B, same.
// 4. type, 1B, same.
// 5. [*]stream id, 4B, not same, little-endian.
// 6. [*]etime, 4B, not same.
// the stared field must be calced in each msg.
char mic_c0[16];
// the c3 headers.
char mic_c3;
// the calced iovs for all msg,
// we assumpt that the chunk size is not changed for a vhost,
// if do changed, the client will got an error msg and disconnect.
iovec* iovs;
int nb_iovs;
// the msgs source chunk size,
// which is evaluated the iovs first time,
// this cannot be changed.
int chunk_size;
// the number of chunks.
int nb_chunks;
#endif
public: public:
__SrsSharedPtr(); __SrsSharedPtr();
virtual ~__SrsSharedPtr(); virtual ~__SrsSharedPtr();
public:
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
/**
* for iovs msg cache, calc the iovs.
* @param chunk_size use the specified chunk size to evaluate the iovs.
*/
virtual int mic_evaluate(int chunk_size);
#endif
}; };
__SrsSharedPtr* ptr; __SrsSharedPtr* ptr;
private:
// msgs level cache.
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
// the c0 private section for this
// 1. time, 3B, not same, not used.
// 2. stream id, 4B, almost the same, little-endian.
// 3. etime, 4B, optional, always same for all chunk when present.
// the stared field must be calced in each msg.
char mic_c0_time[3];
char mic_c0_sid[4];
char mic_etime[4];
// whether etime present.
bool mic_etime_present;
#endif
public: public:
SrsSharedPtrMessage(); SrsSharedPtrMessage();
virtual ~SrsSharedPtrMessage(); virtual ~SrsSharedPtrMessage();
@ -366,32 +304,17 @@ public:
virtual bool is_audio(); virtual bool is_audio();
virtual bool is_video(); virtual bool is_video();
public: public:
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
/** /**
* generate the chunk header to cache. * generate the chunk header to cache.
* @return the size of header. * @return the size of header.
*/ */
virtual int chunk_header(char* cache, int nb_cache, bool c0); virtual int chunk_header(char* cache, int nb_cache, bool c0);
#endif
public: public:
/** /**
* copy current shared ptr message, use ref-count. * copy current shared ptr message, use ref-count.
* @remark, assert object is created. * @remark, assert object is created.
*/ */
virtual SrsSharedPtrMessage* copy(); virtual SrsSharedPtrMessage* copy();
public:
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
/**
* for iovs msg cache, calc the iovs.
* @param chunk_size use the specified chunk size to evaluate the iovs.
*/
virtual int mic_evaluate(int chunk_size);
/**
* dump all iovs, the _nb_iovs must equals to mic_iovs_count().
* @return the dumped count. -1 if not enough iovs.
*/
virtual int mic_iovs_dump(iovec* iovs, int max_nb_iovs);
#endif
}; };
/** /**
@ -465,9 +388,6 @@ private:
*/ */
iovec* out_iovs; iovec* out_iovs;
int nb_out_iovs; int nb_out_iovs;
// if use iovs cache in each msg,
// donot use protocol level c0c3 cache.
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
/** /**
* output header cache. * output header cache.
* used for type0, 11bytes(or 15bytes with extended timestamp) header. * used for type0, 11bytes(or 15bytes with extended timestamp) header.
@ -479,7 +399,6 @@ private:
char out_c0c3_caches[SRS_CONSTS_C0C3_HEADERS_MAX]; char out_c0c3_caches[SRS_CONSTS_C0C3_HEADERS_MAX];
// whether warned user to increase the c0c3 header cache. // whether warned user to increase the c0c3 header cache.
bool warned_c0c3_cache_dry; bool warned_c0c3_cache_dry;
#endif
/** /**
* output chunk size, default to 128, set by config. * output chunk size, default to 128, set by config.
*/ */