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:
parent
149d5863e9
commit
7150a99f41
7 changed files with 2 additions and 452 deletions
|
@ -822,10 +822,6 @@ SrsSource::SrsSource(SrsRequest* req)
|
|||
|
||||
_srs_config->subscribe(this);
|
||||
atc = _srs_config->get_atc(_req->vhost);
|
||||
|
||||
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
chunk_size = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
SrsSource::~SrsSource()
|
||||
|
@ -1052,26 +1048,6 @@ int SrsSource::on_reload_vhost_dvr(string vhost)
|
|||
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 ret = ERROR_SUCCESS;
|
||||
|
@ -1301,14 +1277,6 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata
|
|||
}
|
||||
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
|
||||
if (true) {
|
||||
std::vector<SrsConsumer*>::iterator it;
|
||||
|
@ -1350,14 +1318,6 @@ int SrsSource::on_audio(SrsCommonMessage* __audio)
|
|||
}
|
||||
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
|
||||
if ((ret = hls->on_audio(&msg)) != ERROR_SUCCESS) {
|
||||
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.");
|
||||
|
||||
#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
|
||||
if ((ret = hls->on_video(&msg)) != ERROR_SUCCESS) {
|
||||
srs_warn("hls process video message failed, ignore and disable hls. ret=%d", ret);
|
||||
|
@ -1727,11 +1679,6 @@ int SrsSource::on_publish()
|
|||
return ret;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
|
|
|
@ -403,11 +403,6 @@ private:
|
|||
std::vector<SrsForwarder*> forwarders;
|
||||
// for aggregate message
|
||||
SrsStream* aggregate_stream;
|
||||
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
// the chunk size for mic,
|
||||
// update when publish stream.
|
||||
int chunk_size;
|
||||
#endif
|
||||
private:
|
||||
/**
|
||||
* 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_hls(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);
|
||||
// for the tools callback
|
||||
public:
|
||||
|
|
|
@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
// current release version
|
||||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 67
|
||||
#define VERSION_REVISION 68
|
||||
// server info.
|
||||
#define RTMP_SIG_SRS_KEY "SRS"
|
||||
#define RTMP_SIG_SRS_ROLE "origin/edge server"
|
||||
|
|
|
@ -97,25 +97,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
// the default config of mw.
|
||||
#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.
|
||||
* for play clients to get msgs then totally send out.
|
||||
* for the mw sleep set to 1800, the msgs is about 133.
|
||||
* @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
|
||||
#else
|
||||
#define SRS_PERF_MW_MSGS 512
|
||||
#endif
|
||||
#define SRS_PERF_MW_MSGS 128
|
||||
|
||||
/**
|
||||
* whether set the socket send buffer size.
|
||||
|
|
|
@ -149,11 +149,6 @@ void show_macro_features()
|
|||
#endif
|
||||
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);
|
||||
|
||||
#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()
|
||||
|
|
|
@ -387,109 +387,16 @@ SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
|||
payload = NULL;
|
||||
size = 0;
|
||||
shared_count = 0;
|
||||
|
||||
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
nb_iovs = 0;
|
||||
iovs = NULL;
|
||||
chunk_size = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
|
||||
{
|
||||
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()
|
||||
{
|
||||
ptr = NULL;
|
||||
|
||||
#ifdef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
mic_etime_present = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
SrsSharedPtrMessage::~SrsSharedPtrMessage()
|
||||
|
@ -592,7 +499,6 @@ bool SrsSharedPtrMessage::is_video()
|
|||
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)
|
||||
{
|
||||
if (c0) {
|
||||
|
@ -606,7 +512,6 @@ int SrsSharedPtrMessage::chunk_header(char* cache, int nb_cache, bool c0)
|
|||
cache, nb_cache);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
|
||||
{
|
||||
|
@ -625,155 +530,6 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::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*)×tamp;
|
||||
*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*)×tamp;
|
||||
*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()
|
||||
{
|
||||
ack_window_size = 0;
|
||||
|
@ -793,10 +549,8 @@ SrsProtocol::SrsProtocol(ISrsProtocolReaderWriter* io)
|
|||
// each chunk consumers atleast 2 iovs
|
||||
srs_assert(nb_out_iovs >= 2);
|
||||
|
||||
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
warned_c0c3_cache_dry = false;
|
||||
auto_response_when_recv = true;
|
||||
#endif
|
||||
|
||||
cs_cache = NULL;
|
||||
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;
|
||||
|
||||
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
int iov_index = 0;
|
||||
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);
|
||||
|
||||
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)
|
||||
|
|
|
@ -264,73 +264,11 @@ private:
|
|||
int size;
|
||||
// the reference 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:
|
||||
__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;
|
||||
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:
|
||||
SrsSharedPtrMessage();
|
||||
virtual ~SrsSharedPtrMessage();
|
||||
|
@ -366,32 +304,17 @@ public:
|
|||
virtual bool is_audio();
|
||||
virtual bool is_video();
|
||||
public:
|
||||
#ifndef SRS_PERF_MW_MSG_IOVS_CACHE
|
||||
/**
|
||||
* generate the chunk header to cache.
|
||||
* @return the size of header.
|
||||
*/
|
||||
virtual int chunk_header(char* cache, int nb_cache, bool c0);
|
||||
#endif
|
||||
public:
|
||||
/**
|
||||
* copy current shared ptr message, use ref-count.
|
||||
* @remark, assert object is created.
|
||||
*/
|
||||
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;
|
||||
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.
|
||||
* used for type0, 11bytes(or 15bytes with extended timestamp) header.
|
||||
|
@ -479,7 +399,6 @@ private:
|
|||
char out_c0c3_caches[SRS_CONSTS_C0C3_HEADERS_MAX];
|
||||
// whether warned user to increase the c0c3 header cache.
|
||||
bool warned_c0c3_cache_dry;
|
||||
#endif
|
||||
/**
|
||||
* output chunk size, default to 128, set by config.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue