MPEG-4简介

MPEG-4简介 from wikipedia

 

MPEG-4 分部

MPEG-4由一系列的子标准组成,被称为,包括以下的部分:

  • 第一部 (ISO/IEC 14496-1):系統:描述视訊和音訊的同步以及混合方式(multiplexing,简写为"mux")。
  • 第二部 (ISO/IEC 14496-2):视訊:定义了一个对各种视觉信息(包括视訊,静止纹理,计算机合成图形等等)的编解码器。对视訊部分来说,众多"Profiles"中很常用的一种是Advanced Simple Profile (ASP),例如XviD编码就属于MPEG-4 Part 2。
  • 第三部 (ISO/IEC 14496-3):音訊:定义了一个对各种音訊信号进行编码的编解码器的集合。包括高级音訊编码(Advanced Audio Coding,缩写为AAC)的若干变形和其他一些音频/语音编码工具。
  • 第四部 (ISO/IEC 14496-4):一致性:定义了对本标准其他的部分进行一致性测试的程序。
  • 第五部 (ISO/IEC 14496-5):参考软件:提供了用于演示功能和说明本标准其他部分功能的软件
  • 第六部 (ISO/IEC 14496-6):多媒体传输集成框架(DMIF for Delivery Multimedia Integration Framework)。
  • 第七部 (ISO/IEC 14496-7):优化的参考软件:提供了对实现进行优化的例子。(这里的实现指的是第五部分)。
  • 第八部 (ISO/IEC 14496-8):在IP网络上传输:定义了在IP网络上传输MPEG-4内容的方式。
  • 第九部 (ISO/IEC 14496-9):参考硬件:提供了用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
  • 第十部 (ISO/IEC 14496-10):進階視訊編碼或称高级视频编码(Advanced Video Coding,缩写为 AVC):定义了一个视频编解码器(codec),AVC 和 XviD 都属于 MPEG-4 编码,但由于 AVC 属于MPEG-4 Part 10,在技术特性上比属于MPEG-4 Part2 的 XviD 要先进。另外从技术上讲,它和ITU-T H.264标准是一致的,故全称为"MPEG-4 AVC/H.264"。
  • 第十一部 (ISO/IEC 14496-12):基于ISO的媒体文件格式:定义了一个存储媒体内容的文件格式。
  • 第十二部 (ISO/IEC 14496-13):知识产权管理和保护(IPMP for Intellectual Property Management and Protection)拓展。
  • 第十三部 (ISO/IEC 14496-14):MPEG-4文件格式:定义了基于第十二部分的用于存储MPEG-4内容的容器(container)文件格式。
  • 第十四部 (ISO/IEC 14496-15):AVC文件格式:定义了基于第十二部分的用于存储第十部分的视频内容的文件格式。
  • 第十五部 (ISO/IEC 14496-16):动画框架扩展(AFX : Animation Framework eXtension)。
  • 第十六部 (ISO/IEC 14496-17):同步文本字幕格式(尚未完成-2005年1月达成"最终委员会草案"(FCD: Final Committee Draft)。
  • 第十七部 (ISO/IEC 14496-18):字体压缩和流式传输(针对公开字体格式)。
  • 第十八部 (ISO/IEC 14496-19):综合用材质流(Synthesized Texture Stream)。
  • 第十九部 (ISO/IEC 14496-20):简单场景表示(LASeR for Lightweight Scene Representation)(尚未完成-2005年1月达成"最终委员会草案"(FCD for Final Committee Draft)。
  • 第二十部 (ISO/IEC 14496-21):用于描绘(Rendering)的MPEG-J 拓展(尚未完成-2005年1月达成"委员会草案"(CD for Committee Draft)。

Profiles是在每个部分内定义的,所以对某个部分的一个实现通常不是对该部分的完整实现。

封装了开源工程, 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值