资源简介
基于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\li
文件 2146 2012-09-05 11:05 sender\sender\sender\Debug\li
文件 414 2012-09-05 11:05 sender\sender\sender\Debug\li
文件 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.xm
............此处省略58个文件信息
相关资源
- 17754926H264_analsy.rar
- 网络编码理论详解
- 基于TCP传输的H264流解码和播放
- JM10.2源代码
- 编码的奥秘-隐匿在计算机背后的软硬
- 武汉大学-信息论与编码教材-陈运
- 国家药品编码本位码信息国产药品截
- SPIHT小波变换及编码
- 卷积自编码去噪-tensorflow实现
- ISO/IEC13818-1,13818-2,13818-3,13818-4,
- Windows下利用live555实现H264实时流RTSP发
- gbk汉字编码拼音对照表21004个字全-修
- ffmpeg实现windows桌面采集
- maxon电机2018年最新选型手册
- h264的视频文件
- onvif协议源码rtsp,rtp,gb28181等等协议
- H264裸码流文件
- 视频编解码---x264用于编码,ffmpeg用于
- h264视频流解码并通过D3D显示
- 使用jrtplib发送和接收网络流支持解码
- 密码编码学与网络安全原理与实践第
- STM32F407编码器
- 密码编码学与网络安全 By William Stal
- 编码的奥秘(高清)pdf
- 纠错编码原理和应用 张宗橙 PDF高清版
- 信息论与编码学习辅导及习题详解
- ffmpeg-4.3.1-full_build
- MediaCoder Prov0.8.58.zip
- H264测试文件 1080P2分30秒和720P1分45秒
- H264的码流分析工具
评论
共有 条评论