C++ 解析H264文件
C++ 解析H264文件.vs2012
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2263679 2016-01-12 21:38 ParseH264Debugsintel.h264
文件 3393 2016-12-21 15:17 ParseH264ParseH264ParseH264.cpp
文件 4526 2016-12-21 13:42 ParseH264ParseH264ParseH264.vcxproj
文件 1333 2016-12-21 13:42 ParseH264ParseH264ParseH264.vcxproj.filters
文件 1729 2016-12-21 13:42 ParseH264ParseH264ReadMe.txt
文件 296 2016-12-21 13:42 ParseH264ParseH264stdafx.cpp
文件 320 2016-12-21 13:42 ParseH264ParseH264stdafx.h
文件 314 2016-12-21 13:42 ParseH264ParseH264 argetver.h
文件 894 2016-12-21 13:42 ParseH264ParseH264.sln
..A..H. 23040 2016-12-21 15:19 ParseH264ParseH264.v11.suo
目录 0 2016-12-21 15:19 ParseH264Debug
目录 0 2016-12-21 15:01 ParseH264ParseH264
目录 0 2016-12-21 15:19 ParseH264
----------- --------- ---------- ----- ----
2299524 13
#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
“ 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 ParseH264Debugsintel.h264
文件 3393 2016-12-21 15:17 ParseH264ParseH264ParseH264.cpp
文件 4526 2016-12-21 13:42 ParseH264ParseH264ParseH264.vcxproj
文件 1333 2016-12-21 13:42 ParseH264ParseH264ParseH264.vcxproj.filters
文件 1729 2016-12-21 13:42 ParseH264ParseH264ReadMe.txt
文件 296 2016-12-21 13:42 ParseH264ParseH264stdafx.cpp
文件 320 2016-12-21 13:42 ParseH264ParseH264stdafx.h
文件 314 2016-12-21 13:42 ParseH264ParseH264 argetver.h
文件 894 2016-12-21 13:42 ParseH264ParseH264.sln
..A..H. 23040 2016-12-21 15:19 ParseH264ParseH264.v11.suo
目录 0 2016-12-21 15:19 ParseH264Debug
目录 0 2016-12-21 15:01 ParseH264ParseH264
目录 0 2016-12-21 15:19 ParseH264
----------- --------- ---------- ----- ----
2299524 13
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)