Compare commits

...

4 Commits
v0.17 ... v0.18

Author SHA1 Message Date
Devaev Maxim
f3c56d5774 Bump version: 0.17 → 0.18 2018-10-04 16:03:29 +03:00
Devaev Maxim
9a86793923 Workaround for Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=527446 2018-10-04 15:59:40 +03:00
Devaev Maxim
93c6248fdb better msg 2018-10-04 11:35:18 +03:00
Devaev Maxim
ec738b18dc fps -> cps 2018-10-04 09:20:36 +03:00
7 changed files with 35 additions and 21 deletions

View File

@@ -1,7 +1,7 @@
[bumpversion] [bumpversion]
commit = True commit = True
tag = True tag = True
current_version = 0.17 current_version = 0.18
parse = (?P<major>\d+)\.(?P<minor>\d+)(\.(?P<patch>\d+)(\-(?P<release>[a-z]+))?)? parse = (?P<major>\d+)\.(?P<minor>\d+)(\.(?P<patch>\d+)(\-(?P<release>[a-z]+))?)?
serialize = serialize =
{major}.{minor} {major}.{minor}

View File

@@ -3,7 +3,7 @@
pkgname=ustreamer pkgname=ustreamer
pkgver=0.17 pkgver=0.18
pkgrel=1 pkgrel=1
pkgdesc="Lightweight and fast MJPG-HTTP streamer" pkgdesc="Lightweight and fast MJPG-HTTP streamer"
url="https://github.com/pi-kvm/ustreamer" url="https://github.com/pi-kvm/ustreamer"

View File

@@ -21,4 +21,4 @@
#pragma once #pragma once
#define VERSION "0.17" #define VERSION "0.18"

View File

@@ -174,12 +174,12 @@ static void _http_callback_ping(struct evhttp_request *request, void *v_server)
assert(evbuffer_add_printf(buf, assert(evbuffer_add_printf(buf,
"{\"stream\": {\"resolution\":" "{\"stream\": {\"resolution\":"
" {\"width\": %u, \"height\": %u}," " {\"width\": %u, \"height\": %u},"
" \"fps\": %u, \"eps\": %u," " \"cps\": %u, \"eps\": %u,"
" \"online\": %s, \"clients\": %u}}", " \"online\": %s, \"clients\": %u}}",
(server->fake_width ? server->fake_width : server->run->exposed->width), (server->fake_width ? server->fake_width : server->run->exposed->width),
(server->fake_height ? server->fake_height : server->run->exposed->height), (server->fake_height ? server->fake_height : server->run->exposed->height),
server->run->exposed->fps, // frame per second (capturing) server->run->exposed->cps, // Captured per second
server->run->exposed->eps, // expose per second (server) server->run->exposed->eps, // Exposed per second (server)
(server->run->exposed->online ? "true" : "false"), (server->run->exposed->online ? "true" : "false"),
server->run->stream_clients_count server->run->stream_clients_count
)); ));
@@ -441,6 +441,20 @@ static void _http_exposed_refresh(UNUSED int fd, UNUSED short what, void *v_serv
} }
eps += 1; eps += 1;
if (server->drop_same_frames) {
// Хром всегда показывает не новый пришедший фрейм, а предыдущий.
// При updated == false нужно еще один раз послать предыдущий фрейм
// https://bugs.chromium.org/p/chromium/issues/detail?id=527446
static bool updated_prev = false;
bool updated_orig = updated;
if (updated_prev && !updated_orig) {
updated = true;
}
updated_prev = updated_orig;
}
_http_queue_send_stream(server, updated); _http_queue_send_stream(server, updated);
} }
@@ -453,7 +467,7 @@ static bool _expose_new_picture(struct http_server_t *server) {
# define EXPOSED(_next) server->run->exposed->_next # define EXPOSED(_next) server->run->exposed->_next
assert(STREAM(picture.size) > 0); assert(STREAM(picture.size) > 0);
EXPOSED(fps) = STREAM(fps); EXPOSED(cps) = STREAM(cps);
EXPOSED(expose_begin_time) = get_now_monotonic(); EXPOSED(expose_begin_time) = get_now_monotonic();
# define MEM_STREAM_TO_EXPOSED \ # define MEM_STREAM_TO_EXPOSED \
@@ -536,7 +550,7 @@ static bool _expose_blank_picture(struct http_server_t *server) {
EXPOSED(width) = BLANK_JPG_WIDTH; EXPOSED(width) = BLANK_JPG_WIDTH;
EXPOSED(height) = BLANK_JPG_HEIGHT; EXPOSED(height) = BLANK_JPG_HEIGHT;
EXPOSED(fps) = 0; EXPOSED(cps) = 0;
EXPOSED(online) = false; EXPOSED(online) = false;
goto updated; goto updated;
} }

