mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
parent
bbc8038614
commit
46743a859c
@ -217,6 +217,10 @@ times to construct arbitrary AMF sequences.
|
|||||||
Version of the Flash plugin used to run the SWF player. The default
|
Version of the Flash plugin used to run the SWF player. The default
|
||||||
is LNX 9,0,124,2.
|
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
|
@item rtmp_live
|
||||||
Specify that the media is a live stream. No resuming or seeking in
|
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
|
live streams is possible. The default value is @code{any}, which means the
|
||||||
|
@ -76,6 +76,7 @@ typedef struct RTMPContext {
|
|||||||
uint8_t* flv_data; ///< buffer with data for demuxer
|
uint8_t* flv_data; ///< buffer with data for demuxer
|
||||||
int flv_size; ///< current buffer size
|
int flv_size; ///< current buffer size
|
||||||
int flv_off; ///< number of bytes read from current buffer
|
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)
|
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 client_report_size; ///< number of bytes after which client should report to server
|
||||||
uint32_t bytes_read; ///< number of bytes read from 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
|
char* swfurl; ///< url of the swf player
|
||||||
int server_bw; ///< server bandwidth
|
int server_bw; ///< server bandwidth
|
||||||
int client_buffer_time; ///< client buffer time in ms
|
int client_buffer_time; ///< client buffer time in ms
|
||||||
|
int flush_interval; ///< number of packets flushed in the same request (RTMPT only)
|
||||||
} RTMPContext;
|
} RTMPContext;
|
||||||
|
|
||||||
#define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing
|
#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_size = 0;
|
||||||
rt->flv_off = 0;
|
rt->flv_off = 0;
|
||||||
rt->flv_header_bytes = 0;
|
rt->flv_header_bytes = 0;
|
||||||
|
rt->flv_nb_packets++;
|
||||||
}
|
}
|
||||||
} while (buf_temp - buf < size);
|
} 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 */
|
/* set stream into nonblocking mode */
|
||||||
rt->stream->flags |= AVIO_FLAG_NONBLOCK;
|
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_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_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_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"},
|
{"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"},
|
{"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"},
|
{"live", "live stream", 0, AV_OPT_TYPE_CONST, {-1}, 0, 0, DEC, "rtmp_live"},
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 54
|
#define LIBAVFORMAT_VERSION_MAJOR 54
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 4
|
#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, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
LIBAVFORMAT_VERSION_MINOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user