Ross, 

I am attempting to make sense of what I am seeing, and this statement: 

> This is getting silly.  You're doing a lot of mental 'flailing around'; yet 
> the answer is right in front of you:

is not necessarily accurate. Up until this most recent example I provided, I 
reported 66% frame loss without even doing any decoding attempts at all, but 
instead a simple memcpy of 23K to create a new frame with the received data. 
For further interest, I also took 100% of the memcpy (afterGettingFrame()) work 
and dropped it into a block that I sent to a dispatch_async call to Grand 
Central Dispatch which immediately returned. It changed nothing. In other 
words, I cannot even dispatch any work asynchronously without suffering 2/3 
frame loss. 

Your statement, 

>       while (1) {
>               Step A: Get a frame of data from a socket;
>               Step B: Do something with this frame of data;
>       }

Doesn't necessarily pin the issue on Step B. It pins the issue on Step A OR 
Step B, or how both steps do things together based on their design. Let's do 
the math. In the example below, I'm getting around 10fps where 19ms of that is 
decoding. That means that every second, step B is 190ms. It also means that 
Step A is 810ms. Now I'm not saying that LIVE555 is inefficient -- not saying 
that at all. All I'm saying is this: 

- There's something else very curious about the situations I've encountered 
where there is frame loss vs. when there isn't. When I'm only logging frame 
counts, i.e. doing nothing in the afterGettingFrame() method, I can get 30fps. 
That means that in this case, LIVE555 (Step A) is consuming a maximum of ~33ms 
per frame in order to achieve that frame rate. However, in the case of adding 
the one decode call, which dropped frame rate down to 10fps, LIVE555 (Step A) 
is consuming ~810ms total, or 81ms processing time per frame, because the 
decode consumes only 19ms. That is a 41% jump in processing time for LIVE555 
(Step A) when a situation is introduced where frames cannot be processed fast 
enough to keep from losing frames. That would seem to suggest that as soon as 
frame loss occurs, LIVE555 incurs additional processing, which of course would 
compound the problem. Perhaps there's another explanation, but it doesn't make 
sense -- I would expect LIVE555's overhead to be fixed per frame. 

- Bottom line, all I'm doing is inquiring as to whether there might be 
possibilities to optimize things further upstream. I think that question is 
especially justified given that VLC, whom I looked at in lieu of not having any 
other example of a known working model, doesn't follow the testRTSPClient 
example approach. 

- I do not see any working example published that actually does something 
meaningful in its processing. The present testRTSPClient example app just 
outputs to a log. I can do that fine and get 30fps. Is there a known example 
out there that is architected this way, does decoding and does get 30fps (in 
other words, a video player example)? I'm not saying it can't, I'm just saying 
that I'd like to see it and run it myself before I throw my hands up in the 
air, and write off the whole thing as impossible. 

In conclusion, I'm not sure what the source of frustration is, but please don't 
take anything personally and see these questions for what they are. I'm just 
reporting the numbers I see, and asking questions based on them. And that would 
appear to be the proper protocol, as there's not much documentation either 
within the code or supplemental to help out here, so the only real resource is 
this mailing list. I also presume this is the desired scenario, as when I 
posted about possibly documenting out this use case, it never received a reply. 

FWIW, I'm not the only one in this boat, and this use case is not uncommon. I 
know, because since I started posting on this mailing list several weeks ago, 
I've been contacted offline several times by folks that have exactly the same 
problem they are trying to solve and aren't making much headway with the 
resources available. So please, don't take offense or check out...this is how 
problems get solved, people get educated, and code gets better. 

Cheers, 

Brad

Brad O'Hearne
Founder / Lead Developer
Big Hill Software LLC
http://www.bighillsoftware.com

_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to