[Red5commits] [1713] fixed buffers being too small for big channel ids

jbauch luke at codegent.com
Sat Feb 10 03:00:06 EST 2007


fixed buffers being too small for big channel ids


Timestamp: 02/10/07 02:38:52 EST (less than one hour ago) 
Change: 1713 
Author: jbauch

Files (see diff or trac for details): 
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java


Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1713

Index: /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java (revision 1710)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java (revision 1713)
@@ -131,9 +131,15 @@
 		rtmp.setLastWritePacket(channelId, packet);
 
+		
 		final int chunkSize = rtmp.getWriteChunkSize();
+		int chunkHeaderSize = 1;
+		if (header.getChannelId() > 320)
+			chunkHeaderSize = 3;
+		else if (header.getChannelId() > 63)
+			chunkHeaderSize = 2;
 		final int numChunks = (int) Math.ceil(header.getSize()
 				/ (float) chunkSize);
 		final int bufSize = header.getSize() + headers.limit()
-				+ (numChunks > 0 ? numChunks - 1 : 0);
+				+ (numChunks > 0 ? (numChunks - 1) * chunkHeaderSize : 0);
 		final ByteBuffer out = ByteBuffer.allocate(bufSize);
 
@@ -186,6 +192,11 @@
 		}
 
+		int channelIdAdd = 0;
+		if (header.getChannelId() > 320)
+			channelIdAdd = 2;
+		else if (header.getChannelId() > 63)
+			channelIdAdd = 1;
 		final ByteBuffer buf = ByteBuffer.allocate(RTMPUtils
-				.getHeaderLength(headerType));
+				.getHeaderLength(headerType) + channelIdAdd);
 		RTMPUtils.encodeHeaderByte(buf, headerType, header
 				.getChannelId());


Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.



More information about the Red5commits mailing list