[FFmpeg-cvslog] rtmp: split chunk_size var into in_chunk_size and out_chunk_size

Jordi Ortiz git at videolan.org
Sun Aug 12 13:48:48 CEST 2012


ffmpeg | branch: master | Jordi Ortiz <nenjordi at gmail.com> | Fri Aug 10 19:03:22 2012 +0200| [f5ce90f2ded73cbad80108a57ca1c520c6919954] | committer: Martin Storsjö

rtmp: split chunk_size var into in_chunk_size and out_chunk_size

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f5ce90f2ded73cbad80108a57ca1c520c6919954
---

 libavformat/rtmpproto.c |   27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c
index 910e523..5fb5ac4 100644
--- a/libavformat/rtmpproto.c
+++ b/libavformat/rtmpproto.c
@@ -68,7 +68,8 @@ typedef struct RTMPContext {
     const AVClass *class;
     URLContext*   stream;                     ///< TCP stream used in interactions with RTMP server
     RTMPPacket    prev_pkt[2][RTMP_CHANNELS]; ///< packet history used when reading and sending packets
-    int           chunk_size;                 ///< size of the chunks RTMP packets are divided into
+    int           in_chunk_size;              ///< size of the chunks incoming RTMP packets are divided into
+    int           out_chunk_size;             ///< size of the chunks outgoing RTMP packets are divided into
     int           is_input;                   ///< input/output flag
     char          *playpath;                  ///< stream identifier to play (with possible "mp4:" prefix)
     int           live;                       ///< 0: recorded, -1: live, -2: both
@@ -209,7 +210,7 @@ static int rtmp_send_packet(RTMPContext *rt, RTMPPacket *pkt, int track)
             goto fail;
     }
 
-    ret = ff_rtmp_packet_write(rt->stream, pkt, rt->chunk_size,
+    ret = ff_rtmp_packet_write(rt->stream, pkt, rt->out_chunk_size,
                                rt->prev_pkt[1]);
 fail:
     ff_rtmp_packet_destroy(pkt);
@@ -965,17 +966,22 @@ static int handle_chunk_size(URLContext *s, RTMPPacket *pkt)
     }
 
     if (!rt->is_input) {
-        if ((ret = ff_rtmp_packet_write(rt->stream, pkt, rt->chunk_size,
+        /* Send the same chunk size change packet back to the server,
+         * setting the outgoing chunk size to the same as the incoming one. */
+        if ((ret = ff_rtmp_packet_write(rt->stream, pkt, rt->out_chunk_size,
                                         rt->prev_pkt[1])) < 0)
             return ret;
+        rt->out_chunk_size = AV_RB32(pkt->data);
     }
 
-    rt->chunk_size = AV_RB32(pkt->data);
-    if (rt->chunk_size <= 0) {
-        av_log(s, AV_LOG_ERROR, "Incorrect chunk size %d\n", rt->chunk_size);
+    rt->in_chunk_size = AV_RB32(pkt->data);
+    if (rt->in_chunk_size <= 0) {
+        av_log(s, AV_LOG_ERROR, "Incorrect chunk size %d\n",
+               rt->in_chunk_size);
         return AVERROR_INVALIDDATA;
     }
-    av_log(s, AV_LOG_DEBUG, "New chunk size = %d\n", rt->chunk_size);
+    av_log(s, AV_LOG_DEBUG, "New incoming chunk size = %d\n",
+           rt->in_chunk_size);
 
     return 0;
 }
@@ -1252,7 +1258,7 @@ static int get_packet(URLContext *s, int for_header)
     for (;;) {
         RTMPPacket rpkt = { 0 };
         if ((ret = ff_rtmp_packet_read(rt->stream, &rpkt,
-                                       rt->chunk_size, rt->prev_pkt[0])) <= 0) {
+                                       rt->in_chunk_size, rt->prev_pkt[0])) <= 0) {
             if (ret == 0) {
                 return AVERROR(EAGAIN);
             } else {
@@ -1411,7 +1417,8 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
     if ((ret = rtmp_handshake(s, rt)) < 0)
         goto fail;
 
-    rt->chunk_size = 128;
+    rt->out_chunk_size = 128;
+    rt->in_chunk_size  = 128; // Probably overwritten later
     rt->state = STATE_HANDSHAKED;
 
     // Keep the application name when it has been defined by the user.
@@ -1665,7 +1672,7 @@ static int rtmp_write(URLContext *s, const uint8_t *buf, int size)
         RTMPPacket rpkt = { 0 };
 
         if ((ret = ff_rtmp_packet_read_internal(rt->stream, &rpkt,
-                                                rt->chunk_size,
+                                                rt->in_chunk_size,
                                                 rt->prev_pkt[0], c)) <= 0)
              return ret;
 



More information about the ffmpeg-cvslog mailing list