diff options
author | Martin Storsjö <martin@martin.st> | 2015-01-14 23:09:06 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2015-01-15 10:20:18 +0200 |
commit | 024e5a2d5ff8a94adce48abb15ce2fb471f9d18e (patch) | |
tree | 6b849b63a68261b832c3a8d886266867d2c283ab | |
parent | def69553e745e007925147b2e7e4b32c57d08fdf (diff) | |
download | ffmpeg-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.c | 7 |
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; |