[Cmake-Android]音視頻總結:
-
[Cmake-Android音視頻]SDK,NDK基本介紹
-
[Cmake-Android音視頻]NDK-r14b編譯ffmpeg3.4支持neon,硬解碼
-
[Cmake-Android音視頻]創建支持ffmpeg3.4的項目
-
[Cmake-Android音視頻]ffmpeg3.4實現解封裝
-
[Cmake-Android音視頻]ffmpeg3.4軟硬解碼和多線程解碼
-
[Cmake-Android音視頻]ffmpeg3.4視頻格式轉換和顯示
-
[Cmake-Android音視頻]ffmpeg3.4音頻重採樣
-
[Cmake-Android音視頻]OpenSLES音頻播放
SDK常用目錄
- platform-tools:該文件夾下存放了Android平臺的相關工具,比如adb.exe,sqlite3.exe等。
- platforms:不同版本的SDK
- ndk-bundle:ndk目錄
- tools:Android開發,調試的工具,性能監控
- sources:當前版本的源碼
NDK
Android NDK是一套允許您使用原生代碼語言(例如C,C++)實現部分應用的工具集。在開發某些類型的應用時(比如音視頻應用),可以重複使用以這些語言編寫的代碼庫。
NDK常用目錄(ndk-bundle)
- platforms:系統依賴庫
- toolchains:交叉編譯工具, gcc ,ld
交叉編譯
交叉編譯:就是在一個平臺(如PC)上生成另一個平臺(Android,Ios或者其他嵌入設備)的可執行 代碼。
比如: 在x86的機器上編譯出arm上的程序
在linux平臺上編譯arm上的程序
無論是自行安裝PC上的編譯器,還是下載其他平臺(Android或者iOS)的交叉工具編譯鏈,它們都會提供以下幾個工具:CC、AS、AR、LD、NM、GDB。
CC:編譯器,對C源文件進行編譯處理,生成彙編文件。
AS:將彙編文件生成目標文件(彙編文件使用的是指令助記符,AS將它翻譯成機器碼)。
AR:打包器,用於庫操作,可以通過該工具從一個庫中刪除或者增加目標代碼模塊。
LD:鏈接器,爲前面生成的目標代碼分配地址空間,將多個目標文件鏈接成一個庫或者是可執行文件。
GDB:調試工具,可以對運行過程中的程序進行代碼調試工作。
STRIP:以最終生成的可執行文件或者庫文件作爲輸入,然後消除掉其中的源碼。
NM:查看靜態庫文件中的符號表。
Objdump:查看靜態庫或者動態庫的方法簽名。
交叉編譯中有兩個需要注意的點:
第一:在哪個平臺上運行交叉編譯工具
第二:編譯的程序是在哪個平臺上執行
動態庫:在編譯的時候只把庫函數的地址寫到執行文件當中,在運行的時候再根據庫函數的地址去加載動態鏈接庫
靜態庫:在編譯的時候直接把源碼複製到執行文件或者庫當中
應用二進制界面(ABI)
- 不同的Android手機使用不同的CPU, 因此支持不同的指令集。
- CPU與指令集的每種組合都有其自己的應用二進制界面,即ABI
ABI包含以下信息:
- CPU指令集
- 內存字節順序
- 可執行二進制文件的格式
- 解析的各種約定。對齊限制,堆棧使用和調用函數
- 庫集
支持的ABI
每個 ABI 支持一個或多個指令集。如下表:
NEON
NEON 提供標量/矢量指令和寄存器(與 FPU 共享,armeabi默認),主要用來進行浮點運算
-mfpu = vfp (浮點協處理器)
-mfpu = neon 指定是否使用neon
-march = armv7-a