网络摄像头RTSP直播方案(三)

前面的部分讲了关于RTSP连接的交互过程,在RTSP推流的过程中,RTSP协议只是做一个控制作用,底层真正进行传输的流媒体协议还是RTP协议。做这一部分主要是要先了解RTP协议的封装格式,这里我不详细讲了,网上有很多博客都有讲,我这里主要是讲一下实现方式。
在建立了RTSP连接之后,就是在客户端发回PLAY指令之后,在setup阶段被设置的回调函数会被调用,下面是回调函数的代码

unsigned int RtpSend(unsigned int u32Rtp, unsigned char *pData, int s32DataSize, unsigned int u32TimeStamp)
{
   
    int s32NalSize = 0;
    int nalhead_pos = 0,naltail_pos = 0;
    HndRtp hRtp = (HndRtp)u32Rtp;
	unsigned char * nalubuffer = NULL;
    

    hRtp->u32TimeStampCurr = u32TimeStamp;

    while(nalhead_pos<s32DataSize)
    {
   
        if(pData[nalhead_pos++] == 0x00 && 
			pData[nalhead_pos++] == 0x00) 
		{
    	
				if(pData[nalhead_pos++] == 0x00 && 
					pData[nalhead_pos++] == 0x01 ){
   
				   goto gotnal_head;
				}
				
				else
					continue;
		 }
		else 
			continue;

gotnal_head:
		naltail_pos = nalhead_pos;  
		
		while (naltail_pos<s32DataSize)  
		{
     
			if(pData[naltail_pos++] == 0x00 && 
				pData[naltail_pos++] == 0x00 )
			{
     
					if(pData[naltail_pos++] == 0x00 &&
						pData[naltail_pos++] == 0x01)
					{
   	
						s32NalSize = (naltail_pos-4)-nalhead_pos;
						break;
					}
			}  
		}
		
      if(nalhead_pos<s32DataSize && naltail_pos<s32DataSize){
   
        nalubuffer=(unsigned char*)malloc(s32NalSize);
	    memset(nalubuffer,0,s32NalSize);
		memcpy(nalubuffer,pData+nalhead_pos,s32NalSize);
		//SendNalu264(hRtp, nalubuffer,s32NalSize);
		test_SendNalu264(hRtp, nalubuffer,s32NalSize);
		free(nalubuffer);
		nalhead_pos = naltail_pos-4;
      }

	  if(nalhead_pos<s32DataSize && naltail_pos>=s32DataSize){
   
	  	s32NalSize = s32DataSize -nalhead_pos;
        nalubuffer=(unsigned char*)malloc(s32NalSize);
	    memset(nalubuffer,0,s32NalSize);
		memcpy(nalubuffer,pData+nalhead_pos,s32NalSize);
		//Se
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值