Commit 9477c035 authored by Samuel Pitoiset's avatar Samuel Pitoiset Committed by Martin Storsjö

rtmp: Set the client buffer time to 3s instead of 0.26s

This factorizes existing code into a new function gen_buffer_time(),
which generates the client buffer time message and sends it to the
server.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent c2d38bea
...@@ -89,6 +89,7 @@ typedef struct RTMPContext { ...@@ -89,6 +89,7 @@ typedef struct RTMPContext {
char* flashver; ///< version of the flash plugin char* flashver; ///< version of the flash plugin
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
} 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
...@@ -407,6 +408,31 @@ static int gen_delete_stream(URLContext *s, RTMPContext *rt) ...@@ -407,6 +408,31 @@ static int gen_delete_stream(URLContext *s, RTMPContext *rt)
return ret; return ret;
} }
/**
* Generate client buffer time and send it to the server.
*/
static int gen_buffer_time(URLContext *s, RTMPContext *rt)
{
RTMPPacket pkt;
uint8_t *p;
int ret;
if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_PING,
1, 10)) < 0)
return ret;
p = pkt.data;
bytestream_put_be16(&p, 3);
bytestream_put_be32(&p, rt->main_channel_id);
bytestream_put_be32(&p, rt->client_buffer_time);
ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->chunk_size,
rt->prev_pkt[1]);
ff_rtmp_packet_destroy(&pkt);
return ret;
}
/** /**
* Generate 'play' call and send it to the server, then ping the server * Generate 'play' call and send it to the server, then ping the server
* to start actual playing. * to start actual playing.
...@@ -436,23 +462,6 @@ static int gen_play(URLContext *s, RTMPContext *rt) ...@@ -436,23 +462,6 @@ static int gen_play(URLContext *s, RTMPContext *rt)
rt->prev_pkt[1]); rt->prev_pkt[1]);
ff_rtmp_packet_destroy(&pkt); ff_rtmp_packet_destroy(&pkt);
if (ret < 0)
return ret;
// set client buffer time disguised in ping packet
if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_PING,
1, 10)) < 0)
return ret;
p = pkt.data;
bytestream_put_be16(&p, 3);
bytestream_put_be32(&p, 1);
bytestream_put_be32(&p, 256); //TODO: what is a good value here?
ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->chunk_size,
rt->prev_pkt[1]);
ff_rtmp_packet_destroy(&pkt);
return ret; return ret;
} }
...@@ -910,6 +919,8 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt) ...@@ -910,6 +919,8 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt)
if (rt->is_input) { if (rt->is_input) {
if ((ret = gen_play(s, rt)) < 0) if ((ret = gen_play(s, rt)) < 0)
return ret; return ret;
if ((ret = gen_buffer_time(s, rt)) < 0)
return ret;
} else { } else {
if ((ret = gen_publish(s, rt)) < 0) if ((ret = gen_publish(s, rt)) < 0)
return ret; return ret;
...@@ -1208,6 +1219,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags) ...@@ -1208,6 +1219,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
rt->bytes_read = 0; rt->bytes_read = 0;
rt->last_bytes_read = 0; rt->last_bytes_read = 0;
rt->server_bw = 2500000; rt->server_bw = 2500000;
rt->client_buffer_time = 3000;
av_log(s, AV_LOG_DEBUG, "Proto = %s, path = %s, app = %s, fname = %s\n", av_log(s, AV_LOG_DEBUG, "Proto = %s, path = %s, app = %s, fname = %s\n",
proto, path, rt->app, rt->playpath); proto, path, rt->app, rt->playpath);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment