-
将h264和/mpeg4封装为MP4文件
资源介绍
封装了开源工程, mp4v2, mpeg4ip代码,
/******************************************/
/* Name:Mp4Interface.h
/* Mark:mp4封装解析接口
/* author: machh
/* date:2012.5.12.
/******************************************/
#ifndef _MP4_INTERFACE_
#define _MP4_INTERFACE_
#include "MP4Writer.h"
#include "MP4Reader.h"
typedef struct _tagPACKET_HEADER_
{
_tagPACKET_HEADER_()
{
nType = 0;
nLen = 0;
nTime = 0;
}
unsigned long nTime; // 不依赖于I帧的参考时间
int nLen; // 不包括该头结构本身大小
int nType;
}PACKET_HEADER;
enum FILE_OPEN_MODEL
{
OPEN_MODEL_W, // 写文件
OPEN_MODEL_R // 读文件 r+b
};
class Mp4Interface
{
public:
Mp4Interface(void);
~Mp4Interface(void);
public:
/*
* @mark 打开文件
* @param[in] nModel文件打开方式,如果nModel为OPEN_MODEL_W 则创建文件
* @param[in] nMediaType 值为 MP4_VIDEOTYPE_H264/MP4_VIDEOTYPE_MPEG4
* @return 操作结果
*/
int OpenFile(const char* strPath, FILE_OPEN_MODEL nModel, int nMediaType );
/*
* @Name:Close
* @mark: 读写操作结束之后,必须调用此函数
*/
int Close();
public: //写操作
/*
* @mark: 添加视频轨道
* @param[out] nTrackId 轨道ID
* @param[in] nWidth,nHeight 画面宽高
* @param[out] fps 帧率
*/
int AddVideoTrack (int& nTrackId,
const int nWidth,
const int nHeight,
const double fps
);
/*
* @mark: 写一帧数据
* @param[in] lpData 要写入的数据
* @param[in] nSize 要写入的数据大小
* @param[in] nTimestamp 时间戳
*/
BOOL WriteFrame( const int nTrackId,
const uint8_t* const lpData,
const int nSize,
const MP4Timestamp nTimestamp,
const MP4Duration nDuration = -1
);
/*
* @mark: 添加音频轨道 aac
* @param[out] nTrackId
* @param[in] nSamplePerSec (timescale)
*/
int AddAudioTrack( int& nTrackId,
const int nSamplePerSec,
const int nSamplePerFrame = -1
);
public: //读操作
/*
* @mark : 全局函数,读取整个MP4文件结构信息,
* 函数内部会fopen/fclose,该函数应当在OpenFile之前调用
* @param[in] strFile 文件路径
* @param[out] lsTrackInfo 输出文件信息结构
*/
bool static GetMP4FileInfo( const char* strFile, MP4_TRACKINFO_LIST& lsTrackInfo );
/*
* @mark:SetReadTrackId设置轨道ID,
*/
int SetReadTrackId( int nTrackID );
/*
* @mark:获取轨道信息,该函数必须在OpenFile(……)之后调用才有效
*/
int GetTrackInfo( MP4_TRACK_INFO* pstTrackInfo );
/*
* @mark: 读取一帧数据
*/
int ReadFrameData( DWORD nSampleId, BYTE** ppFrame, DWORD* pnBufSize,int& nFrameType );
protected:
int m_nOpenModel;
int m_nMediaType;
CMP4Writer * m_pMp4Writer;
CMP4Reader * m_pMp4Reader;
};
#endif// end
- 上一篇: h264分析工具
- 下一篇: 网络接收H264视频数据并通过FFmpeg实时播放视频