1. 如何用c语言编写一个视频播放器
视频播放器是一种解码器。
解码器是对已编码的数字视频进行还原解码操作的程序(视频播放器)或设备。比如系统安装了real编码器那就能将其他格式文件转换成rm或rmvb格式,如果安装了real解码器那就能播放rm或rmvb格式文件。
这已经不是简单C语言能够编写出来的,它的核心是解码编码的算法。
1,如果你只是想用某些功能,不要自己编了。找一个吧。
2,非要自己编的话,要站在巨人的肩膀上。很多种编码都有开源的解码器了。可以利用他们。或者利用开源的软件,在人家基础上开发。
3,如果你认为你有希望改进压缩解压算法,得到更好的效果,更省地方,更有效的解压算法。那首先要做的是了解各种编码的压缩解压算法。创造一种更好的算法。
2. 什么是MPEG4
MPEG-4标准的主要技术概览及编码
摘 要:简要介绍了MPEG-4标准的主要内容以及在此基础上着重介绍了音频对象的编码和视频对象的编码。
关键词:MPEG-4; 多媒体传输集成框架; 视频编码 0 前言
MPEG-4编码标准是目前最新的国际编码标准规范?熏本文就其主要的内容作了简单的概述?熏并在此基础上,着重介绍了具有特色的音频对象的编码和视频对象的编码。
1 多媒体传输集成框架
多媒体传输集成框架(DMIF)主要解决交互网络中、广播环境下以及磁盘中多媒体应用的操作问题,通过传输多路合成比特信息,建立客户端和服务器端的握手和传输。与过去不同的是,由于MPEG-4码流中,包括许多的AV对象,一般而言,这些AV对象都有各自的缓冲器,而不仅仅是视频缓冲器和音频缓冲器。
2 语法描述
MPEG-4定义了一个句法描述语言来描述AV对象比特流表示和场景描述信息。这个句法描述语言是对C++的扩展,不仅易于表达其AV对象特性,而且也易于软件仿真实现与模型验证。与MPEG-4相比,MPEG-1和MPEG-2则采用一种类C语言的描述,MPEG-4描述语言反映了面向对象技术来描述对象。
3 音频对象的编码
视频音频的压缩编码自然仍是MPEG-4的核心所在。不过,与以前的MPEG-1、MPEG-2不同的是:MPEG-4不仅支持自然的声音(如语音和音乐),而且支持基于描陆仿述语言的合成声音,支持音频的对象特征。即一个场景中,同时有人声和背景音乐,它们也许是独立编码的音频对象。
3.1 自然声音编码
MPEG-4研究比较了现有的各种音频编码算法,支持2~64K的自然声音编码。如8 kHz采样频率的2~4 kbit/s的语音编码,以及8或16 kHz采样频率4~16 kbit/s的音频编码,一般采用参数编码;6~24 kbit/s的语音册谈编码,一般采用码激励线性预测(CELP)编码技术;16 kbit/s以上码率的编码,则可采用时频(T/F)变换编码技术。这些技术实质上借鉴了已有的音频编码标准,如G.723、G.728以及MPEG-1和MPEG-2等。图1是MPGE4的可伸缩自然音频编码器示意图,包括了3种编码技术。
3.2 合成声音
在合成声音编码当中,MPEG-4引入了2个极有吸引力的编码技术:文本到语音编码和乐谱驱动合成编码技术。这为网络上低比特率下交互的带有语音的游戏铺平了道路。事实上,合成声音编码技术即是一种基于知识库的参数编码。特别值得一提的是MPEG-4的乐谱驱动合成技术,在该技术中,解码器是由一种特殊的合成语言——结构化的音频管弦乐团语言(SAOL)驱动的。其中的“管州悉碰弦乐团”是由不同的“乐器”组成的。当解码器不具有某一“乐器”时,MPEG-4还允许解码器从编码器下载该“乐器”到解码器,以便正确恢复合成声音。可见,MPEG-4不是提供一组角MIDI音乐标准中的“乐器”,而是提供了一个可随时扩充的“管弦乐团”,因此,其可“演奏”乐谱自然更加丰富多彩。
4 视觉对象的编码
同样,MPEG-4也支持对自然和合成的视觉对象编码。合成的视觉对象如2D、3D动画,人的面部表情动画等,这些合成图像单独编码,不仅可有效压缩,而且还便于操作。
对自然视觉对象的编码,仍是MPEG-4的重点。相对于静止图像,MPEG-4采用零树小波算法(Zerotree WAVelet algorithm)以提供高压缩比,同时还提供多达11级的空间分辨率和质量的可伸缩性。
对于运动视频对象的编码,MPEG-4采用了如图2所示的编码框图,以支持图像的编码。
可见,MPEG-4为了支持基于对象的编码,引入了形状编码模块。为了支持高效压缩,MPEG-4仍然采用了MPEG-1、MPEG-2中的变换、预测混合编码框架。
对于一般的任意形状的视频对象,MPEG-4编码后的码流结构见图3。
对于实时的极低比特率的应用,如可视电话,MPEG-4视频编码采用极低比特率视频(VLBV)核进行编码,类似于ITU的H.263直接对矩形视频编码,而不采用形状编码模块。编码后的码流结构见图4
可见,MPEG-4采取了向前兼容H.263,同时,也提供了一些高层特性,如基于内容的编码。其扩充的方式见图5。
MPEG-4支持有误码信道传输下的鲁棒性,提供了更好的同步和误码恢复机制。
5 场景描述
场景描述主要用于描述以上单个的AV对象如何在一个具体AV场景坐标下的组织与同步等问题。同时还有AV对象和AV场景的知识产权保护等问题。
6 MPEG-4展望
MPEG-4的应用将是广泛而深远的。这一新的标准将至少可以应用于以下场合:
a) 实时多媒体监控;
b) 极低比特率下的移动多媒体通信;
c) 基于内容存储和检索多媒体系统;
d) Internet/Intranet上的视频流与可视游戏;
e) 基于面部表情模拟的虚拟会议;
f) DVD上的交互多媒体应用;
g) 基于计算机网络的可视化合作实验室场景应用;
h) 演播室和电视的节目制作。
MPEG系列简介 (2005-5-30)
MPEG是活动图象专家组(Moving Picture Coding Experts Group)的简称。MPEG成立于1988年1月,是致力于研究、开发数字压缩标准,以保证活 动图象质量的前提下,压缩传输码率的组织。MPEG的第一次会议在1988年5月召开,有25位音频、视频编码压缩方面的专家参加。现在MPEG已经成为每年召开3次例行大会(在3月、7月和11月),有来自大约20个国家200多家公司的350名专家参与的组织。MPEG所开发指的标准被国际标准组织(ISO)和国际电工委员会(IEC)批准为国际标准,形成MPEG系列。
MPEG-1
MPEG-1在1989年7月开始研究,1992年被ISO/IEC批准为正式标准,正式标准编号是ISO/IEC11172,MPEG-1规定了在数字存储介质中实现对活动图像和声音的压缩编码,编码码率最高为每秒1.5兆比特。传输速率为1.5Mbits/s,每秒播放30帧,具有CD音质,质量级别基本与VHS(广播级录像带)相当。MPEG的编码速率最高可达4-5 Mbit/s,但随着速率的提高,其解码后的图像质量有所降低。音频压缩格式就是大家熟悉的MP3格式,这种MP3格式规定了与视频压缩相分离的音频压缩方法 。应用MPEG-1技术最成功的产品非VCD莫属了,VCD作为价格低廉的影像播放设备,得到广泛的应用和普及。MPEG-1被用于数字电话网络上的视频传输,如非对称数字用户线路(ADSL),视频点播(VOD),以及教育网络等。
MPEG-2
MPEG-2在1991年7月开始研究,是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定,1992年被ISO/IEC批准为正式标准,正式标准编号是ISO/IEC13818。MPEG-2不是MPEG-1的简单升级,MPEG-2在系统和传送方面作了更加详细的规定和进一步的完善。MPEG-2能够提供广播级的视像和CD级的音质。MPEG-2的音频编码可提供左右中及两个环绕声道,以及一个加重低音声道和多达七个伴音声道。MPEG-2的另一特点是,可提供一个较广范围的可变压缩比,以适应不同的画面质量、存储容量以及带宽的要求。MPEG-2特别适用于广播级的数字电视的编码和传送,被认定为SDTV和HDTV的编码标准。MPEG-2还专门规定了多路节目的复用分接方式。此外,MPEG-2还兼顾了与ATM信元的适配问题。
MPEG-2标准目前分为9个部分,其中前6部分统称为ISO/IEC13818国际标准。各部分的内容描述如下:
第一部分-ISO/IEC13818-1,System:系统,描述多个视频,音频和数据基本码流合成传输码流和节目码流的方式。
第二部分-ISO/IEC13818-2,Video:视频,描述视频编码方法。
第三部分-ISO/IEC13818-3,Audio:音频,描述与MPEG-1音频标准反向兼容的音频编码方法。
第四部分-ISO/IEC13818-4,Compliance:符合测试,描述测试一个编码码流是否符合MPEG-2码流的方法。
第五部分-ISO/IEC13818-5,Software:软件,描述了MPEG-2标准的第一、二、三部分的软件实现方法。
第六部分-ISO/IEC13818-6,DSM-CC:数字存储媒体-命令与控制,描述交互式多媒体网络中服务器与用户间的会话信令集。
第七部分规定了不与MPEG-1多通道音频编码反向兼容。�
第八部分原计划用于10bit视频抽样编码,已停用。�
第九部分规定了传送码流的实时。
MPEG-2技术就是实现DVD的标准技术,用于为广播、有线电视网、电缆网络以及卫星直播提供广播级的数字视频。
MPEG-3
由于MPEG-2的出色性能表现,已能适用于HDTV(高清晰度电视),使得原打算为HDTV设计的MPEG-3,还没出世就被抛弃了。
MPEG-4
MPEG-4在1995年7月开始研究,1998年11月被ISO/IEC批准为正式标准,正式标准编号是ISO/IEC14496,它不仅针对一定比特率下的视频、音频编码,更加注重多媒体系统的交互性和灵活性。这个标准主要应用于视像电话、视像电子邮件等,对传输速率要求较低,在4800-6400bits/s之间,分辨率为176*144。MPEG-4利用很窄的带宽,通过帧重建技术、数据压缩,以求用最少的数据获得最佳的图像质量。 利用MPEG-4的高压缩率和高的图像还原质量可以把DVD里面的MPEG-2视频文件转换为体积更小的视频文件。经过这样处理,图像的视频质量下降不大但体积却可缩小几倍,可以很方便地用CD-ROM来保存DVD上面的节目。另外,MPEG-4在家庭摄影录像、网络实时影像播放也大有用武之地。
MPEG-7
MPEG-7(它的由来是1+2+4=7, 因为没有MPEG-3、MPEG-5、MPEG-6)于1996年10月开始研究。确切来讲,MPEG-7并不是一种压缩编码方法,其正规的名字叫做'多媒体内容描述接口,其目的是生成一种用来描述多媒体内容的标准,这个标准将对信息含义的解释提供一定的自由度,可以被传送给设备和电脑程序,或者被设备或电脑程序查取。MPEG-7并不针对某个具体的应用,而是针对被MPEG-7标准化了的图象元素,这些元素将支持尽可能多的各种应用。建立MPEG-7标准的出发点是依靠众多的参数对图象与声音实现分类,并对它们的数据库实现查询,就象我们今天查询文本数据库那样。可应用于数字图书馆,例如图象编目、音乐词典等;多媒体查询服务,如电话号码簿等;广播媒体选择,如广播与电视频道选取;多媒体编辑,如个性化的电子新闻服务、媒体创作等。
MPEG-21
MPEG在1999年10月的MPEG会议上提出了“多媒体框架”的概念,同年的12月的MPEG会议确定了MPEG-21的正式名称是“多媒体框架”或“数字视听框架”,它以将标准集成起来支持协调的技术以管理多媒体商务为目标,目的就是理解如何将不同的技术和标准结合在一起需要什么新的标准以及完成不同标准的结合工作。
在数字化趋势越来越明显的今天,MPEG的专家们会带给我们新的MPEG系列,解决在数字化的道路上的不断出现的问题。
3. vscodec语言怎么不能在外部运行直接退出
1 VSCode语言在外部运行时不能直接退出。
2 这可能是因为程序中存在一些问题,导致程序运行时出现了错误,而程序没有处理这些橘厅错误,直接退出了。
3 可以通过调试程序,查找并解决错误,圆型隐使程序能够正常运行。
同时,也可以学习租正VSCode的调试功能,帮助自己更好地进行编程开发。
4. C语言实现 fmp4格式视频编码
1、选定转码格式,先把导入格式工厂
2、打开输出设置,所有的设置都在这里面
3、编码在最上方那里,你可以选择各种编码格式
4、同时也可以修改分辨率和码率,甚至的宽高比
5. 考C语言中解码是什么意思
解码一般是时多媒体术语,声音、视频、图片等文件都必须经过编码成二进制代码才能存储,解码就是用播放器(或其他软件)对编码的二进制代码进行解码,让二进制代码恢复成原始的视频、图片和声音,这样你才能看到视频或图片,听到声音。
6. 编程里的c语言,c++,jave,php都有什么区别,各自又代表了什么
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显着优势和广阔前景。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
C++历史悠久,更适合底层开发,它同样用途极广,理论上也是什么都可以做,但用它编写代码需要比java更长的开发周期,所以一般用于游戏、视频解码、驱动程序、黑客工具等对响应速度要求较高的操作。
PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
7. 监控视频压缩编解码的介绍
(一)、M-JPEG
M-JPEG(Motion- Join Photographic Experts Group)技术即运动静止图像(或逐帧)压缩技术,广泛应用于非线性编辑领域可精确到帧编辑和多层图像处理,把运动的视频序列作为连续的静止图像来处理,这种压缩方式单独完整地压缩每一帧,在编辑过程中可随机存储每一帧,可进行精确到帧的编辑,此外M-JPEG的压缩和解压缩是对称的,可由相同的硬件和软件实现。但M-JPEG只对帧内的空间冗余进行压缩。不对帧间的时间冗余进行压缩,故压缩效率不高。采用M-JPEG数字压缩格式,当压缩比7:1时,可提供相当于Betecam SP质量图像的节目。
JPEG标准所根据的算法是基于DCT(离散余弦变换)和可变长编码。JPEG的关键技术有变换编码、量化、差分编码、运动补偿、霍夫曼编码和游程编码等
M-JPEG的优点是:可以很容易做到精确到帧的编辑、设备比较成熟。缺点是压缩效率不高。
此外,M-JPEG这种压缩方式并不是一个完全统一的压缩标准,不同厂家的编解码器和存储方式并没有统一的规定格式。这也就是说,每个型号的视频服务器或编码板有自己的M-JPEG版本,所以在服务器之间的数据传输、非线性制作网络向服务器的数据传输都根本是不可能的。
(二)、MPEG系列标准
MPEG是活动图像专家组(Moving Picture Exports Group)的缩写,于1988年成立,是为数字视/音频制定压缩标准的专家组,目前已拥有300多名成员,包括IBM、SUN、BBC、NEC、INTEL、AT&T等世界知名公司。MPEG组织最初得到的授权是制定用于“活动图像”编码的各种标准,随后扩充为“及其伴随的音频”及其组合编码。后来针对不同的应用需求,解除了“用于数字存储媒体”的限制,成为现在制定“活动图像和音频编码”标准的组织。MPEG组织制定的各个标准都有不同的目标和应用,目前已提出MPEG-1、MPEG-2、MPEG-4、MPEG-7和MPEG-21标准。
1.MPEG-1标准
MPEG-1标准于1993年8月公布,用于传输1.5Mbps数据传输率的数字存储媒体运动图像及其伴音的编码。该标准包括五个部分:
第一部分说明了如何根据第二部分(视频)以及第三部分(音频)的规定,对音频和视频进行复合编码。第四部分说明了检验解码器或编码器的输出比特流符合前三部分规定的过程。第五部分是一个用完整的C语言实现的编码和解码器。
该标准从颁布的那一刻起,MPEG-1取得一连串的成功,如VCD和MP3的大量使用,Windows95以后的版本都带有一个MPEG-1软件解码器,可携式MPEG-1摄像机等等。
2.MPEG-2标准
MPEG组织于1994年推出MPEG-2压缩标准,以实现视/音频服务与应用互操作的可能性。MPEG-2标准是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定,编码码率从每秒3兆比特~100兆比特,标准的正式规范在ISO/IEC13818中。MPEG-2不是MPEG-1的简单升级,MPEG-2在系统和传送方面作了更加详细的规定和进一步的完善。MPEG-2特别适用于广播级的数字电视的编码和传送,被认定为SDTV和HDTV的编码标准。
MPEG-2图像压缩的原理是利用了图像中的两种特性:空间相关性和时间相关性。这两种相关性使得图像中存在大量的冗余信息渗袜铅。如果我们能将这些冗余信息去除,只保留少量非相关信息进行传输,就可以大大节省传输频带。而接收机利用这些非相关信息,按照一定的解码算法,可以在保证一定的图像质量的前提下恢复原始图像。一个好的压缩编码方案就是能够最大限度地去除图像中的冗余信息。
MPEG-2的编码图像被分为三类,分别称为I帧,P帧和B帧。
I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。P帧和B帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。B帧图像采用双向时间预测,可以大大提高压缩倍数。
MPEG-2的编码码流分为六个层次。好穗为更好地表示编码数据,MPEG-2用句法规定了一个层次性结构。它丛好分为六层,自上到下分别是:图像序列层、图像组(GOP)、图像、宏块条、宏块、块。
MPEG-2标准在广播电视领域中的主要应用如下:
(1)视音频资料的保存
一直以来,电视节目、音像资料等都是用磁带保存的。这种方式有很多弊端:易损,占地大,成本高,难于重新使用。更重要的是难以长期保存,难以查找、难以共享。随着计算机技术和视频压缩技术的发展,高速宽带计算机网络以及大容量数据存储系统给电视台节目的网络化存储、查询、共享、交流提供了可能。
采用MPEG-2压缩编码的DVD视盘,给资料保存带来了新的希望。电视节目、音像资料等可通过MPEG-2编码系统编码,保存到低成本的CD-R光盘或高容量的可擦写DVD-RAM上,也可利用DVD编着软件(如Daikin Scenarist NT、Spruce DVDMaestro等)制作成标准的DVD视盘,既可节约开支,也可节省存放空间。
(2)电视节目的非线性编辑系统及其网络
在非线性编辑系统中,节目素材是以数字压缩方式存储、制作和播出的, 视频压缩技术是非线性编辑系统的技术基础。目前主要有M-JPEG和MPEG-2两种数字压缩格式。
M-JPEG技术即运动静止图像(或逐帧)压缩技术,可进行精确到帧的编辑,但压缩效率不高。
MPEG-2采用帧间压缩的方式,只需进行I帧的帧内压缩处理,B帧和P帧通过侦测获得,因此 ,传输和运算的数据大多由帧之间的时间相关性得到,相对来说,数据量小,可以实现较高的压缩比。随着逐帧编辑问题的解决,MPEG-2将广泛应用于非线性编辑系统,并大大地降低编辑成本,同时MPEG-2的解压缩是标准的,不同厂家设计的压缩器件压缩的数据可由其他厂家设计解压缩器来解压缩,这一点保证了各厂家的设备之间能完全兼容。
由于采用MPEG-2 IBP视频压缩技术,数据量成倍减少,降低了存储成本,提高了数据传输速度,减少了对计算机总线和网络带宽的压力,可采用纯以太网组建非线性编辑网络系统已成为可能,而在目前以太网是最为成熟的网络,系统管理比较完善,价格也比较低廉。
基于MPEG-2的非线性编辑系统及非线性编辑网络将成为未来的发展方向。
(3)卫星传输
MPEG-2已经通过ISO认可,并在广播领域获得广泛的应用,如数字卫星视频广播(DVB-S)、DVD视盘和视频会议等。目前,全球有数以千万计的DVB-S用户,DVB-S信号采用MPEG-2压缩格式编码,通过卫星或微波进行传输,在用户端经MPEG-2卫星接收解码器解码,以供用户观看。此外,采用MPEG-2压缩编码技术,还可以进行远程电视新闻或节目的传输和交流。
(4)电视节目的播出
在整个电视技术中播出是一个承上启下的环节,对播出系统进行数字化改造是非常必要的,其中最关键一步就是构建硬盘播出系统。MPEG-2硬盘自动播出系统因编播简便、储存容量大、视频指标高等优点,而为人们所青睐。但以往MPEG-2播出设备因非常昂贵,而只有少量使用。随着MPEG-2技术的发展和相关产品成本的下降,MPEG-2硬盘自动系统播出可望得到普及。
3.MPEG-4标准
运动图像专家组MPEG 于1999年2月正式公布了MPEG-4(ISO/IEC14496)标准第一版本。同年年底MPEG-4第二版亦告底定,且于2000年年初正式成为国际标准。
MPEG-4与MPEG-1和MPEG-2有很大的不同。MPEG-4不只是具体压缩算法,它是针对数字电视、交互式绘图应用(影音合成内容)、交互式多媒体(WWW、资料撷取与分散)等整合及压缩技术的需求而制定的国际标准。MPEG-4标准将众多的多媒体应用集成于一个完整的框架内,旨在为多媒体通信及应用环境提供标准的算法及工具,从而建立起一种能被多媒体传输、存储、检索等应用领域普遍采用的统一数据格式。
MPEG-4的编码理念是:MPEG-4标准同以前标准的最显着的差别在于它是采用基于对象的编码理念,即在编码时将一幅景物分成若干在时间和空间上相互联系的视频音频对象,分别编码后,再经过复用传输到接收端,然后再对不同的对象分别解码,从而组合成所需要的视频和音频。这样既方便我们对不同的对象采用不同的编码方法和表示方法,又有利于不同数据类型间的融合,并且这样也可以方便的实现对于各种对象的操作及编辑。例如,我们可以将一个卡通人物放在真实的场景中,或者将真人置于一个虚拟的演播室里,还可以在互联网上方便的实现交互,根据自己的需要有选择的组合各种视频音频以及图形文本对象。
MPEG-4系统的一般框架是:对自然或合成的视听内容的表示;对视听内容数据流的管理,如多点、同步、缓冲管理等;对灵活性的支持和对系统不同部分的配置。
与MPEG-1、MPEG-2相比,MPEG-4具有如下独特的优点:
(1) 基于内容的交互性
MPEG-4提供了基于内容的多媒体数据访问工具,如索引、超级链接、上下载、删除等。利用这些工具,用户可以方便地从多媒体数据库中有选择地获取自己所需的与对象有关的内容,并提供了内容的操作和位流编辑功能,可应用于交互式家庭购物,淡入淡出的数字化效果等。MPEG-4提供了高效的自然或合成的多媒体数据编码方法。它可以把自然场景或对象组合起来成为合成的多媒体数据。
(2)高效的压缩性
MPEG-4基于更高的编码效率。同已有的或即将形成的其它标准相比,在相同的比特率下,它基于更高的视觉听觉质量,这就使得在低带宽的信道上传送视频、音频成为可能。同时MPEG-4还能对同时发生的数据流进行编码。一个场景的多视角或多声道数据流可以高效、同步地合成为最终数据流。这可用于虚拟三维游戏、三维电影、飞行仿真练习等
(3)通用的访问性
MPEG-4提供了易出错环境的鲁棒性,来保证其在许多无线和有线网络以及存储介质中的应用,此外,MPEG-4还支持基于内容的的可分级性,即把内容、质量、复杂性分成许多小块来满足不同用户的不同需求,支持具有不同带宽,不同存储容量的传输信道和接收端。
这些特点无疑会加速多媒体应用的发展,从中受益的应用领域有:因特网多媒体应用;广播电视;交互式视频游戏;实时可视通信;交互式存储媒体应用;演播室技术及电视后期制作;采用面部动画技术的虚拟会议;多媒体邮件;移动通信条件下的多媒体应用;远程视频监控;通过ATM网络等进行的远程数据库业务等。MPEG-4主要应用如下:
(1)应用于因特网视音频广播
由于上网人数与日俱增,传统电视广播的观众逐渐减少,随之而来的便是广告收入的减少,所以现在的固定式电视广播最终将转向基于TCP/IP的因特网广播,观众的收看方式也由简单的遥控器选择频道转为网上视频点播。视频点播的概念不是先把节目下载到硬盘,然后再播放,而是流媒体视频(streaming video),点击即观看,边传输边播放。
现在因特网中播放视音频的有:Real Networks公司的 Real Media,微软公司的 Windows Media,苹果公司的 QuickTime,它们定义的视音频格式互不兼容,有可能导致媒体流中难以控制的混乱,而MPEG-4为因特网视频应用提供了一系列的标准工具,使视音频码流具有规范一致性。因此在因特网播放视音频采用MPEG-4,应该说是一个安全的选择。
(2)应用于无线通信
MPEG-4高效的码率压缩,交互和分级特性尤其适合于在窄带移动网上实现多媒体通信,未来的手机将变成多媒体移动接收机,不仅可以打移动电视电话、移动上网,还可以移动接收多媒体广播和收看电视。
(3)应用于静止图像压缩
静止图像(图片)在因特网中大量使用,现在网上的图片压缩多采用JPEG技术。MPEG-4中的静止图像(纹理)压缩是基于小波变换的,在同样质量条件下,压缩后的文件大小约是JPEG压缩文件的十分之一。把因特网上使用的JPEG图片转换成MPEG-4格式,可以大幅度提高图片在网络中的传输速度。
(4)应用于电视电话
传统用于窄带电视电话业务的压缩编码标准,如H261,采用帧内压缩、帧间压缩、减少象素和抽帧等办法来降低码率,但编码效率和图像质量都难以令人满意。MPEG-4的压缩编码可以做到以极低码率传送质量可以接受的声像信号,使电视电话业务可以在窄带的公用电话网上实现。
(5)应用于计算机图形、动画与仿真
MPEG-4特殊的编码方式和强大的交互能力,使得基于MPEG-4的计算机图形和动画可以从各种来源的多媒体数据库中获取素材,并实时组合出所需要的结果。因而未来的计算机图形可以在MPEG-4语法所允许的范围内向所希望的方向无限发展,产生出今天无法想象的动画及仿真效果。
(6)应用于电子游戏
MPEG-4可以进行自然图像与声音同人工合成的图像与声音的混合编码,在编码方式上具有前所未有的灵活性,并且能及时从各种来源的多媒体数据库中调用素材。这可以在将来产生象电影一样的电子游戏,实现极高自由度的交互式操作。
(三)H.264
H.264是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个新的数字视频编码标准,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10 部分。1998年1月份开始草案征集,1999年9月,完成第一个草案,2001年5月制定了其测试模式TML-8,2002年6月的 JVT第5次会议通过了H.264的FCD板。2003年3月正式发布。
H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。但它采用回归基本的简洁设计,不用众多的选项,获得比H.263++好得多的压缩性能;加强了对各种信道的适应能力,采用网络友好的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同分辨率以及不同传输(存储)场合的需求;它的基本系统是开放的,使用无需版权。
在技术上,H.264标准中有多个闪光之处,如统一的VLC符号编码,高精度、多模式的位移估计,基于4×4块的整数变换、分层的编码语法等。这些措施使得H.264算法具有很的高编码效率,在相同的重建图像质量下,能够比H.263节约50%左右的码率。H.264的码流结构网络适应性强,增加了差错恢复能力,能够很好地适应IP和无线网络的应用。 H.264的算法在概念上可以分为两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送。在VCL和NAL之间定义了一个基于分组方式的接口,打包和相应的信令属于NAL的一部分。这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。
VCL层包括基于块的运动补偿混合编码和一些新特性。与前面的视频编码标准一样,H.264没有把前处理和后处理等功能包括在草案中,这样可以增加标准的灵活性。
NAL负责使用下层网络的分段格式来封装数据,包括组帧、逻辑信道的信令、定时信息的利用或序列结束信号等。例如,NAL支持视频在电路交换信道上的传输格式,支持视频在Internet上利用RTP/UDP/IP传输的格式。NAL包括自己的头部信息、段结构信息和实际载荷信息,即上层的VCL数据。(如果采用数据分割技术,数据可能由几个部分组成)。 H.264支持1/4或1/8像素精度的运动矢量。在1/4像素精度时可使用6抽头滤波器来减少高频噪声,对于1/8像素精度的运动矢量,可使用更为复杂的8抽头的滤波器。在进行运动估计时,编码器还可选择增强内插滤波器来提高预测的效果。
在H.264的运动预测中,一个宏块(MB)可以按图2被分为不同的子块,形成7种不同模式的块尺寸。这种多模式的灵活和细致的划分,更切合图像中实际运动物体的形状,大大提高了运动估计的精确程度。在这种方式下,在每个宏块中可以包含有1、2、4、8或16个运动矢量。
在H.264中,允许编码器使用多于一帧的先前帧用于运动估计,这就是所谓的多帧参考技术。例如2帧或3帧刚刚编码好的参考帧,编码器将选择对每个目标宏块能给出更好的预测帧,并为每一宏块指示是哪一帧被用于预测。 H.264与先前的标准相似,对残差采用基于块的变换编码,但变换是整数操作而不是实数运算,其过程和DCT基本相似。这种方法的优点在于:在编码器中和解码器中允许精度相同的变换和反变换,便于使用简单的定点运算方式。也就是说,这里没有反变换误差。 变换的单位是4×4块,而不是以往常用的8×8块。由于用于变换块的尺寸缩小,运动物体的划分更精确,这样,不但变换计算量比较小,而且在运动物体边缘处的衔接误差也大为减小。为了使小尺寸块的变换方式对图像中较大面积的平滑区域不产生块之间的灰度差异,可对帧内宏块亮度数据的16个4×4块的DC系数(每个小块一个,共16个)进行第二次4×4块的变换,对色度数据的4个4×4块的DC系数(每个小块一个,共4个)进行2×2块的变换。
H.264为了提高码率控制的能力,量化步长的变化的幅度控制在12.5%左右,而不是以不变的增幅变化。变换系数幅度的归一化被放在反量化过程中处理以减少计算的复杂性。为了强调彩色的逼真性,对色度系数采用了较小量化步长。 在先前的H.26x系列和MPEG-x系列标准中,都是采用的帧间预测的方式。在H.264中,当编码Intra图像时可用帧内预测。对于每个4×4块(除了边缘块特别处置以外),每个像素都可用17个最接近的先前已编码的像素的不同加权和(有的权值可为0)来预测,即此像素所在块的左上角的17个像素。显然,这种帧内预测不是在时间上,而是在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。
如图4所示,4×4方块中a、b、...、p为16 个待预测的像素点,而A、B、...、P是已编码的像素。如m点的值可以由(J+2K+L+2)/ 4 式来预测,也可以由(A+B+C+D+I+J+K+L)/ 8 式来预测,等等。按照所选取的预测参考的点不同,亮度共有9类不同的模式,但色度的帧内预测只有4类模式。 H.264 草案中包含了用于差错消除的工具,便于压缩视频在误码、丢包多发环境中传输,如移动信道或IP信道中传输的健壮性。
为了抵御传输差错,H.264视频流中的时间同步可以通过采用帧内图像刷新来完成,空间同步由条结构编码(slice structured coding)来支持。同时为了便于误码以后的再同步,在一幅图像的视频数据中还提供了一定的重同步点。另外,帧内宏块刷新和多参考宏块允许编码器在决定宏块模式的时候不仅可以考虑编码效率,还可以考虑传输信道的特性。
除了利用量化步长的改变来适应信道码率外,在H.264中,还常利用数据分割的方法来应对信道码率的变化。从总体上说,数据分割的概念就是在编码器中生成具有不同优先级的视频数据以支持网络中的服务质量QoS。例如采用基于语法的数据分割(syntax-based data partitioning)方法,将每帧数据的按其重要性分为几部分,这样允许在缓冲区溢出时丢弃不太重要的信息。还可以采用类似的时间数据分割(temporal data partitioning)方法,通过在P帧和B帧中使用多个参考帧来完成。
在无线通信的应用中,我们可以通过改变每一帧的量化精度或空间/时间分辨率来支持无线信道的大比特率变化。可是,在多播的情况下,要求编码器对变化的各种比特率进行响应是不可能的。因此,不同于MPEG-4中采用的精细分级编码FGS(Fine Granular Scalability)的方法(效率比较低),H.264采用流切换的SP帧来代替分级编码。
四、H.264的性能比较
TML-8为H.264的测试模式,用它来对H.264的视频编码效率进行比较和测试。测试结果所提供的PSNR已清楚地表明,相对于MPEG-4(ASP:Advanced Simple Profile)和H.263++(HLP:High Latency Profile)的性能,H.264的结果具有明显的优越性。
H.264的PSNR比MPEG-4(ASP)和H.263++(HLP)明显要好,在6种速率的对比测试中,H.264的PSNR比MPEG-4(ASP)平均要高2dB,比H.263(HLP)平均要高3dB。6个测试速率及其相关的条件分别为:32 kbit/s速率、10f/s帧率和QCIF格式;64 kbit/s速率、15f/s帧率和QCIF格式;128kbit/s速率、15f/s帧率和CIF格式;256kbit/s速率、15f/s帧率和QCIF格式;512 kbit/s速率、30f/s帧率和CIF格式;1024 kbit/s速率、30f/s帧率和CIF格式。
8. C语言jpg解码问题(文件读取)
mgdecmp库是WINCE 系统提供一改咐个解码BMP,GIF,PNG,JPG的文件的库,这个库的缺陷是兄升不能解出MASK 图片.具体用法如下:
1.把imgdecmp.h加入工程,imgdecmp.h文件内容如羡歼老下:
/*---------------------------------------------------------------------------*/
*
* (c) Copyright Microsoft Corp. 1997-98 All Rights Reserved
*
* mole: imgdecmp.h
* date:
* author: jaym
*
* purpose:
*
/*---------------------------------------------------------------------------*/
#ifndef __IMGDECMP_H__
#define __IMGDECMP_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#include "imgrendr.h"
typedef void (CALLBACK *PROGRESSFUNC)(IImageRender *pRender, BOOL bComplete, LPARAM lParam);
typedef DWORD (CALLBACK *GETDATAFUNC)(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam);
typedef struct tagDecompressImageInfo {
DWORD dwSize; // Size of this structure
LPBYTE pbBuffer; // Pointer to the buffer to use for data
DWORD dwBufferMax; // Size of the buffer
DWORD dwBufferCurrent; // The amount of data which is current in the buffer
HBITMAP * phBM; // Pointer to the bitmap returned (can be NULL)
IImageRender ** ppImageRender; // Pointer to an IImageRender object (can be NULL)
int iBitDepth; // Bit depth of the output image
LPARAM lParam; // User parameter for callback functions
HDC hdc; // HDC to use for retrieving palettes
int iScale; // Scale factor (1 - 100)
int iMaxWidth; // Maximum width of the output image
int iMaxHeight; // Maxumum height of the output image
GETDATAFUNC pfnGetData; // Callback function to get more data
PROGRESSFUNC pfnImageProgress; // Callback function to notify caller of progress decoding the image
COLORREF crTransparentOverride; // If this color is not (UINT)-1, it will override the
// transparent color in the image with this color. (GIF ONLY)
} DecompressImageInfo;
#define IMGDECOMP_E_NOIMAGE 0x800b0100
COLORREF *
GetHalftonePalette();
COLORREF *
Get332Palette();
HRESULT
DecompressImageIndirect(DecompressImageInfo *pParams);
#ifdef __cplusplus
};
#endif // __cplusplus
#endif // !__IMGDECMP_H__
2.按照下面的方法使用.
HDC hdc = CreateCompatibleDC(NULL);
DecompressImageInfo dii;
BYTE szBuffer[1024] = {0};
HANDLE hFile = INVALID_HANDLE_VALUE;
// Fill in the 'DecompressImageInfo' structure
dii.dwSize = sizeof( DecompressImageInfo ); // Size of this structure
dii.pbBuffer = szBuffer; // Pointer to the buffer to use for data
dii.dwBufferMax = 1024; // Size of the buffer
dii.dwBufferCurrent = 0; // The amount of data which is current in the buffer
dii.phBM = &hBitmap; // Pointer to the bitmap returned (can be NULL)
dii.ppImageRender = NULL; // Pointer to an IImageRender object (can be NULL)
dii.iBitDepth = GetDeviceCaps(hdc,BITSPIXEL); // Bit depth of the output image
dii.lParam = ( LPARAM ) &iCeBMPFile;//hFile; // User parameter for callback functions
dii.hdc = hdc; // HDC to use for retrieving palettes
dii.iScale = 100; // Scale factor (1 - 100)
dii.iMaxWidth = 10000; // Maximum width of the output image
dii.iMaxHeight = 10000; // Maxumum height of the output image
dii.pfnGetData = GetImageData; // Callback function to get image data
dii.pfnImageProgress = ImageProgress; // Callback function to notify caller of progress decoding the image
dii.crTransparentOverride = ( UINT ) -1; // If this color is not (UINT)-1, it will override the
// transparent color in the image with this color. (GIF ONLY)
// Process and decompress the image data
typedef HRESULT (CALLBACK* ULPRET)( DecompressImageInfo* pParams );
HINSTANCE hLib;
ULPRET lpfnDLLProc;
hLib = LoadLibrary ( L"Imgdecmp.dll" );
if ( hLib )
{
lpfnDLLProc = (ULPRET) GetProcAddress ( hLib, L"DecompressImageIndirect" );
hr = (*lpfnDLLProc) ( &dii );
FreeLibrary ( hLib );
}
// Clean up
DeleteDC( hdc );
9. c语言 的功能比较弱,是不是因为C语言的库比较少
正如楼上所说 c语言只是工具
你说的 c语言库少,应该是片面理解了
从c语言官方标准来说 c89 c99 这都是 20世纪的东西了(1999年),都是基本库,到现在都没有更新了
如果这样理解 你没有错
但是 有很多开源或者收费的库,可以实现很多的功能
那日常生活来说 暴风影音
openssl 实现的网络数据加密
ffmpeg库 实现的 视频解码
还有 你看到的界面 都是使用的 开源,或者是收费的 界面库
所以语言没有强弱之别,只有程序员的功力深浅
补充:我不是做软件开发的,错误之处见谅