<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 9pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>hi Zkunhui,<BR>
&nbsp;&nbsp; Thanks for your works and your reply for my questions.I want to&nbsp;get the file you said&nbsp;about NAL&nbsp;units.<BR>
&nbsp;&nbsp; Again, I want to ask a question which i refered in previous question: If the size of NAL unit is bigger than fMaxsize(should I set fMaxsize myself?),<BR>
&nbsp;&nbsp; then&nbsp;  fFrameSize=fMaxsize,fNumTruncatedBytes = fFrameSize - fMaxSize&nbsp; ,as the code below:<BR>
&nbsp;<BR>
/////////////////////////////////////////////////&nbsp;<BR>
&nbsp;if (fFrameSize &gt; fMaxSize) {<BR>&nbsp;&nbsp;&nbsp;fNumTruncatedBytes = fFrameSize - fMaxSize;<BR>&nbsp;&nbsp;&nbsp;fFrameSize = fMaxSize;<BR>&nbsp;&nbsp;}<BR>
&nbsp;<BR>
&nbsp;memcpy(fTo,Encode_data,fFrameSize);&nbsp;&nbsp;&nbsp;&nbsp; //Encode_data is defined in another thread<BR>
//////////////////////////////////////////////////<BR>
&nbsp;<BR>
but how to deal with the fNumTruncatedBytes data?<BR>
&nbsp;<BR>
in H264VideoRTPSink.cpp , i see the clue below, should i do it like this in deliverFrame()?<BR>
&nbsp;<BR>
// We have NAL unit data in the buffer.&nbsp; There are three cases to consider:<BR>&nbsp;&nbsp;&nbsp; // 1. There is a new NAL unit in the buffer, and it's small enough to deliver<BR>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; to the RTP sink (as is).<BR>&nbsp;&nbsp;&nbsp; // 2. There is a new NAL unit in the buffer, but it's too large to deliver to<BR>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; the RTP sink in its entirety.&nbsp; Deliver the first fragment of this data,<BR>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; as a FU-A packet, with one extra preceding header byte.<BR>&nbsp;&nbsp;&nbsp; // 3. There is a NAL unit in the buffer, and we've already delivered some<BR>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; fragment(s) of this.&nbsp; Deliver the next fragment of this data,<BR>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; as a FU-A packet, with two extra preceding header bytes.<BR>
&nbsp;<BR>
&nbsp;<BR>
Thanks in advance. I am looking forward helps from anyone!<BR><BR><BR><BR>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #008080 2px solid; MARGIN-RIGHT: 0px">
<HR id=EC_stopSpelling>
Date: Sat, 6 Jan 2007 07:06:36 +0800<BR>From: TAYK0004@ntu.edu.sg<BR>To: live-devel@ns.live555.com<BR>Subject: [Live-devel] getNextFrame Variables<BR><BR>
<META content="Microsoft SafeHTML" name=Generator>
<DIV><FONT face=Arial color=#000000 size=2>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial">Hi guys,</SPAN></P>
<P class=EC_MsoNormal><FONT size=3><FONT face="Times New Roman">&nbsp;</FONT></FONT></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">once again, great thanks to Ross for helping me clear many doubts in RTP.</SPAN></P>
<P class=EC_MsoNormal><FONT size=3><FONT face="Times New Roman">&nbsp;</FONT></FONT></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">I have some uncertainties regarding DoGetNextFrame() Variables, which I hope anyone can assist.</SPAN></P>
<P class=EC_MsoNormal><FONT size=3><FONT face="Times New Roman">&nbsp;</FONT></FONT></P>
<P class=EC_MsoNormal><STRONG><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">fTO</SPAN></STRONG><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> : a RTP buffer, we are to copy video data into this buffer for framing</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">eg.</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp; g_video_enc_rbuf-&gt;read(fTo, fMaxSize, 0); //the read function will copy the data to fTo</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-FAMILY: Arial"><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: SimSun">&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">memcpy(fTo,g_video_enc_rbuf,fFrameSize); // using memcpy function</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">fPresentationTime</SPAN></B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">: give time information to each frame</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">eg. </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">gettimeofday(&amp;fPresentationTime, NULL); //a simpler form</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">// a more detailed form</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">if (fPresentationTime.tv_sec == 0 &amp;&amp; fPresentationTime.tv_usec == 0) {</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // This is the first frame, so use the current time:</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gettimeofday(&amp;fPresentationTime, NULL);</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; } else {</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Increment by the play time of the previous frame (50ms), my encoder’s frame rate is 20fps</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; unsigned uSeconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = fPresentationTime.tv_usec + 50000;</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; fPresentationTime.tv_sec += uSeconds/1000000;</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; fPresentationTime.tv_usec = uSeconds%1000000;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">fMaxSize</SPAN></B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">: Setting the maximum size of a rtp frame. Not necessary if you have already set your encoder to limit the size of a frame. For truncation purpose.</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">eg. Can anyone provide some examples on setting fMaxSize?</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">fFrameSize</SPAN></B><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">: Determine the RTP frame size</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">eg. Can anyone provide some examples on setting fFrameSize?</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial"></SPAN>&nbsp;</P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial"></SPAN>&nbsp;</P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">That’s all I can think of for the variables for DoGetNextFrame. If I miss out anything, pls kindly add in.</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">I compiling all the emails which contains information on these information so that anyone in future can refer to them instead of asking again in the mailing list. I can share a file which I have done detailing on NAL units so that people doing h.264 framer can have a better understanding when writing the code.</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">Many thanks and regards.</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">&nbsp;</SPAN></P>
<P class=EC_MsoNormal><SPAN style="FONT-SIZE: 10pt; COLOR: #333333; FONT-FAMILY: Arial">Zkunhui</SPAN></P></FONT><FONT face=Arial size=2></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV></BLOCKQUOTE><br /><hr />通过 MSN Spaces,可以直接用电子邮件发布网络日志,上载笑话、照片等。它是免费的! <a href='http://spaces.msn.com' target='_new'>它是免费的!</a></body>
</html>