summaryrefslogtreecommitdiff
path: root/libavformat/rtmphttp.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-06-20 20:47:46 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-06-20 20:47:46 +0200
commit4da42ebe4486f2960d64135395b1a9ef705d9429 (patch)
tree5e405819aa070d6313851ea324ffaf475523d02f /libavformat/rtmphttp.c
parente632a430fe03dace7380c11e2bd62ea418e63abc (diff)
parent005c80b645cc6ab5f30cbc3e10ab66a15dfd107e (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: MS Screen 1 decoder aacdec: Fix popping channel layouts. av_gettime: support Win32 without gettimeofday() Use av_gettime() in various places Move av_gettime() to libavutil dct-test: use emms_c() from libavutil instead of duplicating it mov: fix operator precedence bug mathematics.h: remove a couple of math defines Remove unnecessary inclusions of [sys/]time.h lavf: remove unnecessary inclusions of unistd.h bfin: libswscale: add const where appropriate to fix warnings bfin: libswscale: remove unnecessary #includes udp: Properly check for invalid sockets tcp: Check the return value from getsockopt network: Use av_strerror for getting error messages udp: Properly print error from getnameinfo mmst: Use AVUNERROR() to convert error codes to the right range for strerror network: Pass pointers of the right type to get/setsockopt/ioctlsocket on windows rtmp: Reduce the number of idle posts sent by sleeping 50ms Conflicts: Changelog configure libavcodec/aacdec.c libavcodec/allcodecs.c libavcodec/avcodec.h libavcodec/dct-test.c libavcodec/version.h libavformat/riff.c libavformat/udp.c libavutil/Makefile libswscale/bfin/yuv2rgb_bfin.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/rtmphttp.c')
-rw-r--r--libavformat/rtmphttp.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavformat/rtmphttp.c b/libavformat/rtmphttp.c
index c431d28853..5eb5007eb0 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);