rtmp: Account for bytes_read wraparound
authorLuca Barbato <lu_zero@gentoo.org>
Wed, 25 Jan 2017 14:59:09 +0000 (15:59 +0100)
committerLuca Barbato <lu_zero@gentoo.org>
Sun, 29 Jan 2017 17:10:44 +0000 (18:10 +0100)
Servers seem to be happy to receive the wrapped-around value as long
as they receive a report, otherwise they timeout.

Initially reported and analyzed by Thomas Bernhard.

libavformat/rtmpproto.c

index 5298c18..49a40dd 100644 (file)
@@ -2416,7 +2416,7 @@ static int get_packet(URLContext *s, int for_header)
         rt->last_timestamp = rpkt.timestamp;
 
         rt->bytes_read += ret;
-        if (rt->bytes_read > rt->last_bytes_read + rt->client_report_size) {
+        if (rt->bytes_read - rt->last_bytes_read > rt->client_report_size) {
             av_log(s, AV_LOG_DEBUG, "Sending bytes read report\n");
             if ((ret = gen_bytes_read(s, rt, rpkt.timestamp + 1)) < 0)
                 return ret;