资源简介
rtp协议的c语言实现demo,有具体的样例,编译后直接执行即可
代码片段和文件信息
// NALDecoder.cpp : Defines the entry point for the console application.
#include
#include
#include
#include
#include “h264.h“
#include “initsock.h“
CInitSock initSock; // 初始化Winsock库
//为NALU_t结构体分配内存空间
NALU_t *AllocNALU(int buffersize)
{
NALU_t *pNalu;
if ((pNalu = (NALU_t*)calloc (1 sizeof (NALU_t))) == NULL) {
printf(“AllocNALU: Nalu“);
exit(0);
}
pNalu->max_size=buffersize;
if ((pNalu->buf = (char*)calloc (buffersize sizeof (char))) == NULL) {
free (pNalu);
printf (“AllocNALU: Nalu->buf“);
exit(0);
}
return pNalu;
}
//释放
void FreeNALU(NALU_t *pNalu)
{
if (pNalu) {
if (pNalu->buf) {
free(pNalu->buf);
pNalu->buf=NULL;
}
free (pNalu);
}
}
static int FindStartCode2 (unsigned char *Buf)
{
if(Buf[0]!=0 || Buf[1]!=0 || Buf[2] !=1) return 0; //判断是否为0x000001如果是返回1
else return 1;
}
static int FindStartCode3 (unsigned char *Buf)
{
if(Buf[0]!=0 || Buf[1]!=0 || Buf[2] !=0 || Buf[3] !=1) return 0;//判断是否为0x00000001如果是返回1
else return 1;
}
// 这个函数输入为一个NAL结构体,主要功能为得到一个完整的NALU并保存在NALU_t的buf中,获取他的长度,填充FIDCTYPE位。
// 并且返回两个开始字符之间间隔的字节数,即包含有前缀的NALU的长度
int GetAnnexbNALU (NALU_t *pNalu FILE *bits)
{
int info2=0 info3=0;
int pos = 0;
int StartCodeFound rewind;
unsigned char *Buf;
if ((Buf = (unsigned char*)calloc (pNalu->max_size sizeof(char))) == NULL)
printf (“GetAnnexbNALU: Could not allocate Buf memory\n“);
if (3 != fread (Buf 1 3 bits)) { //从码流中读3个字节
free(Buf);
return -1;
}
if (Buf[0]!=0 || Buf[1]!=0) {
free(Buf);
return -1;
}
if (Buf[2]==1) {
pNalu->startcodeprefix_len=3; //初始化码流序列的开始字符为3个字节
pos =3;
}else {
if (1 != fread (Buf+3 1 1 bits)) { //从码流中读1个字节
free(Buf);
return -1;
}
if (Buf[2]!=0 || Buf[3]!=1) {
free(Buf);
return -1;
}
pos = 4;
pNalu->startcodeprefix_len = 4;
}
//查找下一个开始字符的标志位
StartCodeFound = 0;
info2 = 0;
info3 = 0;
while (!StartCodeFound) {
if (feof (bits)) { //判断是否到了文件尾
break;
}
Buf[pos++] = fgetc (bits);//读一个字节到BUF中
info3 = FindStartCode3(&Buf[pos-4]);//判断是否为0x00000001
if(info3 != 1)
info2 = FindStartCode2(&Buf[pos-3]);//判断是否为0x000001
StartCodeFound =(info2|info3);
}
if (StartCodeFound) {
// Here we have found another start code (and read length of startcode bytes more than we should
// have. Hence go back in the file
rewind = (info3 == 1)? -4 : -3;
if (0 != fseek (bits rewind SEEK_CUR)) { // 把文件指针指向前一个NALU的末尾
free(Buf);
printf(“GetAnnexbNALU: Cannot fseek in the bit stream file“);
}
} else {
rewind = -1;
}
// Here the Start code the complete NALU and the next start code is in the Buf.
// The size of Buf is pos pos+rewind are the number of bytes excluding the next
// start code and (pos+rewind)-startcodeprefix_len is the size of the NALU excluding the start code
pNalu->len = (pos+rewind)-pNalu->sta
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2163 2010-12-29 08:26 NALDecoder\h264.h
文件 461 2010-12-27 12:19 NALDecoder\initsock.h
文件 10206 2010-12-29 08:26 NALDecoder\NALDecoder.cpp
文件 4670 2010-12-27 09:54 NALDecoder\NALDecoder.dsp
文件 543 2008-07-01 09:37 NALDecoder\NALDecoder.dsw
文件 208963 2010-12-29 08:26 NALDecoder\NALDecoder.exe
文件 50176 2010-12-29 08:26 NALDecoder\NALDecoder.ncb
文件 50688 2010-12-29 08:26 NALDecoder\NALDecoder.opt
文件 1267 2010-12-29 08:26 NALDecoder\NALDecoder.plg
文件 1232 2008-07-01 09:37 NALDecoder\ReadMe.txt
文件 93550 2006-07-25 17:57 NALDecoder\test.264
文件 243860 2009-12-04 21:22 NALDecoder\test22.264
文件 82 2010-12-28 10:18 NALDecoder\w.sdp
目录 0 2010-12-29 08:27 NALDecoder
文件 599 2014-06-12 15:20 readme.txt
文件 15872 2014-06-12 15:25 H264RTP打包方法.doc
----------- --------- ---------- ----- ----
684332 16
相关资源
- C++ Primer Plus第6版_中文版_带书签_超清
- C语言实现FTP服务器
- C语言之逆波兰表达式完整代码(附算
- 串口通信C++源代码
- C++大作业_学生管理系统(含源代码实
- 局部线性回归c++实现
- c++/MFC CSocket仿QQ聊天软件,实现1对1聊
- [数据结构课程设计——C语言描述第
- C语言图书管理系统代码.doc
- 步态识别C++实现
- mfc 实现图片的移动 火箭移动效果
- CYK算法的C++实现
- VC++编写的音频播放器代码
- MFC基于TCP/IP协议的聊天室源代码 (继
- c++小球反弹运动
- 多边形耳切法三角化C++实现
- minisql 用C++实现
- 操作系统实验报告处理机调度算法的
- 安徽大学操作系统实验九最终考试内
- 用fft求互相关,速度更快,c语言实现
- 基于opencv的人脸识别程序-代码详解
- 递归实现的最简单分型图形实现
- c编译器源代码
- SIFT代码,C/C++
- MFCC参数提取的matlab实现
- c语言课程设计报告 会员卡计费系统源
- 在固定分区管理方式下实现主存分配
- AdaBoost算法C++源代码
- 邮件发送程序客户端----VC实现
- C语言实现的AES加密解密
评论
共有 条评论