Ticket #705 (new Bug)

Opened 2 years ago

Last modified 21 months ago

RTPMClient doesn't handle HEADER_CONTINUE extra time delta in header

Reported by: PLL Owned by: thijs
Priority: Major Component: Client side
Version: Keywords: rtpmclient
Cc:

Description

Hello.

This is a response from a certain public popular FlashMediaServer for online drawings:
The data is random, I generated it. This is a SharedObject on first sync response. Following syncs do not contain the extra time delta (time != 0xffffff).


// HEADER SIZE is 12 yet we have 16 bytes in header due to time being 0xffffff

04 ff ff ff 00 05 59 13 00 00 00 00 36 64 ad 1b
00 01 64 00 00 00 09 00 00 00 20 00 00 00 00 0b 00 00 00 00 08 00 00 00 00 04 00 00 01 01 00 02 61 30 02 00 fa 30 32 3f 76 37 2e 3f 76 42 2e 3f 6a 6f 2e 3f 47 32 2e 3f 21 52 2e 3e 4e 3d 2e 3d 79 29 2e 3c 68 79 2e 3b 40 5d 2e 39 5a 28 2e 38 3e 50 2e 37 75 46 2e 38 34 49 2e 38 7b 77 2e 3a 34 3c 2e 3c 33 42 2e 3e 55 37 2e 41 36 3e 2e 43 64 5b 2e 45 4b 22 2e 47 23 62 2e 48 43 23 2e 49

// Subsequent packets are from the same channel (4) type header continue. Header should have 1 byte yet we have 5 bytes.

c4 36 64 ad 1b
60 3d 2e 4a 7c 4c 2e 4c 56 6e 2e 4e 32 2a 2e 4f 71 76 2e 51 64 3d 2e 53 49 79 2e 55 2f 57 2e 56 64 56 2e 57 74 61 2e 58 6d 58 2e 59 59 78 2e 5a 47 2f 2e 5a 5f 3b 2e 5a 5f 3a 2e 5a 6b 21 2e 5a 76 71 2e 5b 41 2b 2e 5b 7c 66 2e 5d 76 64 2e 5f 51 79 2e 61 5d 68 2e 64 3e 29 2e 67 36 5b 2e 6a 5e 59 2e 6e 43 64 2e 72 35 3d 2e 76 32 3f 2e 79 70 70 2e 22 21 3d 77 2e 22 24 26 63 2e 22 26 56

c4 36 64 ad 1b
29 2e 22 28 48 36 2e 22 29 64 69 2e 22 2a 45 35 2e 22 2a 5b 6b 2e 22 2a 37 78 2e 22 29 79 44 04 00 00 01 01 00 02 61 31 02 00 fa 30 32 3f 76 37 2e 3f 76 42 2e 3f 6a 6f 2e 3f 47 32 2e 3f 21 52 2e 3e 4e 3d 2e 3d 79 29 2e 3c 68 79 2e 3b 40 5d 2e 39 5a 28 2e 38 3e 50 2e 37 75 46 2e 38 34 49 2e 38 7b 77 2e 3a 34 3c 2e 3c 33 42 2e 3e 55 37 2e 41 36 3e 2e 43 64 5b 2e 45 4b 22 2e 47 23 62

c4 36 64 ad 1b
2e 48 43 23 2e 49 60 3d 2e 4a 7c 4c 2e 4c 56 6e 2e 4e 32 2a 2e 4f 71 76 2e 51 64 3d 2e 53 49 79 2e 55 2f 57 2e 56 64 56 2e 57 74 61 2e 58 6d 58 2e 59 59 78 2e 5a 47 2f 2e 5a 5f 3b 2e 5a 5f 3a 2e 5a 6b 21 2e 5a 76 71 2e 5b 41 2b 2e 5b 7c 66 2e 5d 76 64 2e 5f 51 79 2e 61 5d 68 2e 64 3e 29 2e 67 36 5b 2e 6a 5e 59 2e 6e 43 64 2e 72 35 3d 2e 76 32 3f 2e 79 70 70 2e 22 21 3d 77 2e 22 24

