<div dir="ltr"><div><div><div><div><div><div>Check Byte Alignment,Pixel format, and encoder slices.<br></div><div><br>How are you encodeing them? If the frames are large, then the encoder may spit out more than one frame with the same timestamp and differnt sequence number.<br>
</div>Nal units may be [7][8][5][5][5][1][1][1]... instead of simply [7][8][5][1][1][1]....<br><br></div>There is also the original sampling pixle buffer stuff Is it YUV 4:2:2 or 4:4:1 <br><br></div><a href="http://www.fourcc.org/yuv.php">http://www.fourcc.org/yuv.php</a><br>
<br></div>Since this determines the layout in memory for each frame it could show up this way.<br><br></div>Just looking at the images. it almost looks like the byte alignment is not being honoured and the frame is cut off. I do not see loss of color levels which happens when you get all the Y and miss the end of the frame that is packed [ydata][udata][vdata] <br>
<br></div>It looks instead like first the lines are not an exact power of two in length and the pading is missed causeing the image to shear to the right a bit each line. It can cause you to run out of pixels if they are off in some byte-alignment off-screen area and then the rest of the image just shows tha last known pixels over and over.<br>
<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 15, 2014 at 7:17 AM, Vikram Singh <span dir="ltr"><<a href="mailto:vikram@vizexperts.com" target="_blank">vikram@vizexperts.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="purple" lang="EN-US"><div><p class="MsoNormal">Hi Everyone,<u></u><u></u></p><p class="MsoNormal">
<u></u> <u></u></p><p class="MsoNormal">I am trying to stream the frames I capture from OpenGL frame buffer.<u></u><u></u></p><p class="MsoNormal">I am using LIVE555 library code for that and I am trying to stream it using RTSP.<u></u><u></u></p>
<p class="MsoNormal">I encode the frames to H264 format.<u></u><u></u></p><p class="MsoNormal">I have written a custom class “<b>LiveSourceWithx264</b>” which derives from “<b>FramedSource</b>”.<u></u><u></u></p><p class="MsoNormal">
This class has the function “<b>doGetNextFrame()</b>”  and it has the following code.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">        <b><i><span style>gettimeofday(&currentTime,NULL);<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style>        if(!isCurrentlyAwaitingData()) return;<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>    <u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>       void* buf = NULL;<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style>      buf = RTSPstreamQueue->getBuf( fFrameSize, false );<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style><u></u> <u></u></span></i></b></p><p class="MsoNormal" style="text-indent:.5in">
<b><i><span style>if ( fFrameSize > fMaxSize )<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>               {<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>                              fNumTruncatedBytes = fFrameSize - fMaxSize;<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style>                              fFrameSize = fMaxSize;<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>               }<u></u><u></u></span></i></b></p><p class="MsoNormal">
<b><i><span style>                              <u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>        fPresentationTime = currentTime;<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>        memmove(fTo, buf, fFrameSize);<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style><u></u> <u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>        RTSPstreamQueue->releaseBuf();<u></u><u></u></span></i></b></p><p class="MsoNormal"><b><i><span style>        FramedSource::afterGetting(this);<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style><u></u> <u></u></span></i></b></p><p class="MsoNormal"><span style>In the above code <b>RTSPstreamQueue<i> </i></b>function returns a pointer to the frame and the sets the size of the frame in the variable fFrameSize.<u></u><u></u></span></p>
<p class="MsoNormal"><span style><u></u> <u></u></span></p><p class="MsoNormal"><span style>But if fFrameSize is greater than fMaxSize then I have to truncate the data.<u></u><u></u></span></p><p class="MsoNormal"><span style>I think this is what that is causing the corrupted frames.<u></u><u></u></span></p>
<p class="MsoNormal"><span style>Please take a look at the attachments to get an idea how the frames are getting corrupted.<u></u><u></u></span></p><p class="MsoNormal"><span style><u></u> <u></u></span></p><p class="MsoNormal">
<span style>Is there any way to get around this problem.<u></u><u></u></span></p><p class="MsoNormal"><span style>Any pointer would be appretiated.<u></u><u></u></span></p><p class="MsoNormal"><span style><u></u> <u></u></span></p>
<p class="MsoNormal"><span style>Thanks<span class="HOEnZb"><font color="#888888"><u></u><u></u></font></span></span></p><span class="HOEnZb"><font color="#888888"><p class="MsoNormal"><span style>Vikram Singh.<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p></font></span></div></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>