[Live-devel] Need Help with test*Streamer From a Live Source

Chris cjc3 at verizon.net
Sun Dec 27 23:00:59 PST 2009


Greetings,

I am following the FAQ example and have modified 
'testMPEG4VideoStreamer' and 'DeviceSource.cpp' to take framed input 
from my MPEG4 video encoder, but I am having trouble getting it working 
properly.

I have first verified my video data by writing it out to a file then 
streaming it from that file to VLC via the unmodified 
testMPEG4VideoStreamer.  This works just fine.  When I modify the 
program to take my live framed source, at issue is doGetNextFrame() does 
not get called fast enough to keep up with my video data.  Some possible 
issues:

- I run liveMedia in one thread, and the video source FIFO in another.  
When I call deliverFrame() it is from the FIFO thread, not the liveMedia 
thread.  Is this a no-no?

- My card doesn't support more than 22 frame buffers.  Once these fill 
up dropped frames are to be expected.  Will I have to add intermediate 
buffering?  Does liveMedia take some time to digest the initial start of 
the stream, or can I expect deliverFrame() to be called with low latency 
at most times?

The cadence of video frame enqueues (denoted by +) to liveMedia 
doGetNextFrames (denoted by -) looks something like this:

-+-+++++++++++++++++++++++-+-+-+-+-+-+-+-+-----------------------+-+++++++++++++++++++++++-----------------------+++++++++++++++++++++++

liveMedia accepts the first two frames right away, then my FIFO fills 
up, then in about 1 second intervals doGetNextFrame() is called 8 times, 
then a burst of doGetNextFrame() as the FIFO is emptied at once, 
followed by the FIFO filling up again.
 
Some info: 

  - In my deliverFrame() I don't set fDurationInMicroseconds, as this is 
a live feed. 
  - I set the presentation time like so: 
gettimeofday(&fPresentationTime, NULL);
  - I connect my videoSource via the MPEG4VideoStreamDiscreteFramer to 
the videoSink

Any ideas?

Thanks,

Chris


More information about the live-devel mailing list