[FFmpeg-cvslog] rtmp: Handle FLV packets written in more than one write call
Chiranjeevi Melam
git at videolan.org
Wed Sep 21 01:13:48 CEST 2011
ffmpeg | branch: master | Chiranjeevi Melam <cmelam at rgbnetworks.com> | Sun Sep 18 05:39:53 2011 +0200| [a14c784210198fe830391a59897d4dc62f13ab84] | committer: Martin Storsjö
rtmp: Handle FLV packets written in more than one write call
If the FLV packet is larger than the AVIO buffer, a partial
FLV packet will be flushed to the RTMP protocol.
This commit handles the most common cases of FLV packets
being written in more than one call.
Signed-off-by: Martin Storsjö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a14c784210198fe830391a59897d4dc62f13ab84
---
libavformat/rtmpproto.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c
index de4eb0f..66265f2 100644
--- a/libavformat/rtmpproto.c
+++ b/libavformat/rtmpproto.c
@@ -925,7 +925,7 @@ static int rtmp_write(URLContext *s, const uint8_t *buf, int size)
uint32_t ts;
const uint8_t *buf_temp = buf;
- if (size < 11) {
+ if (!rt->flv_off && size < 11) {
av_log(s, AV_LOG_DEBUG, "FLV packet too small %d\n", size);
return 0;
}
@@ -966,20 +966,22 @@ static int rtmp_write(URLContext *s, const uint8_t *buf, int size)
if (rt->flv_size - rt->flv_off > size_temp) {
bytestream_get_buffer(&buf_temp, rt->flv_data + rt->flv_off, size_temp);
rt->flv_off += size_temp;
+ size_temp = 0;
} else {
bytestream_get_buffer(&buf_temp, rt->flv_data + rt->flv_off, rt->flv_size - rt->flv_off);
+ size_temp -= rt->flv_size - rt->flv_off;
rt->flv_off += rt->flv_size - rt->flv_off;
}
if (rt->flv_off == rt->flv_size) {
bytestream_get_be32(&buf_temp);
-
+ size_temp -= 4;
ff_rtmp_packet_write(rt->stream, &rt->out_pkt, rt->chunk_size, rt->prev_pkt[1]);
ff_rtmp_packet_destroy(&rt->out_pkt);
rt->flv_size = 0;
rt->flv_off = 0;
}
- } while (buf_temp - buf < size_temp);
+ } while (buf_temp - buf < size);
return size;
}
More information about the ffmpeg-cvslog
mailing list