aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2015-01-14 23:09:06 +0200
committerMartin Storsjö <martin@martin.st>2015-01-15 10:20:18 +0200
commit024e5a2d5ff8a94adce48abb15ce2fb471f9d18e (patch)
tree6b849b63a68261b832c3a8d886266867d2c283ab
parentdef69553e745e007925147b2e7e4b32c57d08fdf (diff)
downloadffmpeg-024e5a2d5ff8a94adce48abb15ce2fb471f9d18e.tar.gz
rtmppkt: Repeat the full 32 bit timestamp for chunking continuation packets
This fixes sending chunked packets (packets larger than the output chunk size, which often can be e.g. 4096 bytes) with a timestamp delta (or absolute timstamp, if it's a timestamp step backwards, or the first packet of the stream) larger than 0xffffffff. The RTMP spec explicitly says (in section 5.3.1.3.) that packets of type 3 (continuation packets) should include this field, if the previous non-continuation packet had it included. The receiving code handles these packets correctly. Pointed out by Cheolho Park. CC: libav-stable@libav.org Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavformat/rtmppkt.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c
index e952091714..f8c51d01fa 100644
--- a/libavformat/rtmppkt.c
+++ b/libavformat/rtmppkt.c
@@ -386,6 +386,13 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
if ((ret = ffurl_write(h, &marker, 1)) < 0)
return ret;
written++;
+ if (pkt->ts_field == 0xFFFFFF) {
+ uint8_t ts_header[4];
+ AV_WB32(ts_header, timestamp);
+ if ((ret = ffurl_write(h, ts_header, 4)) < 0)
+ return ret;
+ written += 4;
+ }
}
}
return written;