http://write.blog.csdn.net/postedit/7852406

http://write.blog.csdn.net/postedit/7852406

``` UINT Ue(BYTE *pBuff, UINT nLen, UINT &nStartBit)
{
//计算0bit的个数
UINT nZeroNum = ;
)
{
] & ())) //&:按位与，%取余
{
break;
}
nZeroNum++;
nStartBit++;
}
nStartBit ++;

//计算结果
DWORD dwRet = ;
; i<nZeroNum; i++)
{
dwRet <<= ;
] & ()))
{
dwRet += ;
}
nStartBit++;
}
<< nZeroNum) -  + dwRet;
}

int Se(BYTE *pBuff, UINT nLen, UINT &nStartBit)
{

int UeVal=Ue(pBuff,nLen,nStartBit);
double k=UeVal;
);//ceil函数：ceil函数的作用是求不小于给定实数的最小整数。ceil(2)=ceil(1.2)=cei(1.5)=2.00
==)
nValue=-nValue;
return nValue;

}

DWORD u(UINT BitCount,BYTE * buf,UINT &nStartBit)
{
DWORD dwRet = ;
; i<BitCount; i++)
{
dwRet <<= ;
] & ()))
{
dwRet += ;
}
nStartBit++;
}
return dwRet;
}

bool h264_decode_seq_parameter_set(BYTE * buf,UINT nLen,int &Width,int &Height)
{
UINT StartBit=;
,buf,StartBit);
,buf,StartBit);
,buf,StartBit);
)
{
,buf,StartBit);
,buf,StartBit);//(buf[1] & 0x80)>>7;
,buf,StartBit);//(buf[1] & 0x40)>>6;
,buf,StartBit);//(buf[1] & 0x20)>>5;
,buf,StartBit);//(buf[1] & 0x10)>>4;
,buf,StartBit);
,buf,StartBit);

int seq_parameter_set_id=Ue(buf,nLen,StartBit);

|| profile_idc ==  ||
profile_idc ==  || profile_idc ==  )
{
int chroma_format_idc=Ue(buf,nLen,StartBit);
)
,buf,StartBit);
int bit_depth_luma_minus8=Ue(buf,nLen,StartBit);
int bit_depth_chroma_minus8=Ue(buf,nLen,StartBit);
,buf,StartBit);
,buf,StartBit);

];
if( seq_scaling_matrix_present_flag )
{
; i < ; i++ ) {
seq_scaling_list_present_flag[i]=u(,buf,StartBit);
}
}
}
int log2_max_frame_num_minus4=Ue(buf,nLen,StartBit);
int pic_order_cnt_type=Ue(buf,nLen,StartBit);
)
int log2_max_pic_order_cnt_lsb_minus4=Ue(buf,nLen,StartBit);
)
{
,buf,StartBit);
int offset_for_non_ref_pic=Se(buf,nLen,StartBit);
int offset_for_top_to_bottom_field=Se(buf,nLen,StartBit);
int num_ref_frames_in_pic_order_cnt_cycle=Ue(buf,nLen,StartBit);

int *offset_for_ref_frame=new int[num_ref_frames_in_pic_order_cnt_cycle];
; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )
offset_for_ref_frame[i]=Se(buf,nLen,StartBit);
delete [] offset_for_ref_frame;
}
int num_ref_frames=Ue(buf,nLen,StartBit);
,buf,StartBit);
int pic_width_in_mbs_minus1=Ue(buf,nLen,StartBit);
int pic_height_in_map_units_minus1=Ue(buf,nLen,StartBit);

Width=(pic_width_in_mbs_minus1+)*;
Height=(pic_height_in_map_units_minus1+)*;

return true;
}
else
return false;
}

void CCommDlg::OnOK()
{
CString  str;
//数据必须把H264的头0x000001去掉
BYTE bytes[]={0x67,0x64,0x08,0x1F,0xAC,0x34,0xC1,0x08,0x28,0x0F,0x64};
UINT startbit=;
int Width,Height;
,Width,Height))
{
str.Format("%d-%d",Width,Height);

AfxMessageBox(str);
}
}```

