找回密码
 注册
搜索
查看: 13737|回复: 42

[讨论] 想做MPEG-4视频解码,该怎么入门?

[复制链接]
发表于 2006-5-22 10:20:00 | 显示全部楼层 |阅读模式
想做MPEG-4视频解码,该怎么入门?请教高手:)
发表于 2006-5-23 14:42:00 | 显示全部楼层
<P>用ARM做,哪怕是ARM9都有点吃不消,现在有用DSP做的,也有用FPGA做的(如NIOS),不过做的最多的还是ASIC硬件加速器。</P><P>MPEG-4的标准收费很贵(非常贵!),就是ISO/IEC 14496的十多个文档,每个都要数百瑞士法郎。可能有少数高校和研究机构买了有,不过一般想开发门槛还是有点高。幸运的是,ITU-T的文档是免费的,和MPEG-4同级别的是H.263/H.264,遗憾的不包括音频部分,就是AAC的编解码。</P><P>现在多媒体手机应用的视频文件格式主要是3GP和MP4,3GP的视音频是H.263+AMR,而MP4的视音频是MPEG-4+AAC。我们一般提MPEG-4,直接和H.263/H.264连在一起,两者的关系很紧。关于3GP在ITU-T的3GPP系列文档里有很详细的描述,还有参考代码。MP4由于是ISO参照苹果公司的mov格式做的,且资料不公开,所以我还是不太明白。</P><P>关于MPEG-4的硬件实现,我这里有很多相关的论文,有兴趣的可以和我联系:hglinfei@163.com</P>[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

 楼主| 发表于 2006-5-24 12:16:00 | 显示全部楼层
我想先从xvid入手,在PC上看看运行的效果,有个感性的认识,最好能看到动起来的画面,但是不知道该怎么办,请教版主和各位高手[em01]
点评回复

使用道具 举报

发表于 2006-5-24 14:56:00 | 显示全部楼层
<P>xvid倒是公开源代码的,有网站<a href="http://www.xvid.org" target="_blank" >http://www.xvid.org</A>支持,免费下载的。</P><P>不过现在支持xvid的大多是PMP,而手机倒不多见,3GP和MP4可是上头钦定的格式。熟悉MPEG-4的历史的就知道,标准出来好多年,一直没有规模应用,显示微软的V1~V3(asf),后来的divx,再后来的xvid,因为开放源码导致现在人们对MPEG-4是越来越熟悉,应用也越来越多。</P><P>现在能下载的源码版本是1.1.0的,用C语言写的,在PC上移植应该难度不大。从学习的角度来讲,没有捷径,MPEG-4的文档一定是要研读的,否则就会知其然不知起所以然了,要知道xvid是破解微软的V3而来的。</P>
点评回复

使用道具 举报

 楼主| 发表于 2006-5-24 16:37:00 | 显示全部楼层
<P>我不是在手机上做,我预计的目标是在ARM9上显现一个针对这个平台优化的MPEG4视频解码。但是一开始我想现在PC上做定点化的工作。</P><P>现在我连一点儿直观的感觉都没有,怎么才能建立起来呢?看那些文档越看越晕。</P>[em01]
点评回复

使用道具 举报

发表于 2006-5-24 23:18:00 | 显示全部楼层
<P>XVID在PC上运行问题还不大,要在ARM9上软件解码我看有点困难,就像当年有人在ARM7上做MP3解码一样,实时性不能保证。目前手机也好,PMP也好,有很多多媒体芯片都是ARM926级别以上的,但用ARM9来做MPEG-4解码的我还没有看到。</P><P>xvid的源代码是用C写的(还有一点汇编),你现在可以不必了解MPEG-4的具体算法是怎么实现的等等,如果只想有感性的认识的话,照着它文档说的步骤找一个编译器编译,测试界面和测试数据按自己的需要做的简单点。这些都是软件的问题了。</P>
点评回复

使用道具 举报

 楼主| 发表于 2006-5-28 21:24:00 | 显示全部楼层
我下载了xvid的源代码,在PC上编译通过以后,生成的是.dll文件,还是没有办法直接看到效果,只能通过directx编程自己实现一个播放器才行,是这样吧?
假设xvid的源代码没有错误,我是不是没有必要花精力去编一个PC上的播放器,而是在弄清楚xvid的比特流的输入输出格式后直接在嵌入式平台(ARM9)上做呢?我对directx一点儿没接触过,不知道工作量有多大,而且不知道这个做出来以后对后面的工作有多大的帮助,请高手指教[em01]
点评回复

使用道具 举报

发表于 2006-5-28 22:13:00 | 显示全部楼层
<P>确实需要WIN32的编程技术,如果是做成了DLL文件,那对嵌入式编程就失去意义了。</P><P>如果要做个硬盘播放器之类的东东,ARM9纯软件解码确实有些勉为其难了,想一想PC机都有个显卡支持,更何况CPU都有多媒体指令集了,现在面世的嵌入式产品那一个没有相应的硬件加速器?另外作为一个验证系统,需要有强大的平台支持,想一想一个文件系统就够你看的,还有AVI(xvid)的文件格式,输入输出接口,存储器接口。。。。。。</P><P>相反,xvid的解码由于有源代码倒不是个大问题,要做的工作很多,如果是一个人来搞的话,确实够呛,不知道你们老板是怎么想的。</P>
点评回复

使用道具 举报

 楼主| 发表于 2006-5-30 16:12:00 | 显示全部楼层
我看到一篇题为“基于ARM的MPEG4视频解码器”(<a href="http://www.21ic.com/news/html/74/show11954.htm" target="_blank" >http://www.21ic.com/news/html/74/show11954.htm</A>)的文章,既然在arm7上做出来的效果都可以达到每秒15帧,ARM9应该可以达到更高的帧率吧。我还是有信心做出来的,暂时先不从产品的角度来考虑,做得那么完善,主要是学习的目的。我想请教一下版主,这篇文章里面给出了很多优化率,这些参数是怎么计算出来的?这些比较的手段有没有什么地方介绍得比较详细的?
另外,我买了版主你推荐的那本吴乐南写的《数据压缩》,果然是本好书,jpeg的huffman编解码看懂了[em01]
点评回复

使用道具 举报

发表于 2006-5-31 15:11:00 | 显示全部楼层
<P>ARM7TDMI就能搞定?还是周立功的板子,我是服了。</P><P>能否实时解码我们不得而知,但对ARM代码进行优化确实很有必要,特别是大运算量的时候,即要在算法实现上下功夫,又要结合ARM的指令集的特点在汇编层优化。那些优化参数自然是通过某个软件工具成生的,ADS里面好像没有。</P><P>算法优化可以把运算量尽量降低作为目标,而ARM(汇编)优化可以把尽量降低指令cycles作为目标。</P><P>还有两个比较重要的问题是:1,系统支撑,自己做板做OS,或者卖板和相关软件。2,可测性,视频测试序列你是如何生成?如果以MP4格式文件做测试,如何做MP4格式的解析而得到相应测试序列?</P><P>我个人认为ARM7又要跑OS,还有做文件格式的解析所剩资源就以经不多了,再做解码就。。。</P><P>文章的来源是“ARM公司”,我不知道他们有什么高招。</P>
点评回复

使用道具 举报

发表于 2006-6-1 07:54:00 | 显示全部楼层
其实MP4和3GP他们的格式基本上是差不多的,MP4格式可以参考ISO14496-12,3GP格式据说是从MP4修改而来的,好像3GPP的26.244(原来在26.234)对此有描述;而ISO14496-12又是参考Apple的QuickTime格式,该格式的文档可以从Apple的网站找到Html文件或者PDF文件(qtff.pdf?)
点评回复

使用道具 举报

发表于 2006-6-1 08:37:00 | 显示全部楼层
<P><FONT color=#0000ff>ISO/IEC 14496-12的撰稿人就是Apple的David Singer了,而ISO/IEC 14496-14是以ISO/IEC 14496-12为基础的,David Singer也是该文档的主要撰稿人。Apple一直以开发文件格式见长,微软和IBM联合提出的RIFF格式(我们常见的WAV文件格式就是这种)就是参考Apple的AIFF格式,Apple的各种格式文档都可以在其网站上下载。另外3GPP提出的3GPP TS 26.244又根据ISO/IEC 14496-12,提出了3GP格式。3GPP的任何文档都是免费的,都可以在3GPP的网站上下载。</FONT></P>
<P><FONT color=#0000ff>David Singer的联系方式是:</FONT></P>
<P>   David Singer
   Apple Computer, Inc.
   One Infinite Loop, MS:302-3MT
   Cupertino  CA 95014
   USA

   Phone: +1 408 974 3162
   EMail: singer@apple.com
</P>
点评回复

使用道具 举报

发表于 2006-6-2 20:51:00 | 显示全部楼层
<P>我现在也准备在ARM9上做视频采集和MPEG-4编码,软件编码速度会很慢,目前做这方面研究的确实不多,希望版主多多指教,也希望和楼主多多交流,我的邮箱:<a href="mailthandakuang@163.com" target="_blank" >handakuang@163.com</A></P>
点评回复

使用道具 举报

发表于 2006-6-2 21:06:00 | 显示全部楼层
<P>还想请教版主,现在很多ARM9芯片已集成了camera口,技术文档说:camera interface consists of 7 parts: pattern mux,capturing unit, preview scaler, codec scaler, preview DMA, codec DMA and SFR,我只理解capturing unit,其它几个部分全都不懂,还请各位高手指教。</P>
点评回复

使用道具 举报

发表于 2006-6-3 13:33:00 | 显示全部楼层
<P>scaler电路是resize用的,DMA用于快速数据传输(存储介质和codec之间),SFR是空间频率响应(用于表示分辨率的信息)。</P><P>只是个参考,具体的说明还要看它的datasheet。</P>
点评回复

使用道具 举报

发表于 2006-6-3 18:30:00 | 显示全部楼层
<P>感谢版主,还想问一下</P><P>1.pattern mux是什么意思,</P><P>2.preview和codec的区别,</P><P>3.camera 口可以直接和摄像头相接吗,如何实现控制啊?</P>
点评回复

使用道具 举报

发表于 2006-6-4 13:51:00 | 显示全部楼层
<P>1,pattern mux模式选择,我想不外乎是:夜景,闪光,像框等等模式,由软件控制选择。</P><P>2,preview是指camera过来的原始数据经ISP预处理,然后resize显示在LCD的过程。</P><P>      codec就是编解码模块,它把ISP处理的数据压缩成JPEG后,直接经DMA送到存储介质中。</P><P>3,camera IF是可以直接和camera模组相连的,这要看camera IF的说明,命令控制用I2C,数据用8位或10位并行传输。</P>
点评回复

使用道具 举报

发表于 2006-6-5 09:26:00 | 显示全部楼层
<P>版主好厉害,我昨天看了一点关于摄像头驱动的东西,就是用I2C控制。对了,我还想请教,我想把camera口进来的数据压缩成MPEG-4格式,然后存储起来,手册上说codec scaler输出的数据才可以进行MPEG压缩,camera口的数据存在哪,怎样压缩啊,如何控制啊?如果实时压缩怎么处理,不需要实时的话,怎么处理?</P>
点评回复

使用道具 举报

发表于 2006-6-5 14:47:00 | 显示全部楼层
<P>确实要resize后再压缩,不然的话数据量太大了处理不过来。</P><P>平时用camcorder来preview的时候,camera出来的数据经ISP处理后送到多媒体芯片,直接传到LCD上动态显示,不存。你要recorde的时候,压缩电路才工作,一边压缩一边写文件(存在FLASH或外接卡中),recorde停止的时候,压缩完成,文件这时的数据也写入了,再加上文件头和文件名就行了。一般压缩后的文件格式是3GP或是MP4。也有用MJPEG的,就是按照一定的帧率,一张一张的拍下来存放,数据量也很客观。PC机的摄像头就是MJPEG方式,只有JPEG实时压缩电路,不过要保存文件还要PC这边来做。</P><P>如果不实时压缩,不太现实,原始数据太大,没地方存,也没有必要。</P>
点评回复

使用道具 举报

发表于 2006-6-5 16:02:00 | 显示全部楼层
<P>谢谢版主,你说的是有硬件压缩电路时的情况吧,如果用软件压缩如何处理?</P>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-1 22:49 , Processed in 0.052690 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表