网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月13日漏签0天
linux吧 关注:501,266贴子:2,567,724
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 4回复贴,共1页
<<返回linux吧
>0< 加载中...

函数返回无返回值

  • 取消只看楼主
  • 收藏

  • 回复
  • qibo15193
  • -----r-x
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
unsigned char *x264_rtp_unpackage( void *bufIn,int len)
{ //bufIn socket 接收到的rtp数据包, len 接收到rtp数据包长度,
//pBufOut 输出解包后数据包含nalu头部,pOutLen 解包包含nalu头的数据长度
int i=0;
int m_bSPSFound=0; //sps发现标志
int m_bWKFrame=1;//等待关键帧
int m_bAssemblingFrame=0;//组合帧
int m_bPFrameEnd=0; //结束帧
unsigned char *m_pStart;//起始
unsigned char *m_pEnd; //结束
int m_dwSize;
short int m_wSeq;
int m_ssrc=0;
int PayloadType;
int NALType = PayloadType;
int outsize;
int PayloadSize;//RTP负载长度,包括nalu头
int m_H264PAYLOADTYPE = 96; //负载类型
unsigned char *pBuf;
unsigned char *pPayload; //从rtp包第13个字节开始为RTP负载,包括nalu头和nalu负载
unsigned char *cp;
unsigned char *m_pBuf;//开辟空间存储接收到的rtp包
m_pBuf=(unsigned char *)calloc(1,BUF_SIZE);
void SetLostPacket()
{
m_bSPSFound = 0;
m_bWKFrame = 1;
m_bPFrameEnd = 0;
m_bAssemblingFrame = 0;
//memcpy(m_pStart,m_pBuf,BUF_SIZE);
m_pStart=m_pBuf;
m_dwSize = 0;
}
PayloadSize=len-12;
//printf("len=%d\n",len);
//printf("payloadsize=%d\n",len-12);
pPayload=pBuf+12;
m_pBuf=pPayload;
m_pStart=m_pBuf;
m_pEnd = m_pBuf+BUF_SIZE;//结束地址=起始地址+开辟存储空间长度
//printf("m_pStart=0x%x\n",m_pStart);
PayloadType = pPayload[0]&0x1f; //判断nal负载类型,5bit
pBuf=(unsigned char *)calloc(1,BUF_SIZE);//开辟空间存储接收到的rtp数据包
memcpy(pBuf,bufIn, len);//复制rtp包
if(len<=12) //判断接收到的数据包是否含有视频数据
{
printf("no rtp package recived!\n");
}
rtp_hdr_t m_RTP_Header;
cp=(unsigned char *)calloc(1,sizeof(m_RTP_Header));
cp[0]=pBuf[0];
cp[1]=pBuf[1];
m_RTP_Header.seq = pBuf[2];
m_RTP_Header.seq <<= 8;
m_RTP_Header.seq |= pBuf[3];
//printf("m_RTP_Header.seq=%d\n",m_RTP_Header.seq);
m_RTP_Header.ts = pBuf[4];
m_RTP_Header.ts <<= 8;
m_RTP_Header.ts |= pBuf[5];
m_RTP_Header.ts <<= 8;
m_RTP_Header.ts |= pBuf[6];
m_RTP_Header.ts <<= 8;
m_RTP_Header.ts |= pBuf[7];
m_RTP_Header.ssrc = pBuf[8];
m_RTP_Header.ssrc <<= 8;
m_RTP_Header.ssrc |= pBuf[9];
m_RTP_Header.ssrc <<= 8;
m_RTP_Header.ssrc |= pBuf[10];
m_RTP_Header.ssrc <<= 8;
m_RTP_Header.ssrc |= pBuf[11];
//检测版本信息
// Check the RTP version number (通常值为2):
m_RTP_Header.v=cp[0]>>6;
if ( m_RTP_Header.v != RTP_VERSION )
{
return 0;
}
//检测负载类型
// Check the Payload Type.
m_RTP_Header.pt=cp[1];
//printf("%d\n",m_RTP_Header.pt);
/*if ( m_RTP_Header.pt != 96 )
{
return 0 ;
}*/
NALType=PayloadType;
//printf("NALType=0x%x\n",NALType);
m_RTP_Header.m=pBuf[1]>>7;
//printf("m_RTP_Header.m=%d\n",m_RTP_Header.m);



  • qibo15193
  • -----r-x
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
if ( NALType == 28 ) // FU_A分片的单元
{
if ( PayloadSize < 2) //如果只有两个字节,则说明不包含视频数据
{
return 0;
} NALType = pPayload[1] & 0x1f;//得到nal类型参数
//printf("NALType=0x%x\n",NALType);
}
if ( m_ssrc != m_RTP_Header.ssrc)//同步标志位 不相同则表示有丢包
{
m_ssrc =m_RTP_Header.ssrc;
//printf("0x%x\n",m_ssrc);
SetLostPacket ();
}
if ( NALType == 0x07 ||NALType==0x08) // 判断该数据包是否为SPS
{
m_bSPSFound = 1;
}
/*if ( !m_bSPSFound)
{
return 0;
}*/
if(NALType == 0x07 ||NALType==0x08)
{
m_wSeq = m_RTP_Header.seq;
m_bPFrameEnd =1;
for(i=0;i<PayloadSize;i++)
{pPayload[i+4]=pPayload[i];}
pPayload[0]=0x00;
pPayload[1]=0x00;
pPayload[2]=0x00;
pPayload[3]=0x01;
//printf("%d\n",PayloadSize);
//printf("m_wSeq=%d\n",m_wSeq);
//printf("m_RTP_Header.seq=%d\n",m_RTP_Header.seq);
//printf("NALType=0x%x\n",NALType);
//for(i=0;i<5;i++){
//printf("0x%x\n",pPayload[i]);}
return pPayload;
}
if (m_bWKFrame)
{
if (m_RTP_Header.m) //frame end
{
m_bPFrameEnd = 1;
if (!m_bAssemblingFrame)
{
m_wSeq = m_RTP_Header.seq;
//return 0;
}
}
if ( !m_bPFrameEnd)
{
m_wSeq = m_RTP_Header.seq;
//return 0;
}
else
{
if ( NALType != 0x05) // KEY FRAME
{
m_wSeq = m_RTP_Header.seq ;
m_bPFrameEnd = 0 ;
//return 0 ;
}
}
}
//printf("m_wSeq=%d\n",m_wSeq);
printf("m_RTP_Header.seq=%d\n",m_RTP_Header.seq);
/*if ( m_RTP_Header.seq != (int)( m_wSeq + 1)) // 是否丢包lost packet
{
m_wSeq = m_RTP_Header.seq ;
SetLostPacket () ;
//return 0 ;
//printf("m_wSeq=%d\n",m_wSeq);
//printf("m_RTP_Header.seq=%d\n",m_RTP_Header.seq);
}*/
//m_pStart=(unsigned char *)calloc(1,BUF_SIZE);
if(m_RTP_Header.seq= m_wSeq)
{
// 码流正常 添加起始码前缀,长度加4
m_wSeq=m_RTP_Header.seq ;
m_bAssemblingFrame = 1 ;
//printf("m_pStart=%d\n",m_pStart[0]);
if (PayloadType != 28) // whole NAL
{
//m_pStart += 4;
for(i=0;i<BUF_SIZE;i++)
{m_pStart[i+4]=pPayload[i];}
m_pStart[0] =0x00;//DWORD修改为int
m_pStart[1] =0x00;
m_pStart[2] =0x00;
m_pStart[3] =0x01;
m_dwSize += 4 ;
for(i=0;i<6;i++){
printf("m_pStart[i]=0x%x\n",m_pStart[i]);}
return m_pStart;
//printf("m_dwSize=%d\n",m_dwSize);
}
else // FU_A
{
if ( pPayload[1] & 0x80 ) // FU_A start
{
//m_pStart =m_pStart+4;
//*(m_pStart) =0;//DWORD修改为int
for(i=0;i<BUF_SIZE;i++)
{m_pStart[i+4]=pPayload[i];}
m_pStart[0]=0x00;
m_pStart[1]=0x00;
m_pStart[2]=0x00;
m_pStart[3]=0x01;
//printf("m_pStart=%d\n",m_pStart[3]);
m_dwSize +=4;
pPayload[1] = ( pPayload[0] & 0xE0 ) | NALType ;
pPayload +=1;
PayloadSize-=1;
//printf("pPayload=%d\n",pPayload[1]);
for(i=0;i<6;i++){
printf("m_pStart[i]=0x%x\n",m_pStart[i]);}
return m_pStart;
}
else
{
pPayload += 2;
PayloadSize -= 2;
//printf("m_pStart=0x%x\n",m_pStart);
//printf("m_pEnd=0x%x\n",m_pEnd);
//printf("pPayload[4]=%d\n",pPayload[4]);
memcpy( m_pStart, pPayload, PayloadSize ) ;
m_dwSize += PayloadSize;
//m_pStart += PayloadSize;
//printf("PayloadSize=%d\n",PayloadSize);
for(i=0;i<6;i++){
printf("m_pStart[i]=0x%x\n",m_pStart[i]);}
return m_pStart;
}
}
//printf("m_pStart=0x%x\n",m_pStart);
//printf("PayloadSize=0x%x\n",PayloadSize);
//printf("m_pStart + PayloadSize=0x%x\n",(m_pStart + PayloadSize));
//printf("m_pEnd=0x%x\n",m_pEnd);
if (m_RTP_Header.m) // frame end
{
outsize = m_dwSize;
printf("PayloadSize=%d\n",PayloadSize);
memcpy(m_pStart,m_pBuf,PayloadSize);
//m_pStart = m_pBuf;
m_dwSize = 0;
//printf("%d\n",m_dwSize);
if ( NALType == 0x05) // KEY FRAME
{
m_bWKFrame = 0;
}
//return m_pBuf; //输出数据
return m_pStart;
printf("m_pStart[0]=0x%x\n",m_pStart[0]);
//fwrite(m_pBuf,outsize,1,testfile);
}
else
{
return 0;
}
}
}


2025-05-13 08:56:23
广告
  • qibo15193
  • -----r-x
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
函数中return 貌似不起作用,但是使用printf却能打印出数值


  • qibo15193
  • -----r-x
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码贴上来就成这样子了,没改


  • qibo15193
  • -----r-x
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的失误,着急发帖,没注意格式问题


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回linux吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示