[FFmpeg-cvslog] rtmp: Reduce the number of idle posts sent by sleeping 50ms

Samuel Pitoiset git at videolan.org
Wed Jun 20 21:25:28 CEST 2012


ffmpeg | branch: master | Samuel Pitoiset <samuel.pitoiset at gmail.com> | Tue Jun 19 13:21:09 2012 +0200| [9d811fd80fbd94a0e44d87cf8ccdab96c2a4af04] | committer: Martin Storsjö

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ö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9d811fd80fbd94a0e44d87cf8ccdab96c2a4af04
---

 libavformat/rtmphttp.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

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);
 



More information about the ffmpeg-cvslog mailing list