## 从H264码流中获取视频宽高 (SPS帧)的更多相关文章

1. 从H264码流中获取视频宽高 (SPS帧) 升级篇

之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...

2. android onCreate中获取view宽高为0的解决方法

view.post(runnable) 通过post可以将一个runnable投递到消息队列的尾部,然后等待UI线程Looper调用此runnable的时候,view也已经初始化好了. view.po ...

3. H264码流打包分析

转自:http://www.360doc.com/content/13/0124/08/9008018_262076786.shtml   SODB 数据比特串-->最原始的编码数据 RBSP ...

4. H264码流打包分析(精华)

H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若 ...

5. H264码流解析及NALU

ffmpeg 从mp4上提取H264的nalu http://blog.csdn.net/gavinr/article/details/7183499 639     /* bitstream fil ...

6. android 中获取视频文件的缩略图（非原创）

在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

7. android中加载的html获取的宽高不正确

wap页面使用 js库是zepto,按照惯例在\$(function(){})中,来获取当前可视区的宽高,但得到的宽高却与预想的相差十万八千里. 原本android手机的浏览器设定的宽高基本是360*6 ...

8. ios从相册:摄像头中获取视频

ios从相册/摄像头中获取视频 如何从相册中获取视频 使用的是一个和获取照片相同的类UIImagePickerController //相册中获取视频 - (IBAction)clickViedoOF ...

9. hisi出的H264码流结构

hisi出的H264码流结构: IDR帧结构如下: 开始码 + nalu + I帧    +    开始码 + nalu + SPS    +     开始码 + nalu + PPS    +    ...

## 随机推荐

1. JS控制键盘录入 和 window.event.keycode对照

一.只允许录入整数 1.不允许录入非数字(按下字母键就会提示并清空) function intOnly() { if (!(window.event.keyCode >= 48 &&am ...

2. Ant_build.xml的最完整解释

Ant的概念Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台 ...

3. PHP变量入门教程（1）基础

基础 PHP 中一个美元符号后面跟上一个变量名称,即表示一个变量.变量的名称是对大小写敏感的. 变量名与 PHP 中其它的标签一样遵循相同的规则.一个有效的变量名由字母或者下划线开头,后面跟上任意数量 ...

4. SYSTick 定时器

CM3 内核的处理器,内部包含了一个 SysTick 定时器,(SysTick 的时钟源自 HCLK 的 8 分频,8个系统时钟周期systick跳一个,即8*1/72M=1/9 us)Sys ...

5. 根据UUID和MD5， 生成可以用作Token的字符串

import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util. ...

6. du 使用详解 linux查看目录大小 linux统计目录大小并排序 查看目录下所有一级子目录文件夹大小 du -h --max-depth=1 |grep [

常用命令 du -h --max-depth=1 |grep [TG] |sort   #查找上G和T的目录并排序 du -sh    #统计当前目录的大小,以直观方式展现 du -h --max-d ...

今天,某个环境又发生了死锁,如下: *** (1) TRANSACTION:TRANSACTION 735307073, ACTIVE 0 sec insertingmysql tables in u ...

8. post 的body json要使用双引号，而不是单引号

string parse error , JS eval error {'name' : 'wade' }   http://json.parser.online.fr/ string parse ...

9. OS X 在Cisco无线环境下丢包分析 part 1

补发一篇博客,之前遇到的没有写成博文的一个情况.我擦,那一阵儿真是被无线搞疯了. 现象:苹果OS X用户连入WiFi之后莫名丢包,而且有规律的丢,丢个5s恢复正常,再过会儿再丢5s左右. 就如同这样 ...

10. 解决Sharepoint每天第一次打开速度慢的问题

每天第一次打开Sharepoint的网站会非常慢,下面是解决这个问题的几个方法. 添加crl.microsoft.com到Hosts文件,IP地址指向服务器本机. 允许服务器直接连接到crl.micr ...