View File

@@ -42,10 +42,10 @@ struct exposed_t {
struct picture_t picture; struct picture_t picture;
unsigned width; unsigned width;
unsigned height; unsigned height;
unsigned fps; unsigned cps; // Captured per second
unsigned eps; // Exposed per second
bool online; bool online;
unsigned dropped; unsigned dropped;
unsigned eps;
long double expose_begin_time; long double expose_begin_time;
long double expose_cmp_time; long double expose_cmp_time;
long double expose_end_time; long double expose_end_time;

View File

@@ -85,8 +85,8 @@ void stream_loop(struct stream_t *stream) {
unsigned frames_count = 0; unsigned frames_count = 0;
long double grab_after = 0; long double grab_after = 0;
unsigned fluency_passed = 0; unsigned fluency_passed = 0;
unsigned fps = 0; unsigned cps = 0; // Captured per second
long long fps_second = 0; long long cps_second = 0;
LOG_DEBUG("Allocation memory for stream picture ..."); LOG_DEBUG("Allocation memory for stream picture ...");
A_CALLOC(stream->picture.data, stream->dev->run->max_picture_size); A_CALLOC(stream->picture.data, stream->dev->run->max_picture_size);
@@ -111,7 +111,7 @@ void stream_loop(struct stream_t *stream) {
free_worker_number = oldest_worker->ctx.number; free_worker_number = oldest_worker->ctx.number;
oldest_worker = oldest_worker->order_next; oldest_worker = oldest_worker->order_next;
LOG_PERF("##### ACCEPT : %u", free_worker_number); LOG_PERF("##### Raw frame accepted; worker = %u", free_worker_number);
} else { } else {
for (unsigned number = 0; number < stream->dev->run->n_workers; ++number) { for (unsigned number = 0; number < stream->dev->run->n_workers; ++number) {
if (!pool.workers[number].has_job && (free_worker_number == -1 if (!pool.workers[number].has_job && (free_worker_number == -1
@@ -125,7 +125,7 @@ void stream_loop(struct stream_t *stream) {
assert(free_worker_number >= 0); assert(free_worker_number >= 0);
assert(!pool.workers[free_worker_number].has_job); assert(!pool.workers[free_worker_number].has_job);
LOG_PERF("----- DROP : %u", free_worker_number); LOG_PERF("----- Raw frame dropped; worker = %u", free_worker_number);
} }
if (stream->dev->stop) { if (stream->dev->stop) {
@@ -197,13 +197,13 @@ void stream_loop(struct stream_t *stream) {
} }
fluency_passed = 0; fluency_passed = 0;
if (now_second != fps_second) { if (now_second != cps_second) {
LOG_PERF("Oldest worker complete, encoding FPS = %u", fps); LOG_PERF("Oldest worker complete, CPS = %u", cps);
stream->fps = fps; stream->cps = cps;
fps = 0; cps = 0;
fps_second = now_second; cps_second = now_second;
} }
fps += 1; cps += 1;
long double fluency_delay = _stream_get_fluency_delay(stream->dev, &pool); long double fluency_delay = _stream_get_fluency_delay(stream->dev, &pool);

View File

@@ -86,7 +86,7 @@ struct stream_t {
struct picture_t picture; struct picture_t picture;
unsigned width; unsigned width;
unsigned height; unsigned height;
unsigned fps; unsigned cps; // Captured per second
bool updated; bool updated;
pthread_mutex_t mutex; pthread_mutex_t mutex;
struct device_t *dev; struct device_t *dev;