资源简介

基于CS结构,发送端对H264编码的视屏文件进行rtp打包发送至接收端,接收端在进行逆向rtp组包,并保存为本地文件。

资源截图

代码片段和文件信息

#include “h264.h“

FILE * poutfile =  NULL;
char * outputfilename = “..\\H264_STREAM\\receive.264“;

int InitiateWinsock()
{
int Error;
WORD Version=MAKEWORD(22);
WSADATA WsaData;
Error=WSAStartup(Version&WsaData);       //Start up WSA   
if(Error!=0)
return 0;
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return 0;
}
}
return 1;
}

int  OpenBitstreamFile (char *fn)
{
if (NULL == (poutfile = fopen(fn “wb“)))
{
printf(“Error: Open input file error\n“);
getchar();
}
return 1;
}


NALU_t *AllocNALU(int buffersize)
{
NALU_t *n;

if ((n = (NALU_t*)calloc (1 sizeof(NALU_t))) == NULL)
{
printf(“AllocNALU Error: Allocate Meory To NALU_t Failed “);
exit(0);
}
return n;
}

void FreeNALU(NALU_t *n)
{
if (n)
{
free (n);
}
}

unsigned char * rtp_unpackage(char *bufInint len)
{
    unsigned char recvbuf[1500];
RTPpacket_t *p = NULL; 
RTP_HEADER * rtp_hdr = NULL;
NALU_HEADER * nalu_hdr = NULL;
NALU_t * n  = NULL;
FU_INDICATOR *fu_ind = NULL;
FU_HEADER *fu_hdr= NULL;
int total_bytes = 0;                 //当前包传出的数据
static int total_recved = 0;         //一共传输的数据
int fwrite_number = 0;               //存入文件的数据长度

memcpy(recvbufbufIn len);          //复制rtp包 
printf(“包长度+ rtp头:   = %d\n“len);

//////////////////////////////////////////////////////////////////////////
//begin rtp_payload and rtp_header

p = (RTPpacket_t*)&recvbuf[0];
if ((p = malloc (sizeof (RTPpacket_t)))== NULL)
{
printf (“RTPpacket_t MMEMORY ERROR\n“);
}
if ((p->payload = malloc (MAXDATASIZE))== NULL)
{
printf (“RTPpacket_t payload MMEMORY ERROR\n“);
}

if ((rtp_hdr = malloc(sizeof(RTP_HEADER))) == NULL)
{
printf(“RTP_HEADER MEMORY ERROR\n“);
}
    
rtp_hdr =(RTP_HEADER*)&recvbuf[0]; 
printf(“版本号 : %d\n“rtp_hdr->version);
p->v  = rtp_hdr->version;
p->p  = rtp_hdr->padding;
p->x  = rtp_hdr->extension;
p->cc = rtp_hdr->csrc_len;
printf(“标志位 : %d\n“rtp_hdr->marker);
p->m = rtp_hdr->marker;
printf(“负载类型:%d\n“rtp_hdr->payloadtype);
p->pt = rtp_hdr->payloadtype;
printf(“包号   : %d \n“rtp_hdr->seq_no);
p->seq = rtp_hdr->seq_no;
printf(“时间戳 : %d\n“rtp_hdr->timestamp);
p->timestamp = rtp_hdr->timestamp;
printf(“帧号   : %d\n“rtp_hdr->ssrc);
p->ssrc = rtp_hdr->ssrc;

//end rtp_payload and rtp_header
//////////////////////////////////////////////////////////////////////////
//begin nal_hdr
if (!(n = AllocNALU(800000)))          //为结构体nalu_t及其成员buf分配空间。返回值为指向nalu_t存储空间的指针
{
printf(“NALU_t MMEMORY ERROR\n“);
}
if ((nalu_hdr = malloc(sizeof(NALU_HEADER))) == NULL)
{
printf(“NALU_HEADER MEMORY ERROR\n“);
}

nalu_hdr =(NALU_HEADER*)&recvbuf[12];                        //网络传输过来的字节序 ,当存入内存还是和文档描述的相反,只要匹配网络字节序和文档描述即可传输正确。
printf(“forbidden_zero_bit: %d\n“nalu_hdr->F);              //网络传输中的方式为:F->NRI->TYPE.. 内存中存储方式为 TYPE->NRI->F (和nal头匹配)。
n->fo

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5366  2012-05-08 15:58  sender\h264.h

     文件      10794  2012-05-08 15:58  sender\main.c

     文件      10240  2012-09-05 11:05  sender\sender\debug\sender.exe

     文件    3082081  2012-03-28 15:22  sender\sender\H264_STREAM\sender.264

     文件       6862  2012-07-29 18:54  sender\sender\sender\Debug\BuildLog.htm

     文件        486  2012-09-05 11:05  sender\sender\sender\Debug\cl.command.1.tlog

     文件      13560  2012-09-05 11:05  sender\sender\sender\Debug\CL.read.1.tlog

     文件        334  2012-09-05 11:05  sender\sender\sender\Debug\CL.write.1.tlog

     文件       1202  2012-09-05 11:05  sender\sender\sender\Debug\link.command.1.tlog

     文件       2146  2012-09-05 11:05  sender\sender\sender\Debug\link.read.1.tlog

     文件        414  2012-09-05 11:05  sender\sender\sender\Debug\link.write.1.tlog

     文件      34277  2012-09-05 11:05  sender\sender\sender\Debug\main.obj

     文件        464  2012-09-05 11:05  sender\sender\sender\Debug\mt.command.1.tlog

     文件         67  2012-07-29 18:54  sender\sender\sender\Debug\mt.dep

     文件        804  2012-09-05 11:05  sender\sender\sender\Debug\mt.read.1.tlog

     文件        290  2012-09-05 11:05  sender\sender\sender\Debug\mt.write.1.tlog

     文件        381  2012-09-05 11:05  sender\sender\sender\Debug\sender.exe.intermediate.manifest

     文件         66  2012-09-05 11:05  sender\sender\sender\Debug\sender.lastbuildstate

     文件       1850  2012-09-05 11:05  sender\sender\sender\Debug\sender.log

     文件      69632  2012-09-05 11:05  sender\sender\sender\Debug\vc100.pdb

     文件     125952  2012-07-29 18:54  sender\sender\sender\Debug\vc80.idb

     文件       3101  2012-07-29 18:55  sender\sender\sender\sender.vcproj

     文件       1427  2012-07-29 22:41  sender\sender\sender\sender.vcproj.PC-200909201114.Administrator.user

     文件       2580  2012-09-05 11:04  sender\sender\sender\sender.vcxproj

     文件       1056  2012-09-05 11:04  sender\sender\sender\sender.vcxproj.filters

     文件        143  2012-09-05 11:04  sender\sender\sender\sender.vcxproj.user

     文件    6753280  2012-07-29 22:41  sender\sender\sender.ncb

     文件        885  2012-09-05 11:04  sender\sender\sender.sln

    ..A..H.      7168  2012-07-29 22:41  sender\sender\sender.suo

     文件       2054  2012-09-05 11:04  sender\sender\UpgradeLog.xml

............此处省略58个文件信息

评论

共有 条评论