<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1" style="word-wrap:break-word">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi Ross,<br>
<br>
Thanks a lot for your answers.<br>
<br>
I have some comments/additional questions, inline in <font color="008000">green </font>
below.<br>
<br>
Many thanks for your help!<br>
<br>
  Fabrice<br>
<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF182079"><font color="#000000" face="Tahoma" size="2"><b>From:</b> live-devel [live-devel-bounces@ns.live555.com] on behalf of Ross Finlayson [finlayson@live555.com]<br>
<b>Sent:</b> 04 September 2014 18:35<br>
<b>To:</b> LIVE555 Streaming Media - development & use<br>
<b>Subject:</b> Re: [Live-devel] Please help: I have difficulties implementing the right classes<br>
</font><br>
</div>
<div></div>
<div>
<div>
<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; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px; word-wrap:break-word">
<div style="direction:ltr; font-family:Tahoma; font-size:10pt">Could it be that calling deliverFrame() multiple times might be wrong?<br>
</div>
</div>
</blockquote>
<div><br>
</div>
Yes, that's wrong.  Your "doGetNextFrame()" function should deliver one, and only one, H.264 NAL unit (note, not a H.264 'frame') each time it's called.
<br>
<font color="008000">[Fabrice] All right, that's good to know. From time to time, the encoder sends an SPS and a PPS NALU before the data NALU (all in one "frame"). So when that's the case, I need to somehow have the doGetNextFrame() method being called a 2nd
 and a 3rd time... What's the best way to do this?</font><br>
<br>
Note that if - at the time that "doGetNextFrame()" is called - no H.264 NAL unit is currently available, your "doGetNextFrame()" implementation should return immediately, and your "deliverFrame()" function must not get called again until later, when a new H.264
 NAL unit becomes available.  <br>
<font color="008000">[Fabrice] All right. This is what I am doing now; my deliverFrame() method is called only from doGetNextFrame().</font><br>
<br>
I suggest reviewing the "DeviceSource" demo code, and note how it uses an 'event trigger' (signaled from a separate thread) to do this.<br>
<font color="008000">[Fabrice] Yes, I carefully went through it. However, I am using a scheduleDelayedTask() with a "period" of 10ms because I wanted to get something working quickly. I will implement a proper monitoring thread which will signal a trigger
<font color="008000">once I get <font color="008000">this implementation working</font></font>.
<br>
BT<font color="008000">W<font color="008000">,</font> what </font>would happen <font color="008000">
if the monitor t<font color="008000">h<font color="008000">read signal the trigger twice because 2 frames arrive<font color="008000">d
<font color="008000">almost simul<font color="008000">taneously (and <font color="008000">
<font color="008000">doGetNextFrame()</font></font></font></font></font></font></font></font> hadn't been called yet for the first frame)?</font><br>
</div>
<div><br>
</div>
<div>Also, because you're delivering discrete H.264 NAL units (i.e., one at a time), your "OnDemandServerMediaSubclass::createNewStreamSource()" implementation should be feeding your input source object into a "H264VideoStreamDiscreteFramer", not a "H264VideoStreamFramer".
  (Note that, in this case, the H.264 NAL units from your input source must *not* begin with a 'start code' (0x00 0x00 0x00 0x01).)<br>
<font color="008000">[Fabrice] I am using an MPEG4VideoStreamDiscreteFramer, as in wis-streamer. Is that wrong? Should I discard the start code if I use MPEG4VideoStreamDiscreteFramer? Same question if I use H264VideoStreamDiscreteFramer?<br>
Here is the implementation of my createNewStreamSource() method:<br>
</font>
<blockquote><font face="Courier New" size="2"><font color="008000">FramedSource* CVideoSubsession::createNewStreamSource(unsigned clientSessionId,<br>
        unsigned& estimatedBitRate)<br>
{<br>
    // TODO: This is a leak, the CAvSource object should be a property<br>
    CAvSource* src = CAvSource::createNew(envir(), "vid_h264_hd", "output");<br>
    if (NULL == src)<br>
    {<br>
        return NULL;<br>
    }<br>
<br>
    return MPEG4VideoStreamDiscreteFramer::createNew(envir(), src);<br>
}</font><br>
</font><br>
</blockquote>
</div>
<div>Finally, because you're delivering from a live source (rather than a prerecorded source like a file), you don't need to set "fDurationInMicroseconds".<br>
<font color="008000">[Fabrice] Is is bad if I do?</font><br>
</div>
<br>
<div><span class="Apple-style-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; orphans:2; text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px"><span class="Apple-style-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; orphans:2; text-indent:0px; text-transform:none; white-space:normal; widows:2; 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>
</div>
</div>
</div>
</body>
</html>