<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 9pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Hi Ross,<BR>
&nbsp;<BR>
I am sorry to trouble you again! I hope this&nbsp;will be the last question.<BR>
&nbsp;<BR>
I think I have solved the doEventLoop "delay" problem with your helps,thanks.<BR>
&nbsp;<BR>
But another problem came out:<BR>
&nbsp;<BR>
The program runs fine at the beginning. However,&nbsp;a few minutes later, the doGetNextFrame()<BR>
&nbsp;<BR>
function is called abnormal: After delivering the data, it delays a few seconds, and then call<BR>
&nbsp;<BR>
doGetNextFrame(). In a normal way, I think it should be called immediately after delivering the <BR>
&nbsp;<BR>
data.This lead to my client's playing speed slow down. I&nbsp;have tried&nbsp;both mplayer and openrtsp<BR>
&nbsp;<BR>
in the client, and got&nbsp;the same result.&nbsp;Can you give me some hints?<BR>
&nbsp;<BR>
Thanks<BR>
&nbsp;<BR>
&nbsp;<BR>
My code:<BR>
&nbsp;<BR>
void H264VideoStreamDiscreteFramer::doGetNextFrame()<BR>&nbsp;{<BR>&nbsp;<BR>
&nbsp;&nbsp;dummyTask(Null);<BR>
<BR>&nbsp; envforH264-&gt;taskScheduler().doEventLoop(HasItemForH264);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp; deliverFrame();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>
&nbsp;<BR>
<BR>void&nbsp; H264VideoStreamDiscreteFramer::deliverFrame()<BR>{<BR>&nbsp;&nbsp;&nbsp; if (!isCurrentlyAwaitingData()) return; // we're not ready for the data yet<BR>
pthread_mutex_lock(mutexforH264);<BR>
&nbsp; if(*HasItemForH264==99)<BR>{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fFrameSize=*LengthForH264;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //LengthForH264 is defined in another thread&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fFrameSize &gt; fMaxSize) {<BR>&nbsp;&nbsp;&nbsp;fNumTruncatedBytes = fFrameSize - fMaxSize;<BR>&nbsp;&nbsp;&nbsp;fFrameSize = fMaxSize;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(fTo, BufferForH264, fFrameSize);&nbsp;&nbsp;&nbsp;&nbsp; //BufferForH264 is defined in another thread<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * HasItemForH264=0;<BR>
<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;pthread_mutex_unlock(mutexforH264);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;// After delivering the data, inform the reader that it is now available:<BR>&nbsp; FramedSource::afterGetting(this);<BR>&nbsp; <BR><BR>}<BR><br /><hr />通过 MSN Spaces,可以直接用电子邮件发布网络日志,上载笑话、照片等。它是免费的! <a href='http://spaces.msn.com' target='_new'>它是免费的!</a></body>
</html>