while (true)
{
m_My_sess.BeginDataAccess();
// check incoming packets
if (m_My_sess.GotoFirstSourceWithData())
{
do
{
RTPPacket *pack;
RTPSourceData *srcdat;
srcdat = m_My_sess.GetCurrentSourceInfo();
while ((pack = m_My_sess.GetNextPacket()) != NULL)
{
//数据处理
MyProcessPacket(pack,srcdat);
// we don't longer need the packet, so
// we'll delete it
m_My_sess.DeletePacket(pack);
}
} while (m_My_sess.GotoNextSourceWithData());
}
m_My_sess.EndDataAccess();
//
// 这里有个问题,没有处理的SourceData,会在循环开始的时候立即又能得到(m_My_sess.GotoFirstSourceWithData()).
// 除非被m_My_sess.DeletePacket(pack);
Sleep(20);//接完所有数据后,休息500毫秒
}
——————————————————————————————————————
上面的Sleep20毫米,在安卓系统中如果放到m_My_sess.EndDataAccess() 上面会导致严重阻塞,既不能发rtp包又不能收rtp包,这仅仅是现象,具体原因我不太清楚,也请知道的达人留言指导一下。
——————————————————————————————————————-
我分析情况如下,因为收到的包是断断续续的没包20字节,所以包特别多。导致总是睡眠接收就阻塞了。然后发送也无法成功
————————————————————————————————————
具体原因我不太清楚,可能分析的也不正确,也请知道的达人留言指导一下。
评论