OSDN Git Service

Write header for RTMP packets with channel_id >= 64 correctly
authorKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 1 Dec 2009 15:13:23 +0000 (15:13 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 1 Dec 2009 15:13:23 +0000 (15:13 +0000)
Originally committed as revision 20684 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/rtmppkt.c

index 7e7670e..6c2e2f5 100644 (file)
@@ -151,7 +151,15 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
     int off = 0;
 
     //TODO: header compression
-    bytestream_put_byte(&p, pkt->channel_id | (mode << 6));
+    if (pkt->channel_id < 64) {
+        bytestream_put_byte(&p, pkt->channel_id | (mode << 6));
+    } else if (pkt->channel_id < 64 + 256) {
+        bytestream_put_byte(&p, 0               | (mode << 6));
+        bytestream_put_byte(&p, pkt->channel_id - 64);
+    } else {
+        bytestream_put_byte(&p, 1               | (mode << 6));
+        bytestream_put_le16(&p, pkt->channel_id - 64);
+    }
     if (mode != RTMP_PS_ONEBYTE) {
         bytestream_put_be24(&p, pkt->timestamp >= 0xFFFFFF ? 0xFFFFFF : pkt->timestamp);
         if (mode != RTMP_PS_FOURBYTES) {