Support more than 64 channels in RTMP input
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 18 Oct 2009 07:01:06 +0000 (07:01 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 18 Oct 2009 07:01:06 +0000 (07:01 +0000)
Originally committed as revision 20270 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/rtmppkt.c
libavformat/rtmppkt.h

index 4ca12a0..f6e2a90 100644 (file)
@@ -81,6 +81,12 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
         return AVERROR(EIO);
     channel_id = hdr & 0x3F;
 
         return AVERROR(EIO);
     channel_id = hdr & 0x3F;
 
+    if (channel_id < 2) { //special case for channel number >= 64
+        buf[1] = 0;
+        if (url_read_complete(h, buf, channel_id + 1) != channel_id + 1)
+            return AVERROR(EIO);
+        channel_id = AV_RL16(buf) + 64;
+    }
     data_size = prev_pkt[channel_id].data_size;
     type      = prev_pkt[channel_id].type;
     extra     = prev_pkt[channel_id].extra;
     data_size = prev_pkt[channel_id].data_size;
     type      = prev_pkt[channel_id].type;
     extra     = prev_pkt[channel_id].extra;
index b40f4fe..f50996f 100644 (file)
@@ -25,7 +25,7 @@
 #include "avformat.h"
 
 /** maximum possible number of different RTMP channels */
 #include "avformat.h"
 
 /** maximum possible number of different RTMP channels */
-#define RTMP_CHANNELS 64
+#define RTMP_CHANNELS 65599
 
 /**
  * channels used to for RTMP packets with different purposes (i.e. data, network
 
 /**
  * channels used to for RTMP packets with different purposes (i.e. data, network