❶ 为什么 Visual Studio Emulator for android 那么流畅
这是因为Visual Studio的扩展性比较好。
比较流行的软件开发工具包括VisualBasic、VisualC++、Δελφοί、PowerBuilder等等。正如不同的螺丝需要不同的螺丝刀一样,要想在软件开发中省力,关键是使用合适的工具,合适的工具将会使你事半功倍。每一种工具都有它的长处和不足,我们需要知道一种工具擅长的领域才能物尽其用。
要选择一种合适的软件开发工具,首先要明确自己开发软件的领域或者学习编程的目的所在。如果自己的工作只是局限在某个领域,那么使用这个领域专门的工具往往可以较快地达到目的,如数据库开发使用PowerBuilder、FoxPro,多媒体开发使用Authorware,科学计算使用MatLab等。专门工具的特点是针对这个领域进行了特别的设计,语法相对简单易学,开发速度快,缺点是扩展性差,由于用户相对比较烧,所以控件或者第三方的工具较少。如果拿专用工具和通用工具进行比较,这是没有意义的。
如果开发工作不是局限在某个领域,那么就需要一个通用的软件开发工具,在Windows环境下的软件开发工具包括VisualBasic、VisualC++、Δελφοί等。
如果你没有什么编程基础,可以考虑选择VisualBasic和Δελφοί,使用比较简单,容易学习,而且它们的调试工具很好用,对于初学者能够很快掌握。如果你以前有丰富的DOS下的编程经验,也可以考虑VisualC++。
由于个人的能力和精力的限制,我们不可能什么软件都独立开发,而且不论是微软,还是其它公司,在开发一个编程语言工具时都是考虑最广泛的用户,而不可能针对那些有特殊要求的用户,所以每种开发工具必然有其不擅长的领域,这时需要使用第三方工具或控件扩展软件的功能。VisualBasic的扩展性最好,支持ActiveX和标准DLL调用,针对VisualBasic的扩展控件也比较多,而且有很多ActiveX控件和DLL是只能用于VisualBasic的。Δελφοί的VCL体系也是很容易扩展的,所以其控件也比较丰富。但是VisualC++的扩展性要略差一些,对程序员的个人开发能力要求比较高。
编程往往是对已有的资料进行整理加工来完成任务。很多人都爱使用微软的开发工具,很重要的因素就是其开发工具方面的资料非常丰富,出版的书籍也很多。VisualBasic和VisualC++的帮助系统(MSDN)中提供的技术文章,示例代码非常齐全。
虽然是通用工具,但我们的开发工作可能是有侧重点的。VisualC++在硬件接口、系统接口方面更为擅长,但学起来比较难。VisualBasic也可以开发硬件接口方面的程序,但控制能力相对来说要差一些,特别是对于一些非标准的硬件设备。
开发工具的功能越强,往往也越难学,而易学的工具往往功能有限。学习第一门语言往往比较困难,而掌握一门语言后再学习其它语言则比较容易,关键是第一门语言要学习得比较深入。用俄语说:Всё трудно в начале.
❷ android手机的apk档案中的class.dex档案是什么是做什么用的呢
Android虚拟机器执行的程式码档案,是java档案编译过去的
dex是安卓上的应用程式apk中提取出来的可执行档案,即将APK中的classes.dex档案通过dex优化过程将其优化生成一个·dex档案单独存放,原APK中的classes.dex档案会保留。
所谓dex,是由android软体中的classes.dex生成的,dex化即是把那个档案预先提取出来作用是能加快软体载入速度和开机速度。不过dex也有缺点,那就是有时候加刷东西会出现问题。
原本系统恢复出厂设定后第一次开机需要先提取classes.dex出来,而dex化就是现在你提前把它提取出来了。系统启动或者程式执行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份odex的体积了。
Odex化后系统启动和程式执行速度大大提高,稳定性不变。因此推荐做Odex化。
一般来说官方rom都是odex化的rom(含Odex档案),而定制rom大部分都是deodex化的(无odex档案)。两者应该各有优点吧,貌似现在也没有统一的说法。官方rom大部分每个apk对应一个.odex档案,而deodex化的rom里面只有一个apk,把.odex转换成classes.dex放到apk包里面了。所以 odex rom的.apk+.odex=deodex化rom的1个.apk (简单地来说,其实就上一个合并的过程)。
dx工具的作用是将.class转换为dex档案,因为Dalvik虚拟机器所执行的程式不是标准的Jar档案,而是将Jar档案经过特别的转换以提高执行效率,而转换后的档案就是dex档案。dx工具是Android原始码的一部分,其路径是在out目录下
看楼主所说,应该是智慧手机.这是预设的存图片的资料夹,不过也可以放其他的东西,只要是手机支援的格式,都可以用.
CMD可以做一些在Windows下面做不了的工作,有些时候解决一些问题必须在CMD下面在可以。
XP.CMD命令
有关某个命令的详细资讯,键入 HELP 命令名
ASSOC 显示或修改副档名关联。
AT 计划在计算机上执行的命令和程式。
ATTRIB 显示或更改档案属性。
BREAK 设定或清除扩充套件式 CTRL+C 检查。
CACLS 显示或修改档案的访问控制列表(ACLs)。
CALL 从另一个批处理程式呼叫这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设定活动内码表数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
就是执行一些命令的;
对你电脑的一些档案进行操作的;
Mac作业系统的一种档案格式。 dmg是MAC苹果机上的压缩映象档案,相当于在Windows上常见的iso档案。DMG在苹果机上可以直接执行载入,在Windows PC上可以通过命令列软体dmg2iso.exe转换成ISO档案。 命令执行格式:dmg2iso.exe 空格 filename(待转换档名).dmg 空格 filename(转换后文件名).iso 确定。 dmg2iso是一个免费软体,但其功能相对有限,某些情况下目标dmg档案无法成功转换为iso。这种情况下可以使用UltraISO等商业软体进行格式转换。 同时,使用者可以在程式-常用工具-磁盘工具里面建立,大小自己定义的dmg档案,用来放程式,档案打包,或用来做一个限定容量的路径。然后你可以对这个磁盘做你要做的事情,如用TOAST烧录。因此说,dmg档案在Mac中又相当于一个软U盘。
Robots.txt档案的作用:
1、遮蔽网站内的死连结。
2、遮蔽搜寻引擎蜘蛛抓取站点内重复内容和页面。
3、阻止搜寻引擎索引网站隐私性的内容。
因此建立robots.txt档案是很有必要的,网站中重复的内容、页面或者404资讯过多,搜寻引擎蜘蛛就会认为该网站价值较低,从而降低对该网站的“印象分”,这就是我们经常听到的“降低权重”,这样网站的排名就不好了。
robots.txt档案需要注意的最大问题是:必须放置在一个站点的根目录下,而且档名必须全部小写。
robots.txt档案的基本语法只有两条,第一条是:User-agent,即搜寻引擎蜘蛛的名称;第二条是:Disallow,即要拦截的部分。
下面我们看一下撰写基本的robots.txt档案所需要知道的一些语法和作用。
(1),允许所有的搜寻引擎访问网站的所有部分或者建立一个空白的文字文件,命名为robots.txt。
User-agent:*Disallow:或者User-agent:*Allow:/
(2),禁止所有搜寻引擎访问网站的所有部分。
User-agent:*Disallow:/
(3),禁止网络索引你的网站。
User-agent:BaispiderDisallow:/
(4),禁止Google索引你的网站。
User-agent:GooglebotDisallow:/
(5),禁止除网络以外的一切搜寻引擎索引你的网站。
User-agent:BaispiderDisallow:User-agent:*Disallow:/
(6),禁止除Google以外的一切搜寻引擎索引你的网站。
User-agent:GooglebotDisallow:User-agent:*Disallow:/
(7),禁止和允许搜寻引擎访问某个目录,如:禁止访问admin目录;允许访问images目录。
User-agent:*Disallow:/admin/Allow:/images/
(8),禁止和允许搜寻引擎访问某个字尾,如:禁止访问admin目录下所有php档案;允许访问asp档案。
User-agent:*Disallow:/admin/*.php$Allow:/admin/*.asp$
(9),禁止索引网站中所有的动态页面(这里限制的是有“?”的域名,如:index.php?id=8)。
User-agent:*Disallow:/*?*
CLX(Component Library for Cross-Platform 跨平台元件库)是可以应用在Win32和Linux两种平台上的. 用Delphi 7 开发的CLX程式,可以不做任何修改,在Linux下用Kylix重新编译. Delphi 7现在支援VCL和CLX两个类库。CLX在底层是基于Qt这个类库的,在Linux系统上面Qt的名字是非常重要的。
❸ c++ builder 10 怎么调用android api
我们都知道,C++Builder编程是建立在VCL类库的基础上的。在程序中经常需要访问VCL对象的属性和方法。不幸的是,VCL类库并不保证其中对象的属性和方法是线程访问安全的(Thread_safe),访问VCL对象的属性或调用其方法可能会访问到不被别的线程所保护的内存区域而产生错误。因此,TThread对象提供了一个Synchronize方法,当需要在线程中访问VCL对象属性或调用方法时,通过Synchronize方法来访问属性或调用方法就能避免冲突,使各个线程之间协调而不会产生意外的错误。
❹ 新手如何编写手机程序
问题一:初学者怎么制作开发app软件? 其实app也就是应用软件的意思,是英文Application的简称,通常是指iphone,安卓等手机应用,现在的APP多指智能手机上的第三方应用程序。想要快速制作APP的话,你可以使用那些无需编程的那种方式,比如:微客达。。。
问题二:个人开发手机APP的流程是怎样的? 要开发安卓的手机app软件:
1、要有可供开发的软件,可以通过下载得到。
2、要有电脑。安装这些开发工具。
3、要学会软件开发的语言。java等。
软件开发的大致流程是:
1、需求分析。确定要开发某一款软件的同时要对需求进行分析,开发的app有实际实用意义才可以。
2、开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
3、详细开发,在概要设计的基础上详细开发。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。
4、测试以及软件交付。
问题三:手机怎样编写c++程序 可以采用一些在线ide,比如ideone。ideone
可以使用一个安卓版的c编译器,好像叫做c4droid。
通过手机远程控制电脑,在电脑上编写,可以使用splashtop等远程控制工具。
问题四:从零基础开始学习制作一款手机APP是怎样的步骤? 安卓开发首先要有java基础,其次在电脑里面安装java、安卓集成开发环境包括ADT eclipse和sdk等,接下来看一下安卓开发系列教程即可
问题五:我是初学者 我想做智能手机软件 要学习什么语言 详细点 你得报班,许多语言都可以写。起码你得会c
问题六:自己开发的android程序怎么在手机上运行? 1 首先在虚拟机上运行一次,然后打开你的源代码在bin文件下有个apk文件把它拿出来装到你手机上就可以了
2或你以后可以直接用真机代替虚拟机搞开发,可以直接连接数据线到电脑,(要有驱动,如不知道怎么下驱动,可以下载91手机助手或豌豆荚帮你自动安装),然后你在Eclipse下点击运行你的程序是可以在Target项中点击Manual选择真机运行
问题七:开发安卓手机APP,怎么从最最基本的学 新手建议先看视频教程学习,因为最开始对于新手来说,开发环境的搭建是个困难,还有安卓四大组件都是基础的,这些看视频学方便你自己一边学习一边照着做,学的差不多了,然后就直接看书,毕竟看书学习比较快一点。如果你以前没有学过java,建议先看看java的基本知识
问题八:怎样编写电脑程序,我是新手,要最简单的 就看你喜欢拿方面的多疑点了啊?你要是喜欢嵌入式开发(所谓的嵌入式开发:就是指开发手机游戏,手机系统,汽车上控制程序等等)或跨平台程序,你就学java了,你要是想快速开发windows应用程序那你就写。NET了,各有所长啊!
问题九:怎么学习写程序 如果您想学习编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧!
==============================================
方案一 Basic语言 & Visual Basic
优点
(1)Basic 简单易学,很容易上手。
(2)Visual Basic 提供了强大的可视化编程能力,可以让你轻松地做出漂亮的程序。
(3)众多的控件让编程变得象垒积木一样简单。
(4)Visual Basic 的全部汉化让我们这些见了English就头大的人喜不自禁。
缺点
(1)Visual Basic 不是真正的面向对象的开发文具。
(2)Visual Basic 的数据类型太少,而且不支持指针,这使得它的表达能力很有限。
(3)Visual Basic 不是真正的编译型语言,它产生的最终代码不是可执行的,是一种伪代码。它需要一个动态链接库去解释执行,这使得Visual Basic 的编译速度大大变慢。
综述:方案一适合初涉编程的朋友,它对学习者的要求不高,几乎每个人都可以在一个比较短的时间里学会vB编程,并用VB 做出自己的作品。对于那些把编程当做游戏的朋友来说,VB 是您最佳的选择。
Basic/Visual Basic简介
==============================================
方案二 Pascal语言 & Delphi
优点
(1)Pascal语言结构严谨,可以很好地培养一个人的编程思想。
(2)Delphi是一门真正的面向对象的开发工具,并且是完全的可视化。
(3)Delphi使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。
(4)Delphi具有强大的数据库开发能力,可以让你轻松地开发数据库。
缺点
Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。
综述: 方案二比较适合那些具有一定编程基础并且学过Pascal语言的朋友。
Pascal语言简介
Delphi简介
==============================================
方案三 C语言 & Visual C++
优点
(1)C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。
(2)微软的MFC库博大精深,学会它可以让随心所欲地进行编程。
(3)VC是微软制作的产品,与操作系统的结合更加紧密。
缺点
对使用者的要求比较高,既要具备丰富的C语言编程经验,又要具有一定的WINDOWS编程基础,它的过于专业使得一般的编程爱好者学习起来会有不小的困难。
综述: VC是程序员用的东西。如果你是一个永不满足的人,而且可以在编程上投入很大的精力和时间,那么学习VC你一定不会后悔的。
C语言简介
==============================================
方案四 C++语言 & C++ Builder
优点
(1)C++语言的优点全部得以继承。
(2)完全的可是化。
(3)极强的兼容性,支持OWL、VCL和MFC三大类库。
(4)编译速度非常快。
缺点
由于推出的时间太短,关于它的各种资料还不太多。
综述:我认为C++ Builder 是最好的编程工具。它既保持了C++语言编程的优点,又做到了完全的可视化。
书很多,自己找吧,学编程,关键在于坚持,说得再好,没......>>
问题十:有什么适合新手入门用的好的手机app开发软件 轻客挺好用 白薯发大财
❺ delphixe android mssql services datasnap 哪个好
觉得Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计:
(1)利用向导完成DataSnap服务器的框架,如下图:
由于是实验,所以选择VCL程序,如果是实际应用,建议Service程序
我习惯使用TCP/IP作为通讯协议,简单且速度快,Sample Methods是演示和测试用
缺省211端口
使用TDSServerMole作为数据服务提供主体,非常方便变更为Service应用服务
(2)设置服务器数据
在TDSServerMole中设置数据,为简便起见,采用BDE引擎的DBDEMOS下animals.dbf数据库,有文字也有图片,如下图:
放置一个TDataSetProvider连接该数据源,如下图:
服务器至此设计完成,没有编写一行代码,只是调整了部分控件和窗体的名称。手动启动该应用服务程序。
(3)新建Android客户端程序
新建一个android客户端程序,在工程中增加一个TDataMole模块,用于放置与应用服务器的连接和数据,在模块窗体上放置TSQLConnection、TDSPProviderConnection、TClientDataSet三个控件,如下图:
其中TSQLConnection的属性设置中LoginPrompt要设为False,TDSPProviderConnection的属性设置如下:
其中ServerClassName是指应用服务器上作为数据服务提供主体的TDSServerMole的实例类名称,在这里我习惯性地重新命名了,缺省一般是TServerMethods1。TClientDataSet的设置如下图:
为实现应用服务器上Sample Methods在客户端的调用,需要创建服务类在客户端的实现类,右键点击TSQLConnection选择生成,如下图:
新生成的类定义如下:
以上过程完全同Windows下的DataSnap客户端开发。
(4)Android界面显示数据
Android下对数据的显示,与Windows下开发最大的区别是,无法使用TDBEdit一类的数据感应控件,取而代之的是标准控件,通过LiveBindings技术实现数据感应。要实现该过程,首先是在窗体上放置用于数据展示的标准控件,这里采用了TListBox和TGrid,通过TTabControl分开,如下图:
IP和Port输入框是为了更灵活地连接服务器,下面的按钮OnClick事件代码如下:
procere TfrmMain.Button1Click(Sender: TObject);
var
dm : TdmServerMethodsClient;
begin
try
//连接指定IP和Port的应用服务器
dmMain.SQLConn.Close;
dmMain.SQLConn.Params.Values['HostName'] := edtIP.Text;
dmMain.SQLConn.Params.Values['Port'] := edtPort.Text;
try
dmMain.SQLConn.Open;
try
//创建应用服务器上的Sample Methods在客户端的实现类
dm := TdmServerMethodsClient.Create(dmMain.SQLConn.DBXConnection);
//执行服务器上的方法
ShowMessage(dm.ReverseString(edtIP.Text));
finally
dm.Free;
end;
//开启客户端数据集
dmMain.cdsanimals.Close;
dmMain.cdsanimals.Open;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
dmMain.SQLConn.Close;
end;
end;
❻ android的sdk什么意思
Android SDK(Software Development Kit)提供了在Windows/Linux/Mac平台上开发Android应用的开发组件,Android支持所有的平台,其包含了在Android平台上开发移动应用的各种工具集。 工具集不仅包括了Android模拟器和用于Eclipse的Android开发工具插件(ADT),而且包括了各种用来调试、打包和在模拟器上安装应用的工具。 Android SDK主要是以Java语言为基础,用户可以使用Java语言来开发Android平台上的软件应用。通过SDK提供的一些工具将其打包成Android平台使用的apk文件,然后用SDK中的模拟器(Emulator)来模拟和测试软件在Android平台上运行情况和效果。
❼ iOS或Android开发中有哪些库或工具可以帮助实现数据可视化
下面,就为大家推荐几款热门的可视化工具:VARCHARTXGantt甘特图控件VARCHARTXGantt让您能够以横道图、柱状图的形式来编辑、打印以及图形化的表示您的数据,它能在几分钟之内实现您想要的甘特图开发,而且只需要通过简单设计模式下的属性页配置,您可以不写一行代码就能快速的让VARCHARTXGantt控件适应您的客户的各种需求,其强大的功能可与Microsoft的project系列产品媲美。选择正确的可视化工具,是基于Flash/JavaScript(HTML5)的图表控件。使用AnyChart控件,可创建跨浏览器和跨平台的交互式图表和仪表。AnyChart图表目前已被很多知名大公司所使用,可用于仪表盘、报表、数据分析、统计学、金融等领域。AnyChart可以被用于Web、桌面和移动应用程序,AnyChart可运行于当前PC和Mac上所有主流的浏览器,如:Chrome,Safari,Firefox,InternetExplorer和Opera,并且可用于所有移动平台(Android(2.2+)和iOS(iPhone,iPad,iPodTouch).)上的主流浏览器。如何选择正确的可视化工具,基于Web的功能齐全的商业仪表板平台,能快速开发可定制、交互式的仪表盘。无论您是利用现有的BI基础架构/应用程序或者启动一个从无到有的独立项目,Dundas为创建/开发复杂的数字仪表盘和使用户迅速而简单的获得强大的功能而提供业界最具成本效益的平台。它拥有很多亮点,如业界首创交互式的HTML5移动界面和广泛支持MapRece、灵活的数据可视化、支持连接到任何数据源等。如何选择正确的数据可视化工具,/WPFVisifire是一款WPF&Silverlight图表控件,使用visifire可创建移动,Web和桌面应用程序的动态图表。Visifire图表控件还能嵌入到任何web页面。Visifire独立的服务器端技术能够与ASP,ASP.Net,SharePoint,PHP,JSP,ColdFusion,Python,Ruby或者简单的HTML一起使用。如何选择正确的数据可视化工具,/VCL被全球1000多家企业所使用的ActiveX/VCL工控仪表控件。IocompActiveX/VCL是一套用于工业控制的仪表盘控件,适用于ActiveX或VCL开发环境。Iocomp工业仪表盘控件包(VCL版)包括多种用来创建专业的仪表和测量、工业控制、工业监控等相关的应用程序的控件包,包括仪表盘控件、开关控件、实时曲线控件、LED灯控件等等。IocompActiveX/VCL已被全球1000多家企业所使用,它具备实时、高速、专业的优势。IocompActiveX/VCL一共有四个版本:标准版(standard)、专业版(Pro)、绘图版(Plot)、终极版(Ultimate)。如何选择正确的数据可视化工具,IocompActiveX/VCL
❽ 如何在Delphi XE7下写一个Android APP
FireMonkey 自成体系, 有自己的 TApplication、TControl 等和 VCL 对应的大多数构件, 但基本还是根植于早期的 TComponent, 应该属于 VCL 的深度扩展.
在 Windows 下创建 FireMonkey 工程可建立 FireMonkey HD Application(2D) 或 FireMonkey 3D Application,
然后可随意添加 FireMonkey HD Form 或 FireMonkey 3D Form. 其窗体文件的后缀是 fmx 了.
--------------------------------------------------------------------------------
在新 FireMonkey HD Application 下简单测试:
--------------------------------------------------------------------------------
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs;
type
TForm1 = class(TForm)
Button1: TButton; //现在的 TButton 来自 FMX.Controls 单元
procere Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procere TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hello FireMonkey!'); //现在 ShowMessage 方法来自 FMX.Dialogs 单元; 底层实现不同但用法一样, 太好了
end;
——————————————————————————————
测试的时候建议使用真机测试,安装一个手机助手即可。
❾ android sdk是什么意思
SDK:(software development kit)软件开发工具包。
被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
因此,Android SDK 指的是Android专属的软件开发工具包。
❿ Android 音视频01 --- H264的基本原理01
H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括:
解决的是空域数据冗余问题。
解决的是时域数据冗徐问题
将空间上的相关性变为频域上无关的数据然后进行量化。
经过压缩后的帧分为:I帧,P帧和B帧:
关键帧,采用帧内压缩技术。
向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。
双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。
除了I/P/B帧外,还有图像序列GOP。
H264的基本原理其实非常简单,下我们就简单的描述一下H264压缩数据的过程。通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。
划分好宏块后,计算宏块的象素值。以此类推,计算一幅图像中每个宏块的像素值。
对于视频数据主要有两类数据冗余,一类是时间上的数据冗余,另一类是空间上的数据冗余。其中时间上的数据冗余是最大的。为什么说时间上的冗余是最大的呢?假设摄像头每秒抓取30帧,这30帧的数据大部分情况下都是相关联的。也有可能不止30帧的的数据,可能几十帧,上百帧的数据都是关联特别密切的。
H264编码器会按顺序,每次取出两幅相邻的帧进行宏块比较,计算两帧的相似度。如下图:
在H264编码器中将帧分组后,就要计算帧组内物体的运动矢量了。
H264编码器首先按顺序从缓冲区头部取出两帧视频数据,然后进行宏块扫描。当发现其中一幅图片中有物体时,就在另一幅图的邻近位置(搜索窗口中)进行搜索。如果此时在另一幅图中找到该物体,那么就可以计算出物体的运动矢量了。
运动矢量计算出来后,将相同部分(也就是绿色部分)减去,就得到了补偿数据。我们最终只需要将补偿数据进行压缩保存,以后在解码时就可以恢复原图了。压缩补偿后的数据只需要记录很少的一点数据。
我们把运动矢量与补偿称为 帧间压缩技术 ,它解决的是视频帧在时间上的数据冗余。除了帧间压缩,帧内也要进行数据压缩,帧内数据压缩解决的是空间上的数据冗余。
人眼对图象都有一个识别度,对低频的亮度很敏感,对高频的亮度不太敏感。所以基于一些研究,可以将一幅图像中人眼不敏感的数据去除掉。这样就提出了帧内预测技术。
一幅图像被划分好宏块后,对每个宏块可以进行 9 种模式的预测。找出与原图最接近的一种预测模式。然后,将原始图像与帧内预测后的图像相减得残差值。再将我们之前得到的预测模式信息一起保存起来,这样我们就可以在解码时恢复原图了,经过帧内与帧间的压缩后,虽然数据有大幅减少,但还有优化的空间。
可以将残差数据做整数离散余弦变换,去掉数据的相关性,进一步压缩数据。
上面的帧内压缩是属于有损压缩技术。也就是说图像被压缩后,无法完全复原。而CABAC属于无损压缩技术。
无损压缩技术大家最熟悉的可能就是哈夫曼编码了,给高频的词一个短码,给低频词一个长码从而达到数据压缩的目的。MPEG-2中使用的VLC就是这种算法,我们以 A-Z 作为例子,A属于高频数据,Z属于低频数据。看看它是如何做的。
CABAC也是给高频数据短码,给低频数据长码。同时还会根据上下文相关性进行压缩,这种方式又比VLC高效很多。
制定了相互传输的格式,将宏快 有组织,有结构,有顺序的形成一系列的码流。这种码流既可 通过 InputStream 网络流的数据进行传输,也可以封装成一个文件进行保存,主要作用是为了传输。
组成H264码流的结构中 包含以下几部分 ,从大到小排序依次是:
H264视频序列,图像,片组,片,NALU,宏块 ,像素。
NAL层:(Network Abstraction Layer,视频数据网络抽象层) : 它的作用是H264只要在网络上传输,在传输的过程每个包以太网是1500字节,而H264的帧往往会大于1500字节,所以要进行拆包,将一个帧拆成多个包进行传输,所有的拆包或者组包都是通过NAL层去处理的。
VCL层:(Video Coding Layer,视频数据编码层) : 对视频原始数据进行压缩
起始码0x 00 00 00 01 或者 0x 00 00 01 作为 分隔符 。
两个 0x 00 00 00 01之间的字节数据 是表示一个NAL Unit。
I 帧的特点:
1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。
2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。
1.更高的编码效率:同H.263等标准的特率效率相比,能够平均节省大于50%的码率。
2.高质量的视频画面:H.264能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输是H.264的应用亮点。
3.提高网络适应能力:H.264可以工作在实时通信应用(如视频会议)低延时模式下,也可以工作在没有延时的视频存储或视频流服务器中。
4.采用混合编码结构:同H.263相同,H.264也使用采用DCT变换编码加DPCM的差分编码的混合编码结构,还增加了如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4x4二维整数变换等新的编码方式,提高了编码效率。
5.H.264的编码选项较少:在H.263中编码时往往需要设置相当多选项,增加了编码的难度,而H.264做到了力求简洁的“回归基本”,降低了编码时复杂度。
6.H.264可以应用在不同场合:H.264可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。
7.错误恢复功能:H.264提供了解决网络传输包丢失的问题的工具,适用于在高误码率传输的无线网络中传输视频数据。
8.较高的复杂度:264性能的改进是以增加复杂性为代价而获得的。据估计,H.264编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。
H.264的目标应用涵盖了目前大部分的视频服务,如有线电视远程监控、交互媒体、数字电视、视频会议、视频点播、流媒体服务等。H.264为解决不同应用中的网络传输的差异。定义了两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送。