aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaligula useraccount <caligula@sarijopen.student.utwente.nl>2015-06-08 03:32:29 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-06-08 03:36:22 +0200
commit3b89a673155fa3863e13f3595d651f37b024e6c5 (patch)
treef373843ff5fbf59caff9c9ea8279857374557a05
parent51ac1f616f5863c7bd32e04496339b7c2d27880f (diff)
downloadffmpeg-3b89a673155fa3863e13f3595d651f37b024e6c5.tar.gz
ffserver: Use singlejpeg muxer for jpeg
Fixes Ticket4218 Based on patch by: Otávio Ribeiro Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--ffserver.c4
-rw-r--r--ffserver_config.c6
-rw-r--r--ffserver_config.h1
3 files changed, 9 insertions, 2 deletions
diff --git a/ffserver.c b/ffserver.c
index 3cb29e4726..2b19bba9ba 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -967,6 +967,10 @@ static int handle_connection(HTTPContext *c)
/* close connection if trailer sent */
if (c->state == HTTPSTATE_SEND_DATA_TRAILER)
return -1;
+ /* Check if it is a single jpeg frame 123 */
+ if (c->stream->single_frame && c->data_count > c->cur_frame_bytes && c->cur_frame_bytes > 0) {
+ close_connection(c);
+ }
break;
case HTTPSTATE_RECEIVE_DATA:
/* no need to read if no events */
diff --git a/ffserver_config.c b/ffserver_config.c
index 017af48434..06bd8ac44a 100644
--- a/ffserver_config.c
+++ b/ffserver_config.c
@@ -862,8 +862,10 @@ static int ffserver_parse_config_stream(FFServerConfig *config, const char *cmd,
} else {
stream->stream_type = STREAM_TYPE_LIVE;
/* JPEG cannot be used here, so use single frame MJPEG */
- if (!strcmp(arg, "jpeg"))
- strcpy(arg, "mjpeg");
+ if (!strcmp(arg, "jpeg")) {
+ strcpy(arg, "singlejpeg");
+ stream->single_frame=1;
+ }
stream->fmt = ffserver_guess_format(arg, NULL, NULL);
if (!stream->fmt)
ERROR("Unknown Format: '%s'\n", arg);
diff --git a/ffserver_config.h b/ffserver_config.h
index bdeb3c990a..1b121946c1 100644
--- a/ffserver_config.h
+++ b/ffserver_config.h
@@ -79,6 +79,7 @@ typedef struct FFServerStream {
int multicast_port; /* first port used for multicast */
int multicast_ttl;
int loop; /* if true, send the stream in loops (only meaningful if file) */
+ char single_frame; /* only single frame */
/* feed specific */
int feed_opened; /* true if someone is writing to the feed */