<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Trebuchet MS";
panose-1:2 11 6 3 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">A pipe is just that, there is not normally any framing involved so is just a stream of bytes, with multiple “frames” running on form
one another.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">You can either add a frame header that tells you the size of the data to read (and any other data like presentation time, etc.), which
your source can read, remove and just pass the correct sized data through..<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Alternatively, use some other form of IPC or events to say that a full frame has sent, read any available data.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F">--
<o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F">Deanna Earley |</span></b><span style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F"> Lead d</span><span style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F">eveloper <b>| </b></span><b><span lang="EN-US" style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:black">icatcher</span></b><b><span lang="EN-US" style="font-size:10.5pt;font-family:"Trebuchet MS",sans-serif;color:#FF9223">cctv</span></b><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:"Calibri",sans-serif;color:black"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F">w:
</span><u><span lang="EN-US" style="font-size:9.0pt;font-family:"Trebuchet MS",sans-serif;color:#595959"><a href="http://www.icode.co.uk/icatcher"><span style="color:blue">www.icode.co.uk/icatcher</span></a></span></u><span lang="EN-US" style="font-size:9.0pt;font-family:"Trebuchet MS",sans-serif;color:#5E5E5F">
| t: 01329 835335 | f: 01329 835338</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri",sans-serif;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:7.5pt;font-family:"Trebuchet MS",sans-serif;color:#919191">Registered Office : 71 The Hundred, Romsey, SO51 8BZ. Company Number : 03428325</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri",sans-serif;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> live-devel [mailto:live-devel-bounces@ns.live555.com]
<b>On Behalf Of </b>Xingjun Chen<br>
<b>Sent:</b> 31 March 2015 00:28<br>
<b>To:</b> live-devel@ns.live555.com<br>
<b>Subject:</b> [Live-devel] DeviceSource Streaming from raw living H264 byte-stream.<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi Ross and all other developers,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I currently wrote my own "DeviceSource" as the video source to open the read side of a pipe and reading video stream from there, the write side of the pipe is feeded by my OMAX call back function, which keep pushing raw H264 byte-stream
frame by frame, meanwhile in the "doGetNextFrame" function, I read "PIPE_BUF" size of data from pipe, and then deliver the whole buffer data using "deliverFrame()".<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This works fine indeed, but this stupid way introduce "PIPE_BUF" size buffer delay and cause choppy and glitch when streaming, since it not handle the time stamp frame by frame, my question is how to use deliverFrame() to pass the stream
frame by frame along with size of Frame, and the pipe buffer is really needed for this pipeline, can I memory copy the frame and delivery it as soon as the frame is ready.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">or is there have have any other good choice for raw H264 buffer stream I can use.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thank you.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<p class="MsoNormal">Kevin<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>