mirror of https://git.ffmpeg.org/ffmpeg.git
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@martin.st>
This commit is contained in:
parent
4cc2920dd2
commit
9d811fd80f
|
@ -24,6 +24,8 @@
|
||||||
* RTMP HTTP protocol
|
* RTMP HTTP protocol
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/intfloat.h"
|
#include "libavutil/intfloat.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
|
@ -44,6 +46,7 @@ typedef struct RTMP_HTTPContext {
|
||||||
int out_capacity; ///< current output buffer capacity
|
int out_capacity; ///< current output buffer capacity
|
||||||
int initialized; ///< flag indicating when the http context is initialized
|
int initialized; ///< flag indicating when the http context is initialized
|
||||||
int finishing; ///< flag indicating when the client closes the connection
|
int finishing; ///< flag indicating when the client closes the connection
|
||||||
|
int nb_bytes_read; ///< number of bytes read since the last request
|
||||||
} RTMP_HTTPContext;
|
} RTMP_HTTPContext;
|
||||||
|
|
||||||
static int rtmp_http_send_cmd(URLContext *h, const char *cmd)
|
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)
|
if ((ret = ffurl_read(rt->stream, &c, 1)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
/* re-init the number of bytes read */
|
||||||
|
rt->nb_bytes_read = 0;
|
||||||
|
|
||||||
return ret;
|
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)
|
if ((ret = rtmp_http_send_cmd(h, "send")) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} 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)
|
if ((ret = rtmp_http_write(h, "", 1)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -131,6 +143,7 @@ static int rtmp_http_read(URLContext *h, uint8_t *buf, int size)
|
||||||
} else {
|
} else {
|
||||||
off += ret;
|
off += ret;
|
||||||
size -= ret;
|
size -= ret;
|
||||||
|
rt->nb_bytes_read += ret;
|
||||||
}
|
}
|
||||||
} while (off <= 0);
|
} while (off <= 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue