On Thu, Oct 7, 2010 at 9:12 AM, iain <span dir="ltr"><<a href="mailto:iain@idcl.co.uk">iain@idcl.co.uk</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div link="blue" vlink="purple" lang="EN-GB"><div><p class="MsoNormal">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.</p>
</div></div></blockquote><div><br>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.<br>
<br>
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. <br>
<br>
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.<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div link="blue" vlink="purple" lang="EN-GB"><div><p class="MsoNormal">Secondly, the documentation for Live555 is a touch on the light side, however I have found some references to tutorials (<a href="http://www.mail-archive.com/live-devel@lists.live555.com/msg00238.html" target="_blank">http://www.mail-archive.com/live-devel@lists.live555.com/msg00238.html</a>), however the referenced link does not appear to exist anymore. Does anyone have a copy of this.</p>
</div></div></blockquote><div><br>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.<br>
<br>Are you writing a server filter as well?<br></div></div><br>