资源简介
C++ 解析H264文件.vs2012
代码片段和文件信息
#include “stdafx.h“
#include
typedef enum {
NALU_TYPE_SLICE = 1
NALU_TYPE_DPA = 2
NALU_TYPE_DPB = 3
NALU_TYPE_DPC = 4
NALU_TYPE_IDR = 5
NALU_TYPE_SEI = 6
NALU_TYPE_SPS = 7
NALU_TYPE_PPS = 8
NALU_TYPE_AUD = 9
NALU_TYPE_EOSEQ = 10
NALU_TYPE_EOSTREAM = 11
NALU_TYPE_FILL = 12
} NaluType;
typedef enum {
NALU_PRIORITY_DISPOSABLE = 0
NALU_PRIRITY_LOW = 1
NALU_PRIORITY_HIGH = 2
NALU_PRIORITY_HIGHEST = 3
} NaluPriority;
void printfH264(int j int i int nLen int nframeType)
{
printf(“%d %d“ j i);
int nForbiddenBit = (nframeType>>7) & 0x1;//第1位禁止位,值为1表示语法出错
int nReference_idc = (nframeType>>5) & 0x03;//第2~3位为参考级别
int nType = nframeType & 0x1f;//第4~8为是nal单元类型
printf(“ “);
switch(nReference_idc){
case NALU_PRIORITY_DISPOSABLE:
printf(“DISPOS“);
break;
case NALU_PRIRITY_LOW:
printf(“LOW“);
break;
case NALU_PRIORITY_HIGH:
printf(“HIGH“);
break;
case NALU_PRIORITY_HIGHEST:
printf(“HIGHEST“);
break;
}
printf(“ “);
switch(nType){
case NALU_TYPE_SLICE:
printf(“SLICE“);
break;
case NALU_TYPE_DPA:
printf(“DPA“);
break;
case NALU_TYPE_DPB:
printf(“DPB“);
break;
case NALU_TYPE_DPC:
printf(“DPC“);
break;
case NALU_TYPE_IDR:
printf(“IDR“);
break;
case NALU_TYPE_SEI:
printf(“SEI“);
break;
case NALU_TYPE_SPS:
printf(“SPS“);
break;
case NALU_TYPE_PPS:
printf(“PPS“);
break;
case NALU_TYPE_AUD:
printf(“AUD“);
break;
case NALU_TYPE_EOSEQ:
printf(“EOSEQ“);
break;
case NALU_TYPE_EOSTREAM:
printf(“EOSTREAM“);
break;
case NALU_TYPE_FILL:
printf(“FILL“);
break;
}
printf(“ %d\r\n“ nLen);
}
int GetLen(int nPos int nTotalSize BYTE* btData)
{
int nStart = nPos;
while (nStart < nTotalSize){
if (btData[nStart] == 0x00 && btData[nStart + 1] == 0x00 && btData[nStart + 2] == 0x01){
return nStart - nPos;
}
else if (btData[nStart] == 0x00 && btData[nStart + 1] == 0x00 && btData[nStart + 2] == 0x00 && btData[nStart + 3] == 0x01){
return nStart - nPos;
}
else{
nStart++;
}
}
return nTotalSize - nPos;//最后一帧。
}
int _tmain(int argc _TCHAR* argv[])
{
BYTE *btData = NULL;
DWORD dwFileSize = 0;
HANDLE hFile = CreateFile(L“E:\\video\\sintel.h264“ GENERIC_READ | GENERIC_WRITE 0 NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL);
if (hFile != INVALID_HANDLE_VALUE){
dwFileSize = GetFileSize(hFile NULL);
btData = new BYTE[dwFileSize];
memset(btData 0 dwFileSize);
DWORD dwRead = 0;
ReadFile(hFile btData dwFileSize &dwRead NULL);
CloseHandle(hFile);
}
int j = 0;//多少帧
int i = 0;//偏移量
while (i < dwFileSize - 4){
if (btData[i] == 0x00 && btData[i + 1] == 0x00 && btData[i + 2] == 0x01){
int nLen = GetLen(i + 3 dwFileSize btData);
printfH264(j i nLen
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2263679 2016-01-12 21:38 ParseH264\Debug\sintel.h264
文件 3393 2016-12-21 15:17 ParseH264\ParseH264\ParseH264.cpp
文件 4526 2016-12-21 13:42 ParseH264\ParseH264\ParseH264.vcxproj
文件 1333 2016-12-21 13:42 ParseH264\ParseH264\ParseH264.vcxproj.filters
文件 1729 2016-12-21 13:42 ParseH264\ParseH264\ReadMe.txt
文件 296 2016-12-21 13:42 ParseH264\ParseH264\stdafx.cpp
文件 320 2016-12-21 13:42 ParseH264\ParseH264\stdafx.h
文件 314 2016-12-21 13:42 ParseH264\ParseH264\targetver.h
文件 894 2016-12-21 13:42 ParseH264\ParseH264.sln
..A..H. 23040 2016-12-21 15:19 ParseH264\ParseH264.v11.suo
目录 0 2016-12-21 15:19 ParseH264\Debug
目录 0 2016-12-21 15:01 ParseH264\ParseH264
目录 0 2016-12-21 15:19 ParseH264
----------- --------- ---------- ----- ----
2299524 13
相关资源
- VC++读视频文件
- VC++使用教程烟台南山学院
- C++程序设计教材思维导图
- 用c++编写的停车场管理程序
- MFC写的复数计算器
- 基于C++的高斯坐标系下经纬度与大地
- 基于C++Builder6.0的图书信息管理系统的
- C++屏幕截图源代码
- C++屏幕截图工具源代码
- c++实现ecc加解密算法
- libstdc++.so.6.0.18
- Visual.C++数据库编程技术与 源代码
- More Effective C++中文版经典
- VC++网络聊天室源代码和程序说明
- 地铁售票程序 c++
- 用C++编写的贺卡程序
- 把脉 VC++ 完整光盘源码
- C++程序坦克大战MFC
- C++图书借阅管理系统(报告书+源程序
- libstdc++.so.6.0.24.tar.gz
- c#调用c++DLL,dll有二维数组
- c++P2P网络编程代码
- 广义逆矩阵 C++实现
- duilib中WebBrowser C++与js相互调用
- VS MFC C++ 万年历
- sxstrace.exe修复工具C++.rar
- linux微型web服务器
- c++面向对象程序设计_杜茂康_课后答案
- C++做的拼图游戏有详细步骤
- 使用VC++制作的简易电子时钟
评论
共有 条评论