海思 UDP解码小结
最近一直在做海思项目,今天早上进行了UDP解码和显示。但是怎么看,解码下来的视频在底部会时不时的出现一些马赛克,然后我用秒表测试了下延时,发现及时流的达到了300毫秒。觉得不太对,正常情况下,四路解码不会超过200毫秒。于是开始了一天的折腾。刚开始总是认为是我在处理帧的问题。于是对帧进行了一步一步的排查,干了一上午。没发现问题。没办法,只能把所有的代码重新再阅读一篇,好吧,在接受UDP数据时,存放环形BUF时,发现了问题。首先,对接受时有数据一定不能延时,要马上进行再次接受,对无数据时,可以适当的延时。对代码稍作修改。所有一切正常!!!!!!!所以写代码,一定在刚开始写的时候就要注意好这些小细节,否则,会花费大量的时间去回溯代码。。。具体的错误如下:
while(1)
{
nreads = Socket1->Receive(buf,buflen,destIp,destPort);
if(nreads>0)
CircleBuf->Write(buf,nreads);
usleep(1000);
}
修改
while(1)
{
nreads = Socket1->Receive(buf,buflen,destIp,destPort);
if(nreads>0)
CircleBuf->Write(buf,nreads);
else
usleep(1000);
}