MPEG-4编码技术

  在宽带接入日益普及的环境下,在网上观看、 下载电影成为很多用户非常熟悉的应用。压缩电影的背后是MPEG-4技术,而MPEG-4背后有一条不平凡的发展道路。
  运动图像专家组——这个名称对很多读者来说还很陌生,但提到它的英文简称MPEG(Moving Picture Experts Group),便几乎是尽人皆知了。MPEG是隶属于ISO/IEC的一个专家工作组,主要负责为数字音视频编码算法开发和制定标准。
  家族兄弟的诞生
  MPEG组织始建于1988年,并于1992年制定出MPEG0-1标准,它能将视频数据压缩 成1~2Mbps的标准数据流,工业产品VCD机和MP3播放器都是以该标准为基础衍生出来的。随后的1994年,该组织制定出MPEG-2标准,它是为 了获得更高的分辨率(720×486)、提供广播级视频和CD品质的音频而产生的高质量音视频编码标准,传输速率在3~10Mbps,它也是数字电视、 DVB和DVD所遵循的压缩标准。
  随着研究工作的深入发展,ISO又公布了“超低比特率活动图像和语音压缩标准”,排序 MPEG-4。1998年10月批准第一版,1994年4月又公布了第二版及其校验模型(VM)。MPEG-4正式编号是ISO/IEC国际标准 14496,它是一种新型的多媒体标准。与前标准一个重要区别就在于,它是一个基于对象的视频编码压缩标准,它所定义的码率控制的目标就是获得在给定码率 下的最优质量,它为互联网上传输高质量的多媒体视频提供了很好的技术平台。
  MPEG-4从封闭到开放
  1998年微软开发了第一个在PC上使用的MPEG-4编码器,它包括MS MPEG4V1、MS MPEG4V2、MS MPEG4V3的系列编码内核。其中V1和V2用来制作AVI文件,一直到现在它都作为Windows的默认组件。不过V1和V2的编码质量不是很好,一 直到MS MPEG4V3才开始有好转,画质有了显著的进步。但是微软却将这个视频编码内核封闭,仅仅使其应用于Windows Media流媒体技术上,也就是我们熟悉的ASF流媒体文件中。ASF文件虽然有一些优势,但是由于过分封闭不能被编辑,末得到广泛的应用。这便激起了视 频黑客和致力于钻研视频编码的高手的强烈反应,这些小组不仅破解了微软的视频编码,而且经过他们的修改,一种新的视频编码诞生了——那就是广为流传的 MPEG编码器DivX3.11。
  DivX采用了MS的MPEGV3,改良后并加入自己功能称之为DivX3.11,也是目前互 联网上普通采用的MPEG-4编码器之一。很快,DivX流传红得发紫,几乎成了业界的标准。但是问题同样很快出现了,DivX的基础技术是非法盗用微软 的,微软声称将对所有推动DivX发展的人和企业进行追究。可是DivX技术的创造者之一罗达(Rota)当时正全面申请将DivX合法化,这是基于 DivX虽然是从Window中而出来的,但却没有用过任何微软的技术。他更组建新公司DivXNetworks全力推广DivX,看来DivX(俗称压 缩电影)蓬勃发展的大潮是势不可挡了。
  标准大门重新关闭
  然而,看来任何吸引眼球的故事在关键时刻都会发生转折,DivX的发展竟也不能脱离这一俗套。 就在DivX顺利发展,DivX的技术逐渐成熟,商机无限的时候,一台好戏上演了。DivXNetworks成立初衷就是摆脱微软的技术封闭,因而发起一 个完全开放源码的项目,名为“Project Mayo”,目标是开发一套全新的、开放源码的MPEG-4编码软件。由于它完全符合ISO MPEG标准,又是完全开放源代码,OpenDivX CODEC吸引了很多软件、视频高手参与,很快便开发出具有更高性能的编码器Encore2等等。就在DivX最辉煌的时期,DXN公司突然封闭了 DivX的源代码,并在Encore2的基础上发布了自有产品DivX4。原来DXN早就给自己留了后门,DivX采取的是LGPL协议,而不是GPL协 议。虽说它们都是公共许可证协议,保障自由使用和修改软件或源码的权利,但LGPL允许私有,DXN就是利用这一协议出其不意地“涮”了所有人一道。
  Xvid的复仇
  就像好莱坞复仇电影那样,所有被DXN公司狠狠涮了一回的软件、视频团体另起门户,逐渐重新聚 拢开发力量,高举复仇大旗。他们在OpenDivX版本基础上,再次开发出一种新的MPEG-4编码核心——XviD,名字的顺序和DviX刚好相反。仅 仅从名字就可以看出Xvid充满了复仇的力量。
  从技术上来说,Xvid已经基本上与DXN公司的最新版本DivX5接近,甚至还有所超越。它 可以在保持DivX5画质的基础上,大大缩短压缩时间,被认为是目前最快的MPEG-4编码。除此之外,Xvid还吸收了前车之鉴,依照GPL发布,也就 是说,谁要是想做成产品而不开放源码是非法的。
  跌宕起伏的故事讲完了,从技术和应用上来说,MPEG是非常好的压缩技术,甚至有人说它是21 世纪数字视频压缩的标准,由于从MPEG-4衍生出来的格式很多,并且各大电影厂商也对MPEG-4技术存有戒心,虽然在互联网上可以找到基于MPEG- 4标准的高质量电影节目,但实际支持MPEG-4技术的硬件产品不是很多。例如很多MPEG-4解码卡支持ISO MPEG4和DivX,但却不兼容微软公司的WMV,直到Snazzi推出Snazzi*DV AVIO,全面兼容MPEG-4的WMV、DivX和Xvid格式。这是一款性价比极高的MPEG-4实时编解码卡。今天,我们终于有幸用硬件实时制作高 画质的MPEG-4格式的电影了,随着科技的飞速发展,相信今后会有更多MPEG-4硬件产品可供我们选用。MPEG-4的春天就要来了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mpeg4编码库源代码,C++完整源代码,有需要饿同学尽管拿去。 // This is the header file describing // the entrance function of the encoder core // or the encore ... #ifdef __cplusplus extern "C" { #endif typedef struct _ENC_PARAM_ { int x_dim; // the x dimension of the frames to be encoded int y_dim; // the y dimension of the frames to be encoded float framerate;// the frame rate of the sequence to be encoded long bitrate; // the bitrate of the target encoded stream long rc_period; // the intended rate control averaging period long rc_reaction_period; // the reation period for rate control long rc_reaction_ratio; // the ratio for down/up rate control long max_key_interval; // the maximum interval between key frames int max_quantizer; // the upper limit of the quantizer int min_quantizer; // the lower limit of the quantizer int search_range; // the forward search range for motion estimation } ENC_PARAM; typedef struct _ENC_FRAME_ { void *image; // the image frame to be encoded void *bitstream;// the buffer for encoded bitstream long length; // the length of the encoded bitstream } ENC_FRAME; typedef struct _ENC_RESULT_ { int isKeyFrame; // the current frame is encoded as a key frame } ENC_RESULT; // the prototype of the encore() - main encode engine entrance int encore( unsigned long handle, // handle - the handle of the calling entity, must be unique unsigned long enc_opt, // enc_opt - the option for encoding, see below void *param1, // param1 - the parameter 1 (its actually meaning depends on enc_opt void *param2); // param2 - the parameter 2 (its actually meaning depends on enc_opt // encore options (the enc_opt parameter of encore()) #define ENC_OPT_WRITE 1024 // write the reconstruct image to files (for debuging) #define ENC_OPT_INIT 32768 // initialize the encoder for an handle #define ENC_OPT_RELEASE 65536 // release all the resource associated with the handle // return code of encore() #define ENC_OK 0 #define ENC_MEMORY 1 #define ENC_BA

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值