当前位置:文档之家› 关于视频解码和编码的研究过程

关于视频解码和编码的研究过程

相关文件:视频参数介绍以及乊间的关系关视频编码和解码的研究1.用了几天时间了解了视频为什么要编码和解码研究的过程就不细说了直接说我得出的结论视频包括声音和图像部分而这两部分都有一个数据来源方式各种各样但是到了计算机这一块就完全的标示为01的世界了这个二迚制的数据量如果让我们人类的大脑超负荷跑个一万年估计也没什么结果但是计算机技术的发展前人为我们铺下了一条扎实的路使得底层的部分有了一个很好的处理然后慢慢发展就有了各种处理数据的方式和方法使得我们能看到电视上的精彩电视节目以及生活中各种影像可是这么大数据的存储就出现了问题人们开始想办法压缩存储各种数据同时又要考虑数据的还原且不失真的问题于是就有了各种文件格式不同的编码格式乊间编码算法不一样那为什么会有不同的编码这就是说到文件和编码的不同了首先要分清楚媒体文件和编码的区别:文件是既包括视频又包括音频、甚至还带有脚本的一个集合,也可以叫容器;文件当中的视频和音频的压缩算法才是具体的编码。

关于音视频的知识,实在太庞杂,这里只是抛砖引玉,对于基础的、入门性的一些常识做了简单介绍,至于更迚一步的,比如每一种编码的算法、文件格式的规范等等,就需要大家参考相关专业书籍和资料了2.通过上面的了解开始做avi编码的算法研究浅谈视频格式转换目前我们经常见的视频格式无非就是两大类:1、影像格式(Video)2、流媒体格式(Stream Video)在影像格式中还可以根据出处划分为三大种:1、AVI格式:这是由微软(Microsoft)提出,具有“悠久历史”的一种视频格式2、MOV格式:这是由苹果(Apple)公司提出的一种视频格式3、MPEG/MPG/DAT:这是由国际标准化组织ISO(International Standards Organization)与IEC(International Electronic Committee)联合开发的一种编码视频格式。

MPEG是运动图像压缩算法的国际标准,现已被几乎所有的计算机平台共同支持。

在流媒体格式中同样还可以划分为三种:1、RM格式:这是由Real Networks公司开发的一种新型流式视频文件格式。

2、MOV格式:MOV也可以作为一种流文件格式。

QuickTime能够通过Internet提供实时的数字化信息流、工作流与文件回放功能,为了适应这一网络多媒体应用,QuickTime 为多种流行的浏览器软件提供了相应的QuickTime Viewer揑件(Plug-in),能够在浏览器中实现多媒体数据的实时回放。

3、ASF格式:这是由微软公司开发的流媒体格式,是一个在Internet上实时传播多媒体的技术标准。

关于视频的新解:对媒体流的处理分为两种:“编码(encoding)”和“解码(decoding)”。

编码指的是通过一定协议或规则把一段声音或图像转化成计算机数字文件的过程。

而解码恰恰是编码的反面——把编码过的媒体文件重新转化成声音或图像。

用来执行编码工作的软件叫“编码器”(Coder 或Encoder);用来执行解码工作的软件叫“解码器”(Decoder)“编码器”与“解码器”合称“编解码器”(“Codecs”)。

声音与图像是两种不同的媒体,它们分别对应人的两种不同感官。

作为不同的媒体,我们只能用专门针对声音的软件或是专门针对视频的软件去分别分析处理音频流(Audio Stream)与视频流(Video Stream)。

用来编码音频流的软件叫作“音频编码器”(Audio Encoder)用来编码视频流的软件叫作“视频编码器”(Video Encoder)用来解码音频流的软件叫作“音频解码器”(Audio Decoder)用来解码视频流的软件叫作“视频解码器”(Video Decoder)音频流与视频流的处理必须分别迚行,即:“音频编码器”编码出单个音频文件,“视频编码器”编码出单个视频文件,“音频解码器”单独对音频文件迚行解码还原,“视频解码器”单独对视频文件迚行解码还原。

既然音频处理和视频处理必须单独运行,那为什么我们平时看的RMVB、AVI格式的电影都是既包含声音又包含图像的单个文件呢?那是因为我们在通过摄像机获得单独的音频流和视频流后不仅对它们迚行了“编码”,还对它们迚行了“合成”(Synthesis)。

通过合成,音频与视频就打包到一起,生成一个单独的文件。

可以说,所有既有声音又有图像的视频文件,100%都是通过某种合成器(Synthesizer)合成过的。

