[Live-devel] Newbie with a DirectShow headache

Jeremy Noring jnoring at logitech.com
Thu Oct 7 11:34:46 PDT 2010


On Thu, Oct 7, 2010 at 9:12 AM, iain <iain at idcl.co.uk> wrote:

> I’ve got two requests, really.  Firstly, has anyone got this to work
> properly or can they recommend an alternative (open source) which works
> reliably.
>

Hey Iain, long time no see.  :)  I also looked at that sourceforge project
when I was first trying to integrate Live555 into a DirectShow source
filter, and ultimately decided that their filter implementation was
horrible, which it is.  So I wrote an RTSP Source Filter using Live555 from
scratch, and it works fairly well.  I inherited from
CBaseFilter/CBaseOutputPin and made my own streaming threads (I used
QThread, but of course you can use any threading library you
like)--CSource/CSourceStream aren't well suited towards Live555.  I also
implemented IFileSourceFilter to aid testability.

As for Live555 code, I started with the openRTSP code (which implements an
RTSP client), hacked out most of the stuff I didn't care about and then
integrated that into the filter.   I generally connect twice to the
server--once to fetch media types so I can generate output pins, and a
second time to start streaming media--this is sort of a necessity if you're
going to test in GraphEdit.  However, I also put in a small hack to
IFileSourceFilter to do this in a single pull in my own app where it happens
fast enough that I can pull all at once.  Live555 is single-threaded, so I
have one thread that runs the openRTSP-ish code and plops samples into
queues based on media type--it's important to do all Live555 operations on a
single thread and not to block the Live555 thread in any way.  Then, I have
the streaming threads for the output pins service those queues.

However, getting timestamping working correctly has been (and continues to
be) an issue.  Live555 timestamps aren't accurate until the RTCP channel has
been sync-d up, so the first few frame that come through have invalid
timestamps.  And DirectShow's timestamping for live sources sucks in
general--I have yet to make heads or tails of it.  If you have any good
advice for getting timestamping working better in DShow, that'd be awesome.


> Secondly, the documentation for Live555 is a touch on the light side,
> however I have found some references to tutorials (
> http://www.mail-archive.com/live-devel@lists.live555.com/msg00238.html),
> however the referenced link does not appear to exist anymore.  Does anyone
> have a copy of this.
>

My biggest recommendation, if you want to stream H264, is to completely
disregard that guy's code.  It's profoundly incorrect (particularly if
you're writing a server component), and I made the mistake of following it
as well.  Your best resource is definitely openRTSP code, the FAQ on
Live555's site, and the mailing list here.

Are you writing a server filter as well?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20101007/4a76d925/attachment.html>


More information about the live-devel mailing list