Module: libav Branch: master Commit: 9d811fd80fbd94a0e44d87cf8ccdab96c2a4af04
Author: Samuel Pitoiset <samuel.pitoi...@gmail.com> Committer: Martin Storsjö <mar...@martin.st> Date: Tue Jun 19 13:21:09 2012 +0200 rtmp: Reduce the number of idle posts sent by sleeping 50ms Rtmpt is effectively half duplex - the server can't return any data unless we send a request (to which the server responds). If we don't have any data to send currently, and the server didn't return any data either, wait a little before doing the next request. This avoids busy looping with idle posts with empty replies, while waiting for more data from the server. Signed-off-by: Martin Storsjö <mar...@martin.st> --- libavformat/rtmphttp.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/libavformat/rtmphttp.c b/libavformat/rtmphttp.c index fdcff50..544b493 100644 --- a/libavformat/rtmphttp.c +++ b/libavformat/rtmphttp.c @@ -24,6 +24,8 @@ * RTMP HTTP protocol */ +#include <unistd.h> + #include "libavutil/avstring.h" #include "libavutil/intfloat.h" #include "libavutil/opt.h" @@ -44,6 +46,7 @@ typedef struct RTMP_HTTPContext { int out_capacity; ///< current output buffer capacity int initialized; ///< flag indicating when the http context is initialized int finishing; ///< flag indicating when the client closes the connection + int nb_bytes_read; ///< number of bytes read since the last request } RTMP_HTTPContext; static int rtmp_http_send_cmd(URLContext *h, const char *cmd) @@ -70,6 +73,9 @@ static int rtmp_http_send_cmd(URLContext *h, const char *cmd) if ((ret = ffurl_read(rt->stream, &c, 1)) < 0) return ret; + /* re-init the number of bytes read */ + rt->nb_bytes_read = 0; + return ret; } @@ -117,6 +123,12 @@ static int rtmp_http_read(URLContext *h, uint8_t *buf, int size) if ((ret = rtmp_http_send_cmd(h, "send")) < 0) return ret; } else { + if (rt->nb_bytes_read == 0) { + /* Wait 50ms before retrying to read a server reply in + * order to reduce the number of idle requets. */ + usleep(50000); + } + if ((ret = rtmp_http_write(h, "", 1)) < 0) return ret; @@ -131,6 +143,7 @@ static int rtmp_http_read(URLContext *h, uint8_t *buf, int size) } else { off += ret; size -= ret; + rt->nb_bytes_read += ret; } } while (off <= 0); _______________________________________________ libav-commits mailing list libav-commits@libav.org https://lists.libav.org/mailman/listinfo/libav-commits