❶ 為什麼 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)負責以網路所要求的恰當的方式對數據進行打包和傳送。