c4 36 64 ad 1b
26 63 2e 22 26 56 29 2e 22 28 48 36 2e 22 29 64 69 2e 22 2a 45 35 2e 22 2a 5b 6b 2e 22 2a 37 78 2e 22 29 79 44 04 00 00 01 01 00 02 61 32 02 00 fa 30 32 3f 76 37 2e 3f 76 42 2e 3f 6a 6f 2e 3f 47 32 2e 3f 21 52 2e 3e 4e 3d 2e 3d 79 29 2e 3c 68 79 2e 3b 40 5d 2e 39 5a 28 2e 38 3e 50 2e 37 75 46 2e 38 34 49 2e 38 7b 77 2e 3a 34 3c 2e 3c 33 42 2e 3e 55 37 2e 41 36 3e 2e 43 64 5b 2e 45

c4 36 64 ad 1b
4b 22 2e 47 23 62 2e 48 43 23 2e 49 60 3d 2e 4a 7c 4c 2e 4c 56 6e 2e 4e 32 2a 2e 4f 71 76 2e 51 64 3d 2e 53 49 79 2e 55 2f 57 2e 56 64 56 2e 57 74 61 2e 58 6d 58 2e 59 59 78 2e 5a 47 2f 2e 5a 5f 3b 2e 5a 5f 3a 2e 5a 6b 21 2e 5a 76 71 2e 5b 41 2b 2e 5b 7c 66 2e 5d 76 64 2e 5f 51 79 2e 61 5d 68 2e 64 3e 29 2e 67 36 5b 2e 6a 5e 59 2e 6e 43 64 2e 72 35 3d 2e 76 32 3f 2e 79 70 70 2e 22

c4 36 64 ad 1b
21 3d 77 2e 22 24 26 63 2e 22 26 56 29 2e 22 28 48 36 2e 22 29 64 69 2e 22 2a 45 35 2e 22 2a 5b 6b 2e 22 2a 37 78 2e 22 29 79 44 04 00 00 01 01 00 02 61 33 02 00 fa 30 32 3f 76 37 2e 3f 76 42 2e 3f 6a 6f 2e 3f 47 32 2e 3f 21 52 2e 3e 4e 3d 2e 3d 79 29 2e 3c 68 79 2e 3b 40 5d 2e 39 5a 28 2e 38 3e 50 2e 37 75 46 2e 38 34 49 2e 38 7b 77 2e 3a 34 3c 2e 3c 33 42 2e 3e 55 37 2e 41 36 3e

c4 36 64 ad 1b
2e 43 64 5b 2e 45 4b 22 2e 47 23 62 2e 48 43 23 2e 49 60 3d 2e 4a 7c 4c 2e 4c 56 6e 2e 4e 32 2a 2e 4f 71 76 2e 51 64 3d 2e 53 49 79 2e 55 2f 57 2e 56 64 56 2e 57 74 61 2e 58 6d 58 2e 59 59 78 2e 5a 47 2f 2e 5a 5f 3b 2e 5a 5f 3a 2e


These 36 64 ad 1b are only sent when time is 0xffffff which I also highlighted.

In the code. Red5 is handling the case for HEADER_NEW, HEADER_SAME_SOURCE and HEADER_TIMER_CHANGE but not for HEADER_CONTINUE which is making the rtpm client crash with random errors due to reading all the following values wrong.

I sort of fixed my problem by adding these lines in:

Class: org.red5.server.net.rtmp.codec.RTMPProtocolDecoder
Function: decodeHeader(IoBuffer, Header):Header
Line: 523

			case HEADER_CONTINUE:
				header.setSize(lastHeader.getSize());
				header.setDataType(lastHeader.getDataType());
				header.setStreamId(lastHeader.getStreamId());
				header.setTimerBase(lastHeader.getTimerBase());
				header.setTimerDelta(lastHeader.getTimerDelta());

+                                if (lastHeader.getTimerDelta() == 0) {
+                                    in.getInt();
+                                    log.warn("What am I skipping?");
+                                }

				break;

I am still unsure if this is the right way to tackle the problem but it has solved mine.

Problem is in trunk and every release.

Opinions? Thoughts?

Change History

Changed 22 months ago by bascorp

Changed 21 months ago by bascorp

Note: See TracTickets for help on using tickets.