获取H264的NALU
来源:互联网 发布:网络冗余设计 编辑:程序博客网 时间:2024/05/22 17:37
class CPH264
{
public:
private:
std::vector<BufferedData*> m_vector_video;
public:
std::vector<BufferedData*> * get_vector_h264NALU()
{
return &m_vector_video;
}
public:
std::vector<BufferedData*> * GetH264NALU( unsigned char * ph264Buf, int nBufLen )
{
std::vector<int> vecrot_StartCodePos;
for ( int i = 0; i < nBufLen-4; i++ )
{
int nNextStartCodePos = 0;
int nStartCode = find_StartCode( ph264Buf + i );
if ( nStartCode == 0 )
{
continue;
}
vecrot_StartCodePos.push_back(i);
i = i+nStartCode-1;
}
for ( int i = 0 ; i< vecrot_StartCodePos.size(); i++ )
{
int nStartCodePos = vecrot_StartCodePos.at(i);
int nCodeLen = find_StartCode( ph264Buf + nStartCodePos );
int nNalBufLen = 0;
if ( i < vecrot_StartCodePos.size() - 1 )
{
nNalBufLen = vecrot_StartCodePos.at(i+1) - vecrot_StartCodePos.at(i) - nCodeLen;
}
else
{
nNalBufLen = nBufLen - vecrot_StartCodePos.back() - nCodeLen;
}
BufferedData * pNALbuf = new BufferedData;
pNALbuf->PushBack( ph264Buf + nStartCodePos + nCodeLen, nNalBufLen );
m_vector_video.push_back(pNALbuf);
{
static FILE * f = fopen("E:\\nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.h264","w+b");
fwrite( ph264Buf + nStartCodePos + nCodeLen, 1, nNalBufLen, f );
}
}
return 0;
}
private:
int find_StartCode( unsigned char * ph264Buf )
{
if ( find_StartCode3( ph264Buf ) )
{
return 3;
}
else
if ( find_StartCode4(ph264Buf) )
{
return 4;
}
return 0;
}
int find_StartCode3( unsigned char * ph264Buf )
{
if ( ph264Buf[0] == 0 && ph264Buf[1] == 0 && ph264Buf[2] == 1 )
{
return 1;
}
return 0;
}
int find_StartCode4( unsigned char * ph264Buf )
{
if ( ph264Buf[0] == 0 && ph264Buf[1] == 0 && ph264Buf[2] == 0 && ph264Buf[3] == 1 )
{
return 1;
}
return 0;
}
};
{
public:
private:
std::vector<BufferedData*> m_vector_video;
public:
std::vector<BufferedData*> * get_vector_h264NALU()
{
return &m_vector_video;
}
public:
std::vector<BufferedData*> * GetH264NALU( unsigned char * ph264Buf, int nBufLen )
{
std::vector<int> vecrot_StartCodePos;
for ( int i = 0; i < nBufLen-4; i++ )
{
int nNextStartCodePos = 0;
int nStartCode = find_StartCode( ph264Buf + i );
if ( nStartCode == 0 )
{
continue;
}
vecrot_StartCodePos.push_back(i);
i = i+nStartCode-1;
}
for ( int i = 0 ; i< vecrot_StartCodePos.size(); i++ )
{
int nStartCodePos = vecrot_StartCodePos.at(i);
int nCodeLen = find_StartCode( ph264Buf + nStartCodePos );
int nNalBufLen = 0;
if ( i < vecrot_StartCodePos.size() - 1 )
{
nNalBufLen = vecrot_StartCodePos.at(i+1) - vecrot_StartCodePos.at(i) - nCodeLen;
}
else
{
nNalBufLen = nBufLen - vecrot_StartCodePos.back() - nCodeLen;
}
BufferedData * pNALbuf = new BufferedData;
pNALbuf->PushBack( ph264Buf + nStartCodePos + nCodeLen, nNalBufLen );
m_vector_video.push_back(pNALbuf);
{
static FILE * f = fopen("E:\\nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.h264","w+b");
fwrite( ph264Buf + nStartCodePos + nCodeLen, 1, nNalBufLen, f );
}
}
return 0;
}
private:
int find_StartCode( unsigned char * ph264Buf )
{
if ( find_StartCode3( ph264Buf ) )
{
return 3;
}
else
if ( find_StartCode4(ph264Buf) )
{
return 4;
}
return 0;
}
int find_StartCode3( unsigned char * ph264Buf )
{
if ( ph264Buf[0] == 0 && ph264Buf[1] == 0 && ph264Buf[2] == 1 )
{
return 1;
}
return 0;
}
int find_StartCode4( unsigned char * ph264Buf )
{
if ( ph264Buf[0] == 0 && ph264Buf[1] == 0 && ph264Buf[2] == 0 && ph264Buf[3] == 1 )
{
return 1;
}
return 0;
}
};
0 0
- 获取H264的NALU
- h264 NALU的获取与分析
- 关于h264的图像、帧、片、NALU
- H264 NALU slice 模式
- h264 Nalu 详解
- h264 nalu详解
- h264 Nalu 详解
- H264--NALU/SPS/PPS
- H264 NALU单元格式
- h264 Nalu 详解
- H264 NALU RTP
- h264 Nalu 详解
- h264 Nalu 详解
- H264 NALU 详解
- h264 Nalu 详解
- H264 NALU详解
- h264 Nalu 详解
- h264 Nalu 详解
- 背景建模技术(四):视频分析(VideoAnalysis)模块
- Android中Touch事件的处理逻辑
- fastjson常用方法
- AJAX教程–jQuery
- C++刷题——括号配对问题
- 获取H264的NALU
- javascript中this关键字的含义
- git 使用笔记一
- 精美js鼠标特效代码跟随
- IOS 基于APNS消息推送原理与实现(JAVA后台)
- javascript中call()和apply()
- MEIZU MX4连接不上adb
- 黑马程序员-【集合框架】
- KI码