<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Hi,<br>
      Do you have SPS and PPS being passed from Live Input and are they
      okay?<br>
      Marcin<br>
      <br>
      W dniu 2014-12-23 o 11:23, Shubham Goyal pisze:<br>
    </div>
    <blockquote
      cite="mid:578B40ED-12BB-49ED-90A4-A8265BD8A4DE@gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      Hi all
      <div class=""><br class="">
      </div>
      <div class="">Based on the FAQ for live input, I wrote my own
        subclasses for FramedSource and OnDemandServerMediaSubsession to
        implement a unicast server that can stream a live input. My live
        input source is a H264 encoded frame grab of my desktop using
        the Nvidia GRID SDK (which internally uses Nvenc.) </div>
      <div class=""><br class="">
      </div>
      <div class="">Before passing the frames to live555 I also removed
        the start codes in every frame and created a queue of NAL units.
        The first frame of every stream contains 3 NALs. And a single
        NAL in every subsequent frame. An example of the output:</div>
      <div class="">
        <div class=""><br class="">
        </div>
        <div class="">Start code found in frame 1</div>
        <div class="">NAL size: 24</div>
        <div class="">67 42 C0 0D 95 A0 D3 F9 67 C0 52 83 02 03 20 00 00
          7D 00 00 1D 4C 10 80</div>
        <div class=""><br class="">
        </div>
        <div class="">Start code found in frame 1</div>
        <div class="">NAL size: 4</div>
        <div class="">68 CE 3C 80</div>
        <div class=""><br class="">
        </div>
        <div class="">Start code found in frame 1</div>
        <div class="">NAL size: 3228</div>
        <div class="">65 B8 04 7F C4 44 D4 08 00 0C 07 8A 00 02 01 D3 58
          0E 93 93 00 2D 11 F3 D9 04 BA</div>
        <div class=""> 48 99 6A 65 D3 81 79 07 92 B2 95 81 1D BD CF E4
          70 86 7E F1 41 B9 35 76 9C 28 2</div>
        <div class="">A E6 3D 30 6A 2E C0 99 91 99 2F 22 3E FF 19 54 3B
          13 4C C0 38 15 7F F2 7E FB CD</div>
        <div class="">… //a lot of data, removed for readability</div>
        <div class="">5B 5B 5B 5B 5F 6B FF FF C1 54 20 04 E7 38 40 25 29
          41 C0 04 00 43 3C 1C 00 40 08</div>
        <div class=""> 67 </div>
        <div class=""><br class="">
        </div>
        <div class="">Start code found in frame 2 // Note: second frame
          here</div>
        <div class="">NAL size: 1820</div>
        <div class="">61 E0 20 BF C6 C1 23 80 78 54 98 07 2C C0 09 50 7A
          A4 C0 72 CA 91 8F 2D E5 00 4E</div>
        <div class=""> 82 01 04 03 A1 8B 24 A2 9C B5 F1 98 E0 3E 08 0C
          0A 85 00 CF 12 05 E3 B1 36 82 F0</div>
        <div class=""> … //a lot of data, removed for readability</div>
        <div class=""> CC 65 72 DF FF D8 83 F3 A6 53 3F C4 2E 21 71 0B
          88 5C 42 E2 17 10 BF 70 1C 43 2</div>
        <div class="">A 4B 03 88 65 49 6F</div>
        <div class=""><br class="">
        </div>
      </div>
      <div class="">//Third frame.. and so forth</div>
      <div class=""><br class="">
      </div>
      <div class="">Upon playing the RTSP stream using VLC my output is
        blank. VLC is receiving data because the seconds clock in VLC
        starts ticking as soon as the stream is played but the output is
        completely blank. I tried a lot of combinations in sending the
        data including the start codes, sending individual/multiple NALs
        per frame, but nothing is working. I was not sure if my data was
        correct, so I wrote it to a file (with start codes) and the file
        played back successfully. I even streamed the file using the
        “testOnDemandRTSPServer” test program and that worked too. There
        is definitely something that isn’t right and I’m not able to
        figure it out. Would appreciate if somebody could point me in
        the right direction. I am including some of my source code below
        for reference.</div>
      <div class=""><br class="">
      </div>
      <div class="">Thanks,</div>
      <div class="">Shubham</div>
      <div class=""><br class="">
      </div>
      <div class=""><b class="">——testOnDemandRTSPServer.cpp—— </b></div>
      <div class="">
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class=""> </span>//Live h264 based GRID stream</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class="">//Note: This is
          only a part of the file, not the entire file</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    <span style="color: #0433ff" class="">char</span>
          <span style="color: #0433ff" class="">const</span>* streamName
          = <span style="color: #b4261a" class="">"grid"</span>;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    ServerMediaSession* sms</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">      =
          ServerMediaSession::createNew(*env, streamName, streamName,</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>      descriptionString);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">   
          sms->addSubsession(GridServerMediaSubsession::createNew(*env,
          reuseFirstSource));</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">   
          rtspServer->addServerMediaSession(sms);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    announceStream(rtspServer, sms,
          streamName, <span style="color: #b4261a" class="">"no file"</span>);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  }</div>
      </div>
      <div class=""><b class="">——testOnDemandRTSPServer.cpp—— </b></div>
      <div class=""><br class="">
      </div>
      <div class=""><b class="">——GridServerMediaSubsession.cpp——</b></div>
      <div class="">
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(180, 38, 26);" class=""><span
            style="color: #0433ff" class="">#include</span><span
            style="color: #000000" class=""> </span>"GridServerMediaSubsession.hh"</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(180, 38, 26);" class=""><span
            style="color: #0433ff" class="">#include</span><span
            style="color: #000000" class=""> </span>"H264VideoRTPSink.hh"</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(180, 38, 26);" class=""><span
            style="color: #0433ff" class="">#include</span><span
            style="color: #000000" class=""> </span>"GridSource.hh"</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(180, 38, 26);" class=""><span
            style="color: #0433ff" class="">#include</span><span
            style="color: #000000" class=""> </span>"H264VideoStreamDiscreteFramer.hh"</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridServerMediaSubsession*</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridServerMediaSubsession::createNew(UsageEnvironment&
          env,</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>      Boolean
          reuseFirstSource) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">return</span>
          <span style="color: #0433ff" class="">new</span>
          GridServerMediaSubsession(env, reuseFirstSource);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridServerMediaSubsession::GridServerMediaSubsession(UsageEnvironment&
          env, Boolean reuseFirstSource)</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  : OnDemandServerMediaSubsession(env,
          reuseFirstSource) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridServerMediaSubsession::~GridServerMediaSubsession()
          {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">FramedSource*
          GridServerMediaSubsession::createNewStreamSource(<span
            style="color: #0433ff" class="">unsigned</span> <span
            style="color: #008f00" class="">/*clientSessionId*/</span>,
          <span style="color: #0433ff" class="">unsigned</span>&
          estBitrate) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  estBitrate = 700; <span style="color:
            #008f00" class="">// kbps, estimate</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  </span>// Create the video source:</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  GridSource* liveSource =
          GridSource::createNew(envir());</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  </span>// Create a framer for the Video
          Elementary Stream:</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">return</span>
          H264VideoStreamDiscreteFramer::createNew(envir(), liveSource);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">RTPSink* GridServerMediaSubsession</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">::createNewRTPSink(Groupsock*
          rtpGroupsock,</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>   <span style="color:
            #0433ff" class="">unsigned</span> <span style="color:
            #0433ff" class="">char</span> rtpPayloadTypeIfDynamic,</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>   FramedSource* <span
            style="color: #008f00" class="">/*inputSource*/</span>) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">return</span>
          H264VideoRTPSink::createNew(envir(), rtpGroupsock,
          rtpPayloadTypeIfDynamic);</div>
      </div>
      <div class=""><b class="">——GridServerMediaSubsession.cpp——</b></div>
      <div class=""><br class="">
      </div>
      <div class=""><b class="">—— GridSource.cpp ——</b></div>
      <div class="">
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridSource*</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridSource::createNew(UsageEnvironment&
          env) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>AppArguments args; <span
            style="color: rgb(0, 143, 0);" class="">//for input
            configuration</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class=""><span class="Apple-tab-span"
              style="white-space:pre"> </span>//some code removed for
            readability</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">return</span>
          <span style="color: #0433ff" class="">new</span>
          GridSource(env, args);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">EventTriggerId GridSource::eventTriggerId
          = 0;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">unsigned</span>
          GridSource::referenceCount = 0;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">unsigned</span>
          GridSource::frameCount = 0;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridSource::GridSource(UsageEnvironment&
          env,</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>   AppArguments args)</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  : FramedSource(env), fargs(args) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">if</span>
          (referenceCount == 0) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    <span style="color: rgb(0, 143, 0);"
            class="">//encoder is initialised here. Some code removed
            for readability </span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class="">  </span>}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  ++referenceCount;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">if</span>
          (eventTriggerId == 0) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    eventTriggerId =
          envir().taskScheduler().createEventTrigger(deliverFrame0);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  }</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">GridSource::~GridSource() {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  --referenceCount;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">if</span>
          (referenceCount == 0) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span><span style="color:
            #0433ff" class="">if</span> (encoder)</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">        encoder->NvFBCH264Release();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    }</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">    </span>// Reclaim our 'event trigger'</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">   
          envir().taskScheduler().deleteEventTrigger(eventTriggerId);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    eventTriggerId = 0;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  }</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">void</span>
          GridSource::doGetNextFrame() {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><br class="">
        </div>
        <div style="margin: 0px;" class=""><span class="Apple-tab-span"
            style="font-family: Consolas; font-size: 9.5px; white-space:
            pre;"> </span><font class="" color="#008f00"
            face="Consolas"><span style="font-size: 9.5px;" class="">//Note:
              next frame is read only after previous frame</span></font><font
            class="" color="#008f00" face="Consolas" size="1">’</font><font
            class="" color="#008f00" face="Consolas"><span
              style="font-size: 9.5px;" class="">s NALs have been
              delivered.</span></font></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span><span style="color:
            #0433ff" class="">if</span>(nalQ.isEmpty()){</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>   frameCount++;</div>
        <div style="margin: 0px;" class=""><span style="font-family:
            Consolas; font-size: 9.5px;" class=""><span
              class="Apple-tab-span" style="white-space:pre"> </span> 
             populateQ(); </span><font class="" color="#008f00"
            face="Consolas"><span style="font-size: 9.5px;" class="">//load
              the NALs for each frame. NALs </span></font><font class=""
            color="#008f00" face="Consolas" size="1">stored</font><font
            class="" color="#008f00" face="Consolas"><span
              style="font-size: 9.5px;" class=""> in nalQ</span></font></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span class="Apple-tab-span"
            style="white-space:pre"> </span>deliverFrame();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">void</span>
          GridSource::deliverFrame0(<span style="color: #0433ff"
            class="">void</span>* clientData) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""> 
          ((GridSource*)clientData)->deliverFrame();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">void</span>
          GridSource::populateQ(){</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class="">//frame is grabbed by the GRID SDK</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class="">//NALs for every frame are pushed to nalQ</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class="">//Some code removed for readability</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class=""><br class="">
          </span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">while(<font class="" color="#008f00">/*frame
            data is available in frame buffer*/</font>){</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    if(<span style="color: rgb(0, 143,
            0);" class="">/*star code found in frame buffer*/</span>)</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: rgb(0, 143, 0);"
            class=""><span class="Apple-tab-span"
              style="white-space:pre"> </span></span><span
            style="font-size: 9.5px;" class="">nalQ.pushNAL(outputPtr,byteSize); </span><span
            style="color: rgb(0, 143, 0);" class="">//data until next
            start code or until end of buffer - Note: data excludes
            start codes</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">   }</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class="">
          <div class=""><br class="">
          </div>
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class=""><span style="color: #0433ff" class="">void</span>
          GridSource::deliverFrame() {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  </span><span style="color: #0433ff"
            class="">if</span><span style="color: #000000" class="">
            (!isCurrentlyAwaitingData()) </span><span style="color:
            #0433ff" class="">return</span><span style="color: #000000"
            class="">; </span>// we're not ready for the data yet</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  NAL* nal = nalQ.popNAL();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  nal->print();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  </span>// Deliver the data here:</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  <span style="color: #0433ff" class="">if</span>
          (nal->getSize() > fMaxSize) {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    fFrameSize = fMaxSize;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    fNumTruncatedBytes = nal->getSize()
          - fMaxSize;</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  } <span style="color: #0433ff" class="">else</span>
          {</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">    fFrameSize = nal->getSize();</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  }</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  gettimeofday(&fPresentationTime,
            NULL); </span></div>
        <p style="margin: 0px; font-size: 9.5px; font-family: Consolas;
          min-height: 11px;" class="">  </p>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  fDurationInMicroseconds = 1000000/30; <span
            style="color: rgb(0, 143, 0);" class="">//30 fps</span></div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  memmove(fTo, nal->getPayload(),
          fFrameSize);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; min-height: 11px;" class=""><br class="">
        </div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas; color: rgb(0, 143, 0);" class=""><span style="color:
            #000000" class="">  </span>// After delivering the data,
          inform the reader that it is now available:</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">  FramedSource::afterGetting(<span
            style="color: #0433ff" class="">this</span>);</div>
        <div style="margin: 0px; font-size: 9.5px; font-family:
          Consolas;" class="">}</div>
      </div>
      <div class=""><br class="">
      </div>
      <div class=""><b class="">——GridSource.cpp—— </b></div>
      <div class=""><br class="">
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
live-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:live-devel@lists.live555.com">live-devel@lists.live555.com</a>
<a class="moz-txt-link-freetext" href="http://lists.live555.com/mailman/listinfo/live-devel">http://lists.live555.com/mailman/listinfo/live-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>