refine the consumer, use srs message queue to shrink message when overflow.

pull/133/head
winlin 11 years ago
parent b4093bfbe4
commit c47f07c69a

@ -93,7 +93,7 @@ vhost __defaultVhost__ {
vhost dev {
enabled on;
gop_cache on;
queue_length 30;
queue_length 10;
#forward 127.0.0.1:19350;
hls {
enabled off;

@ -1303,7 +1303,7 @@ double SrsConfig::get_queue_length(string vhost)
}
conf = conf->get("queue_length");
if (conf || conf->arg0().empty()) {
if (!conf || conf->arg0().empty()) {
return SRS_CONF_DEFAULT_QUEUE_LENGTH;
}

@ -172,12 +172,19 @@ int SrsMessageQueue::get_packets(int max_count, SrsSharedPtrMessage**& pmsgs, in
count = srs_min(max_count, (int)msgs.size());
}
if (count <= 0) {
return ret;
}
pmsgs = new SrsSharedPtrMessage*[count];
for (int i = 0; i < count; i++) {
pmsgs[i] = msgs[i];
}
SrsSharedPtrMessage* last = msgs[count - 1];
av_start_time = last->header.timestamp;
if (count == (int)msgs.size()) {
msgs.clear();
} else {
@ -217,15 +224,15 @@ void SrsMessageQueue::shrink()
return;
}
srs_trace("shrink the cache queue, size=%d, removed=%d, max=%.2f",
(int)msgs.size(), iframe_index, queue_size_ms / 1000.0);
// remove the first gop from the front
for (int i = 0; i < iframe_index; i++) {
SrsSharedPtrMessage* msg = msgs[i];
srs_freep(msg);
}
msgs.erase(msgs.begin(), msgs.begin() + iframe_index);
srs_trace("shrink the cache queue, "
"size=%d, removed=%d", (int)msgs.size(), iframe_index);
}
void SrsMessageQueue::clear()
@ -893,9 +900,12 @@ void SrsSource::on_unpublish()
{
int ret = ERROR_SUCCESS;
double queue_size = config->get_queue_length(req->vhost);
consumer = new SrsConsumer(this);
consumer->set_queue_size(config->get_queue_length(req->vhost));
consumers.push_back(consumer);
consumer->set_queue_size(queue_size);
if (cache_metadata && (ret = consumer->enqueue(cache_metadata->copy(), sample_rate, frame_rate)) != ERROR_SUCCESS) {
srs_error("dispatch metadata failed. ret=%d", ret);
@ -919,6 +929,8 @@ void SrsSource::on_unpublish()
return ret;
}
srs_trace("create consumer, queue_size=%.2f, tba=%d, tbv=%d", queue_size, sample_rate, frame_rate);
return ret;
}

Loading…
Cancel
Save