[Red5] Major Red5 bug

Jeremy Morton admin at game-point.net
Tue Apr 14 12:08:41 PDT 2009


Andy Shaules wrote:
> Ok,
> Your code wont work for a few reasons. And yes It is irritating that you
> slam red5 and file a critical jira ticket without looking at your own
> code, but I still am immensly interested in timing.

I did not 'slam' Red5.  Claiming it has a bug is not the same thing. 
Please give me one example of where I 'slammed' Red5, or kindly don't 
accuse me of it.

> So to repeat: Your code wont work for a few reasons.....
> 1.
> You force a timestamp increment set to 10 frames per second regardless
> of data.
 >
> 'timestampCount+=  this.tsInterval;'

Yes, I do, because things don't work if I don't do that.  Some weird 
Xuggler/ffmpeg bug (I'm pretty sure it's not my incoming data).  It's 
not ideal, but I don't think it causes significant problems.

> 2.
> You dont even look at the timestamp of ANY of the packets but the first one

Why would I need to?

> 3.
> You do not handle the timestamp data that would be present when Xuggler
> and ffMpeg fail to decode a frame. Whether or not you decode it, it is
> still a frame with a stamp. you discard it and use its timestamp for the
> following successful decode.

That's true, and the odd frame will be dropped.  In time, this will mean 
that the buffer drops to zero.  By 'time', I'm talking hours.  This is a 
very minor problem for my purposes, because these streams are only 
really intended to be viewed for 5-10 minutes.

> Also...
> As far as testing, you havent even set up a stream listener to log the
> timestamps in the rtmp.

I don't really understand what you mean here, or how setting up such a 
stream listener would help in the slightest.

> I think that maybe xuggler is cofiguring the output to have AUDIO flag
> in the header.

According to the Xuggler code in Red5Handler.java's appendFLVHeader():
       byte audioVideoFlag = 0;
       if (mStreamInfo.hasAudio())
         audioVideoFlag |= 0x04;
       if (mStreamInfo.hasVideo())
         audioVideoFlag |= 0x01;
       in.put(audioVideoFlag);

My mStreamInfo has hasAudio() set to false, hasVideo() set to true.  So 
it looks like Xuggler is not doing that.

> Conclusion:
> So here is what happens in my opinion.....
> You load 4 seconds of data in the buffer but it reallity, _you have no
> idea how much data you send_ because _you always increment the timestamp
> by a full frame unit._

I disagree.  The fact that 4 seconds of buffer have built up implies 
that I have sent exactly 40 frames of video data, because I increment 
the timestamp by 100ms per frame.

Best regards,
Jeremy Morton (Jez)



More information about the Red5 mailing list