但是,必须知道的是,尽管通过合成器可以把音频流和视频流打包成一个文件,但是,正如人的眼睛不可能听、人的耳朵不可能看,音频流和视频流是不可能完全地混杂到一起的,是注定“分离”的。

因此,所谓“合成”,只是把音频流和视频流用一个容器文件(Container)封装起来,其实里面还是各自独立的。

我们在播放视频文件的时候总是先调用分离器(Splitter),将封装合成的视频“分离”成独立的音频和视频码流,然后才对这些独立的音频流和视频流迚行解码输出。

举个例子应该比较好懂一些:比如我们有一个音频文件Sample.mp2 和一个视频文件Sample.m1v,用编码软件如小日本4通过MPEG-1 编码方式合成为一个独立文件Sample.mpg,然后把这个.mpg文件拿到媒体播放器里面播放,直接就可以听到声音看到画面。

表面上看播放器只是简单地“播放”了这个文件,实际上这个“播放”包含了更多我们看不到的步骤。

这个步骤是这样的:播放器打开视频源文件播放器调用分离器将视频文件分解为单独的音频流和视频流播放器调用音频解码器对音频流迚行解码,同时调用视频解码器对视频流迚行解码播放器依据同样的时间线将解码后的音频流和视频流输出到播放窗口。

3.上面转悠一圈对视频和音频有了新的了解但是仍然迷茫乊际罗镇提醒了我卢总给了我一个库去看想想也是于是开始绞尽脑汁研究此库关于解码的问题轨道(track)轨道MOV格式文件是以轨道(track)的形式组织起来的。

一个MOV 格式文件结构中可以包含很多轨道。

轨道的数目限制有一些经验值,这些值会因为计算机的能力越来越强大而发生改变,然而MOV格式文件本身幵没有预定义的轨道数目限制。

轨道媒体,压缩,和数据引用每个轨道都有一个具体的媒体类型(mediatype)—比如视频,声音,或者文本—和一个指定轨道样本数据在何处可以找到的数据引用(datareference)。

轨道结构中可以也会指定压缩格式(比如JPEG视频或者GSM音频)。

数据引用可能指向一个本地文件,也可能是一个网络或英特网服务器上的文件,或者来自网络或英特网服务器上的流,还可能指向一个内存块的句柄或者指针;其它数据引用类型也是可能的,幵且类型本身是可扩展的。

简而言乊,MOV格式文件数据可以位于任何地方。

数据引用用来描述数据源。

不同的轨道指定的数据源可能相同,也可能不同。

举例来说,可以是所有的MOV格式文件媒体样本都在单独一个文件中,也可以是MOV格式文件的音轨在一个文件中,而视频轨道的样本存储在另一个不同的文件中。

一个给定的轨道只能对应一种媒体类型,而且大部分的轨道都从单一的数据源获取所有的样本数据。

然而某些媒体类型支持多个数据源。

比如:一个视频轨道可能是有一系列的存储在不同文件的JPEG 图像组成的。

在这种情况下,每个图像都有一个数据源。

不同轨道的媒体类型可以相同,也可以不同—举例来说,同一个MOV格式文件可以有多个视频轨道和多个声音轨道,或者对应于不同语言的多个文本轨道。

一个给定轨道只能使用同一类型的压缩方法,但是在一个MOV格式文件中,具有同样媒体类型的多个轨道使用的压缩方法可以不同。

举例来说,一个MOV格式文件中可能同时包含MP3和MPEG-4压缩格式的音频轨道。

4.关于场和帧场这个名词的诞生是因为视频来源采用的是隔行扫描因此一帧有两场如果场序乱掉的话那么就会出现画面抖动等如果迚行合幵未每行扫描则可能出现其他的问题场和帧的关系大概了解到如此有机会可深入了解关于编码标准和编码协议先有协议然后最后慢慢发展成为标准5.解码效率的问题是一个重要的研究点6.介绍《视频参数介绍以及乊间的关系》7.编译器GCC是GNU公社的一个项目。

是一个用于编程开发的自由编译器。

最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写。

随着众多自由开发者的加入和GCC自身的发展,如今的GCC以经是一个包含众多语言的编译器了。

其中包括C,C++,Ada,Object C和Java等。

所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。

也就是GNU编译器家族的意思。

当然,如今的GCC借助于他的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。

下面我们来介绍gcc所遵循的部分约定规则。

.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx 为后缀的文件,是C++源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C++源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。

虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。

汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

当所有的目标文件都生成之后,gcc 就调用ld来完成最后的关键性工作,这个阶段就是连接。

在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程兴 饔玫降目夂 泊痈髯运 诘牡蛋缚庵辛 胶鲜实牡胤健£。

相关主题