<div dir="ltr"><div>Understanding the RTSPClient code is the first requirement! it succinctly and completely shows the minimum needed. <br><br></div>Strobe is an interesting word but I get what he means, It is a pull system. The FAQ has a great explanation of this. <br>The getNextFrame calls the source to the left(with the provided callback), which calls the source to the left and so on. The source on the far left then calls afterGettingFrame() and calls the client callback with the data. which calls it's guy on the right until it hits the sink on the right. At that point a getNextFrame() must be called to keep the process going. <br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 3, 2014 at 6:03 PM, Ross Finlayson <span dir="ltr"><<a href="mailto:finlayson@live555.com" target="_blank">finlayson@live555.com</a>></span> wrote:<br><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><blockquote type="cite"><div><div style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div style="margin:0in 0in 0.0001pt;font-size:12pt;font-family:'Times New Roman',serif"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">In the example program you have the ourRTSPClient with a StreamClientState object attached. You "strobe" the session object to cause the client to pump frames through.</span></div></div></div></blockquote><div><br></div>I don’t know what you mean here. I don’t use the word “strobe” anywhere in the code or documentation. Please stop making up your own terminology to describe our code!</div><div><br></div><div><br><blockquote type="cite"><div style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div style="margin:0in 0in 0.0001pt;font-size:12pt;font-family:'Times New Roman',serif"><span style="color:rgb(31,73,125);font-family:Calibri,sans-serif;font-size:11pt">Looking at these two pieces together, I see what I need, but I also see two disparate paradigms. The framer wants a FramedSource and RTSPClient presents a Media source. RTSPClient understands RTSP, the framer understands H264. But they don't fit together in any way I can see. I see a Framed paradigm and a Media paradigm.</span></div></div></blockquote><div><br></div>You need to completely discard whatever view (or ‘paradigm’) that you have of the code, because it’s at best confusing, and at worst completely wrong!</div><div><br></div><div>Instead, start thinking of the code this way (which corresponds to what it actually does!):</div><div>----------</div><div>Your RTSP client application (again, I recommend using “testRTSPClient” as a model) would consist of a “MediaSink” object (in the “testRTSPClient” code, this is called “DummySink”), which receives data from a “FramedSource” object (in the “testRTSPClient” code, this is "scs.subsession->readSource()”). The application starts the flow of data by calling “startPlaying()” on the “MediaSink” object. (This is done just once.)</div><div><br></div><div>The “MediaSink” object receives one ‘frame’ at a time. (For H.264 video, this ‘frame’ is actually a H.264 NAL unit; not a complete ‘picture’.) Your “MediaSink” subclass would do whatever processing that you want on these incoming H.264 NAL units. Once again, I suggest that you review the code for “DummyRTPSink::afterGettingFrame()” ("testRTSPClient.cpp”, lines 500-521). In your own application, you would rewrite this code to do whatever you want to the incoming NAL units.</div><div><div>----------</div><div><br></div></div><div>(And yes, as Jeff Shanab implied, you could write a “FramedFilter” subclass, and insert an object of this subclass in front of the ""scs.subsession->readSource()”, and then modify your call to “FramedSink::startPlaying()” accordingly. But before you start playing around with “FramedFilter”s, you first need to understand the basic “testRTSPClient” application code - and, right now, you seem to be way away from this.)</div><div><div><br></div><div>If you don’t want to use the “testRTSPClient” code as a model for your own application, then that’s your choice - but then you can’t expect much help (at least, not for free) on this mailing list.</div></div><span class="HOEnZb"><font color="#888888"><br><br><div>
<span style="border-collapse:separate;color:rgb(0,0,0);font-family:Helvetica;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="border-collapse:separate;color:rgb(0,0,0);font-family:Helvetica;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Ross Finlayson<br>Live Networks, Inc.<br><a href="http://www.live555.com/" target="_blank">http://www.live555.com/</a></span></span>
</div>
<br></font></span></div><br>_______________________________________________<br>
live-devel mailing list<br>
<a href="mailto:live-devel@lists.live555.com">live-devel@lists.live555.com</a><br>
<a href="http://lists.live555.com/mailman/listinfo/live-devel" target="_blank">http://lists.live555.com/mailman/listinfo/live-devel</a><br>
<br></blockquote></div><br></div>