summaryrefslogtreecommitdiff
path: root/ffserver.c
diff options
context:
space:
mode:
authorGiancarlo Formicuccia <ilsensine@inwind.it>2003-06-29 01:25:41 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-06-29 01:25:41 +0000
commit94d9ad5f80e85af0cead5b6c6b2efdb7d947ca4f (patch)
tree69bbb1abeaa87d802121f4cc18eac9ce9fdd5de0 /ffserver.c
parenta4adb60858f1fa0b35b08576ea34e531f0f83459 (diff)
*** fix for read()
Reading 1-char per read() is the less intrusive way to fix the behaviour I observed. Not a nice fix, but the client requests shouldn't steal so much bandwidth *** fix for find_rtp_session_with_url. Note that mplayer send one PLAY request per stream, I don't know if this should be handled more gracefully patch by (Giancarlo Formicuccia <ilsensine at inwind dot it>) Originally committed as revision 1998 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'ffserver.c')
-rw-r--r--ffserver.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/ffserver.c b/ffserver.c
index 265e3ac579..d8cbef5331 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -786,14 +786,14 @@ static int handle_connection(HTTPContext *c)
if (!(c->poll_entry->revents & POLLIN))
return 0;
/* read the data */
- len = read(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr);
+ len = read(c->fd, c->buffer_ptr, 1);
if (len < 0) {
if (errno != EAGAIN && errno != EINTR)
return -1;
} else if (len == 0) {
return -1;
} else {
- /* search for end of request. XXX: not fully correct since garbage could come after the end */
+ /* search for end of request. */
uint8_t *ptr;
c->buffer_ptr += len;
ptr = c->buffer_ptr;
@@ -2973,6 +2973,8 @@ static HTTPContext *find_rtp_session_with_url(const char *url,
HTTPContext *rtp_c;
char path1[1024];
const char *path;
+ char buf[1024];
+ int s;
rtp_c = find_rtp_session(session_id);
if (!rtp_c)
@@ -2983,9 +2985,16 @@ static HTTPContext *find_rtp_session_with_url(const char *url,
path = path1;
if (*path == '/')
path++;
- if (strcmp(path, rtp_c->stream->filename) != 0)
- return NULL;
- return rtp_c;
+ if(!strcmp(path, rtp_c->stream->filename)) return rtp_c;
+ for(s=0; s<rtp_c->stream->nb_streams; ++s) {
+ snprintf(buf, sizeof(buf), "%s/streamid=%d",
+ rtp_c->stream->filename, s);
+ if(!strncmp(path, buf, sizeof(buf))) {
+ // XXX: Should we reply with RTSP_STATUS_ONLY_AGGREGATE if nb_streams>1?
+ return rtp_c;
+ }
+ }
+ return NULL;
}
static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPHeader *h)