|
RecvDataBySocket( unsigned char* dst, int nSize )
{
int nRet = -1;
int nRecv = 0;
char szTrace[MAX_PATH] = "";
// static int nCount = 0;
if ( NULL == m_pRecvBuf || nSize > m_nRecvBufLen )
{
if ( m_pRecvBuf )
{
free( m_pRecvBuf );
m_pRecvBuf = NULL;
m_nRecvBufLen = 0;
}
m_pRecvBuf = (unsigned char*)malloc(nSize+1);
if ( NULL == m_pRecvBuf )
return nRet;
m_nRecvBufLen = nSize;
}
do {
nRecv = recvfrom(m_sockSrv, (char*)m_pRecvBuf, nSize, 0, (SOCKADDR* )&m_addCli, &m_nfromlen);
if ( nRecv > m_nRtpHdrLen && m_bRunning )
{
m_pRtpHdr = (RTPHeader*)m_pRecvBuf;
nRecv -= m_nRtpHdrLen;
// sprintf( szTrace, "Sequence Number = %d, Marker = %d", ntohs(m_pRtpHdr->sequencenumber), m_pRtpHdr->marker );
// ATX_TRACE(AV_LOG_ERROR, szTrace, 0 );
memcpy( dst, m_pRecvBuf + m_nRtpHdrLen, nRecv );
nRet = nRecv;
}
} while(m_bRunning && -1 == nRet);
return nRet;
}
应用程序一直通过回调函数来调用RecvDataBySocket函数接收Camera发来的数据 |
|