Thanks Ross,<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div class="im"><blockquote type="cite">
<div>Based on the testRTSPClient example, I've gotten a stable RTSP connection working on my target platform; in this case to a video+audio RTSP source. But, now I'm struggling to figure out the next step. My custom MediaSink classes do not receive any frame data via afterGettingFrame()</div>
</blockquote><div><br></div></div>That is the first thing that you should fix. Note that when the (non-static) "DummySink::afterGettingFrame()" function ("testRTSPClient.cpp", lines 479-500) is called, a complete frame will have already been delivered into "fReceiveBuffer".</div>
</div></blockquote><div><br></div><div><span class="s1">That's my first problem then - I should have been more clear, in my case, that function is not getting called at all. I'm not debugging the original project, as that appears to exit immediately after proving that it can set up a connection (maybe I've chosen a bad test source? </span>"rtsp://<a href="http://media1.law.harvard.edu/Media/policy_a/2012/02/02_unger.mov">media1.law.harvard.edu/Media/policy_a/2012/02/02_unger.mov</a>"). I have a CustomMediaSink based more or less on copy-pasting your DummyMediaSink. I do these things in continueAfterSETUP:</div>
<div>
<p class="p1"> scs.<span class="s1">subsession</span>-><span class="s1">sink</span> = <span class="s1">CustomRTSPMediaSink</span>::<span class="s2">createNew</span>(env, *scs.<span class="s1">subsession</span>, rtspClient-><span class="s2">url</span>());</p>
<p class="p1">and if all is well, </p><p class="p1">
</p><p class="p1"><span class="s1"> scs.</span><span class="s2">subsession</span><span class="s1">-></span><span class="s2">sink</span><span class="s1">-></span>startPlaying<span class="s1">(*(scs.</span><span class="s2">subsession</span><span class="s1">-></span>readSource<span class="s1">()), </span>subsessionAfterPlaying<span class="s1">, scs.</span><span class="s2">subsession</span><span class="s1">);</span></p>
<p></p></div>
<div>continueAfterPLAY then occurs without error, and I see some low-level RTSP logs happen that give me the sense the session is happily running, but no calls to my sad, little CustomRTSPMediaSink<span class="s1">::afterGettingFrame(...) implementation.</span></div>
<div><span class="s1"><br></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div class="im"><blockquote type="cite"><div>
<div>And how about these higher-level MediaSinks - do those work right out of the box? Seems too good to be true. Let's say I had AAC+VP8 streams coming in. Would I conditionally create a MPEG4LATMAudioRTPSink (what if it's non-LATM MPEG4?) and a VP8VideoRTPSink in continueAfterSETUP() based on inspecting the subsession? I suppose I will have to try this out myself ;)</div>
</div></blockquote><div><br></div></div>No, you're confused here. The "*RTPSink" classes are used only for *transmitting* RTP packets. I.e., they're used by servers, not clients, and are therefore not classes that you would use.</div>
</div></blockquote><div><br></div><div>OK, thank you for that info! I also understand that your library does not offer the codecs.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div><div class="im"><div>Maybe you should begin by explaining what it is specifically that you're trying to do...</div></div></div></div></blockquote><div><br></div><div>I'd love to say more, but I'm prohibited from going into too much detail to a public mailing list.</div>
<div><br></div><div>I really appreciate your quick feedback.</div><div><br></div><div>Thanks,</div><div>Jesse</div></div>