unsigned char * src = (unsigned char* )bufIn + RTP_HEADLEN;
unsigned char head1 = * src; // 获取第一个字节
unsigned char head2 = * (src + 1 ); // 获取第二个字节
unsigned char nal = head1 & 0x1f; // 获取FU indicator的类型域,
unsigned char flag = head2 & 0xe0 ; // 获取FU header的前三位,判断当前是分包的开始、中间或结束
unsigned char nal_fua = (head1 & 0xe0 ) | (head2 & 0x1f); // FU_A nal
bool bFinishFrame = false ;
if (nal == 0x1c ) // 判断NAL的类型为0x1c=28,说明是FU-A分片
{ // fu-a
if (flag== 0x80 ) // 开始
{
* pBufOut = src - 3 ;
* (( int * )( * pBufOut)) = 0x01000000 ; // zyf:大模式会有问题
* ((char * )( * pBufOut) + 4 ) = nal_fua;
* pOutLen = len - RTP_HEADLEN + 3 ;
}
else if (flag == 0x40 ) // 结束
{
* pBufOut = src + 2 ;
* pOutLen = len - RTP_HEADLEN - 2 ;
}
else // 中间
{
* pBufOut = src + 2 ;
* pOutLen = len - RTP_HEADLEN - 2 ;
}
}
else // 单包数据
{
* pBufOut = src - 4 ;
* (( int * )( * pBufOut)) = 0x01000000 ; // zyf:大模式会有问题
* pOutLen = len - RTP_HEADLEN + 4 ;
}
unsigned char * bufTmp = (unsigned char* )bufIn;
if (bufTmp[ 1 ] & 0x80 )
{
bFinishFrame = true ; // rtp mark
}
else
{
bFinishFrame = false ;
}
return bFinishFrame;
}
unsigned char head1 = * src; // 获取第一个字节
unsigned char head2 = * (src + 1 ); // 获取第二个字节
unsigned char nal = head1 & 0x1f; // 获取FU indicator的类型域,
unsigned char flag = head2 & 0xe0 ; // 获取FU header的前三位,判断当前是分包的开始、中间或结束
unsigned char nal_fua = (head1 & 0xe0 ) | (head2 & 0x1f); // FU_A nal
bool bFinishFrame = false ;
if (nal == 0x1c ) // 判断NAL的类型为0x1c=28,说明是FU-A分片
{ // fu-a
if (flag== 0x80 ) // 开始
{
* pBufOut = src - 3 ;
* (( int * )( * pBufOut)) = 0x01000000 ; // zyf:大模式会有问题
* ((char * )( * pBufOut) + 4 ) = nal_fua;
* pOutLen = len - RTP_HEADLEN + 3 ;
}
else if (flag == 0x40 ) // 结束
{
* pBufOut = src + 2 ;
* pOutLen = len - RTP_HEADLEN - 2 ;
}
else // 中间
{
* pBufOut = src + 2 ;
* pOutLen = len - RTP_HEADLEN - 2 ;
}
}
else // 单包数据
{
* pBufOut = src - 4 ;
* (( int * )( * pBufOut)) = 0x01000000 ; // zyf:大模式会有问题
* pOutLen = len - RTP_HEADLEN + 4 ;
}
unsigned char * bufTmp = (unsigned char* )bufIn;
if (bufTmp[ 1 ] & 0x80 )
{
bFinishFrame = true ; // rtp mark
}
else
{
bFinishFrame = false ;
}
return bFinishFrame;
}