diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2012-06-18 14:55:55 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-06-18 22:00:31 +0300 |
commit | 46743a859ceb6b6bf4f0b1cbe26e5b311ed9eef4 (patch) | |
tree | 0a8b67f97831784fd2a8347287f49d058928b554 | |
parent | bbc8038614df85b608a11baaa2770f0d342d26fc (diff) | |
download | ffmpeg-46743a859ceb6b6bf4f0b1cbe26e5b311ed9eef4.tar.gz |
rtmp: Don't send every flv packet in a separate HTTP request in RTMPT
Add a new option 'rtmp_flush_interval' that allows specifying the
number of packets to write before sending it off as a HTTP request.
This is mostly relevant for RTMPT - for plain RTMP, it only controls
how often we check the socket for incoming packets, which shouldn't
affect the performance in any noticeable way.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | doc/protocols.texi | 4 | ||||
-rw-r--r-- | libavformat/rtmpproto.c | 8 | ||||
-rw-r--r-- | libavformat/version.h | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/doc/protocols.texi b/doc/protocols.texi index 0b4f1b1772..e90d1b4a63 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -217,6 +217,10 @@ times to construct arbitrary AMF sequences. Version of the Flash plugin used to run the SWF player. The default is LNX 9,0,124,2. +@item rtmp_flush_interval +Number of packets flushed in the same request (RTMPT only). The default +is 10. + @item rtmp_live Specify that the media is a live stream. No resuming or seeking in live streams is possible. The default value is @code{any}, which means the diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c index b3e2a30f48..b48274bdd8 100644 --- a/libavformat/rtmpproto.c +++ b/libavformat/rtmpproto.c @@ -76,6 +76,7 @@ typedef struct RTMPContext { uint8_t* flv_data; ///< buffer with data for demuxer int flv_size; ///< current buffer size int flv_off; ///< number of bytes read from current buffer + int flv_nb_packets; ///< number of flv packets published RTMPPacket out_pkt; ///< rtmp packet, created from flv a/v or metadata (for output) uint32_t client_report_size; ///< number of bytes after which client should report to server uint32_t bytes_read; ///< number of bytes read from server @@ -90,6 +91,7 @@ typedef struct RTMPContext { char* swfurl; ///< url of the swf player int server_bw; ///< server bandwidth int client_buffer_time; ///< client buffer time in ms + int flush_interval; ///< number of packets flushed in the same request (RTMPT only) } RTMPContext; #define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing @@ -1361,9 +1363,14 @@ static int rtmp_write(URLContext *s, const uint8_t *buf, int size) rt->flv_size = 0; rt->flv_off = 0; rt->flv_header_bytes = 0; + rt->flv_nb_packets++; } } while (buf_temp - buf < size); + if (rt->flv_nb_packets < rt->flush_interval) + return size; + rt->flv_nb_packets = 0; + /* set stream into nonblocking mode */ rt->stream->flags |= AVIO_FLAG_NONBLOCK; @@ -1404,6 +1411,7 @@ static const AVOption rtmp_options[] = { {"rtmp_buffer", "Set buffer time in milliseconds. The default is 3000.", OFFSET(client_buffer_time), AV_OPT_TYPE_INT, {3000}, 0, INT_MAX, DEC|ENC}, {"rtmp_conn", "Append arbitrary AMF data to the Connect message", OFFSET(conn), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, {"rtmp_flashver", "Version of the Flash plugin used to run the SWF player.", OFFSET(flashver), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, + {"rtmp_flush_interval", "Number of packets flushed in the same request (RTMPT only).", OFFSET(flush_interval), AV_OPT_TYPE_INT, {10}, 0, INT_MAX, ENC}, {"rtmp_live", "Specify that the media is a live stream.", OFFSET(live), AV_OPT_TYPE_INT, {-2}, INT_MIN, INT_MAX, DEC, "rtmp_live"}, {"any", "both", 0, AV_OPT_TYPE_CONST, {-2}, 0, 0, DEC, "rtmp_live"}, {"live", "live stream", 0, AV_OPT_TYPE_CONST, {-1}, 0, 0, DEC, "rtmp_live"}, diff --git a/libavformat/version.h b/libavformat/version.h index e1703319b6..ecb59b893b 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,7 +31,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 54 #define LIBAVFORMAT_VERSION_MINOR 4 -#define LIBAVFORMAT_VERSION_MICRO 1 +#define LIBAVFORMAT_VERSION_MICRO 2 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ |