When reading a stream, should retry on EAGAIN instead of just failing. Also,
authorHoward Chu <hyc@highlandsun.com>
Wed, 16 Jun 2010 01:12:26 +0000 (01:12 +0000)
committerHoward Chu <hyc@highlandsun.com>
Wed, 16 Jun 2010 01:12:26 +0000 (01:12 +0000)
when reading a live feed, should retry regardless of whether any client has
opened the stream.

Originally committed as revision 23621 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffserver.c

index 77340af..31d0268 100644 (file)
@@ -2306,12 +2306,16 @@ static int http_prepare_data(HTTPContext *c)
         else {
             AVPacket pkt;
         redo:
-            if (av_read_frame(c->fmt_in, &pkt) < 0) {
-                if (c->stream->feed && c->stream->feed->feed_opened) {
+            ret = av_read_frame(c->fmt_in, &pkt);
+            if (ret < 0) {
+                if (c->stream->feed) {
                     /* if coming from feed, it means we reached the end of the
                        ffm file, so must wait for more data */
                     c->state = HTTPSTATE_WAIT_FEED;
                     return 1; /* state changed */
+                } else if (ret == AVERROR(EAGAIN)) {
+                    /* input not ready, come back later */
+                    return 0;
                 } else {
                     if (c->stream->loop) {
                         av_close_input_file(c->fmt_in);