從零開始仿寫一個抖音App——跨平臺影片編輯SDK專案搭建
不知不覺已經到了2019年,本系列的文章也更新到了8篇。很慶幸筆者能堅持下來,從我司的程式碼中學習到了很多東西。當然更慶幸的是收穫了眾多讀者的鼓勵和支援。從本篇文章開始,我們將接觸短影片 app 中比較核心的功能——影片編輯,筆者在我司的日常工作中,也經常對這個模組進行開發,可以說對這部分功能比較熟悉了。所以最近的幾篇文章,我會從零開始完善一個影片編輯 sdk 的各種功能,最後整合到我們之前的 MyTiktok 專案中。注:本文以 android 平臺為例子,ios 因為不會,所以暫時不涉及。
本文分為以下章節,讀者可按需閱讀:
1.專案建立——新建一個跨平臺影片編輯專案
2.基礎 lib 整合——將 ffmpeg、protobuf 這些必須使用的三方庫整合到專案中
3.基礎資料結構——定義和講解一些影片編輯流程中需要使用到的資料結構
一、專案建立
1.方法論
我想看本文的人有很大一部分都是 android 工程師,所以在講乾貨之前,我需要講一講方法論
-
1.當我們在使用 IDE 開發 App 的時候,我們在幹什麼?
1.建立一個資料夾,模仿 AS 生成的專案,向資料夾裡面加檔案
2.在 gradle 檔案中新增依賴庫,然後寫程式碼。使用命令列來 sync gradle。
3.命令列執行 gradle 來打包 APK,執行 App
1.首先我們會使用 AS 來新建一個專案,專案會有很多可選的引數。
2.在專案的 gradle 檔案中新增依賴庫,然後寫程式碼
3.打包成 APK,執行 App
1.Android 工程師平時使用 Android Studio 來開發 App,ios 工程師使用 XCode。那麼我們平時在使用 IDE 的時候,我們到底在幹什麼呢?
2.這裡我以 Android 來舉例子:
3.上面就是我們平時開發的流程了,那麼我們能不使用 IDE 來開發一個 App 嗎?理論上來說是可以的,有下面這些步驟。
4.其實我們不需要 AS 就能進行 Android 開發(當然沒有人那麼傻)。我們需要的只是一個專案管理的工具——gradle。放在不同的開發者那裡,只是專案管理的工具不同:寫 java 的用 maven、寫 python 的用 conda/pip、寫前端的用 npm、寫 c/c++ 的用 CMake。
5.所以當一個專案中既要寫 c++ 又要寫 android 還要寫 ios 的時候,我們只需要三個專案管理工具就行了,IDE 對我們來說只是一個檔案編輯器+檔案搜尋器+檔案瀏覽器。
6.以上就是我作為一個 android 工程師,在使用了各種不同語言構建不同專案之後思維上的轉變。當你能看清和思考一個東西的本質的時候你能走的更遠。
2.專案搭建
那麼廢話不多說,就開始搭建我們的專案吧。注意:目前 已經上傳到了 github 上面了,建議結合專案食用,
-
1.首先我們新建一個資料夾,然後進入資料夾中。在其中建立下面這些東西,如圖1。裡面的東西我一個個來講解
1.首先 LICENSSE 和 README.md 就不用說了。
2.android:下面是一個完整的 android 工程,android 工程的內部也會引用到外部的檔案,這個後面再說。
3.ios:下會是一個完整的 ios 工程,當然我目前還不會 ios,所以先略過
4.buildtools:裡面會存放一些專案執行時的指令碼,比如我們在 中用到的編譯 FFmpeg 的指令碼等等
5.docs:內部存放一些專案文件
6.sharedcode:裡面存放 android 和 ios 共享的程式碼,如 c/c++ 程式碼等等,還有就是 protobuf 生成的程式碼。
7.sharedproto:裡面存放 android、ios、c++ 三端共享的 protobuf 程式碼,可以使用 buildtools 裡面的指令碼一鍵生成三端的程式碼
8.third_part:可以以 git submodule 的形式,引用其他的三方庫的原始碼與 android 和 ios 專案一起編譯,目前是空的。
圖1:根目錄
-
2.介紹好了專案構成,我們開始配置 android 專案吧。
1.首先 externalNativeBuild.cmake 裡面配置了一些引數,這裡只要知道我們使用的是 c++11 就好了
2.externalNativeBuild.ndk 裡面我們只生成一種 so 檔案就是 armeabi,本來是應該使用 arm64-v8a,這樣才是最佳適配,現在就先湊合著用吧
3.再看外面的 externalNativeBuild.cmake,這裡設定了 CMake 的路徑,注意這裡是以當前 gradle 檔案為初始路徑的。
1.多了 jni.editorsdk 目錄,這個目錄用來存放 jni 檔案,相當於是 c/c++ 和 java 的中間層。
2.然後是 CMakeLists.txt 檔案,其用於管理 android 專案需要引入的 c/c++ 程式碼。
1.首先,我們需要使用 AS 來建立一個支援 C++ 的工程,注意目錄需要選在上面提到的 android 目錄下面。
2.建立好了之後,我們需要建立一個 android library 作為影片編輯 sdk 的載體。這個 module 將會整合所有的,共享 cpp 程式碼、.so 檔案、.a 檔案,然後透過 java 程式碼被外部呼叫。在專案中我將這個 module 命名為了 mttvideoeditorsdk
3.至於 app module 可以引用 mttvideoeditorsdk module 便於平時除錯 sdk。
4.我們再來看 mttvideoeditorsdk 的結構如圖2,其實比較簡單
5.我們再來看看 gradle 檔案是怎麼配置的如圖3。
圖2:mttvideoeditorsdk目錄
圖3:mttvideoeditorsdk的gradle檔案
二、基礎 lib 整合
上面講了如何搭建專案,這一章就來講講如何整合一些基礎庫吧。
首先我們都知道,在 android 中我們可以使用 gradle 向遠端中央倉庫拉取我們需要的庫。像 java 的 maven、js 的 npm、ios 的 pods都有這個能力。但是在 c/c++ 上的專案管理工具 CMake 就沒有這個能力,它只能在本地搜尋和整合你已經安裝好的庫或者原始碼,而且 c/c++ 又不具有跨平臺能力。所以最終就導致了我們如果想使用 ffmpeg、protobuf 這樣大型的開源專案都需要自己去 clone 原始碼然後自己編譯出不同平臺的庫。
1.FFmpeg 整合
1.說到 FFmpeg 的整合,其實我在,已經提到過一些了。我這裡就簡單講講。
2.首先我們需要編譯 FFmpeg 的程式碼獲取 so 庫和 標頭檔案,我的專案與上次不同,現在已經能編譯出一個單獨的 libffmpeg.so 的檔案了,大家可以之前拿過來用。
3.然後我們在 android 專案下面新建一個目錄用來儲存這些東西,如圖4。
4.最後我們看程式碼塊1,這裡都有註釋比較簡單,就是將 libffmpeg.so 和他的標頭檔案連結到整個專案中
作者:何時夕
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2508/viewspace-2821544/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從零開始仿寫一個抖音App——跨平臺視訊編輯SDK專案搭建APP
- 從零開始仿寫一個抖音App——開始APP
- 從零開始仿寫一個抖音App——app架構更新與網路層定製APP架構
- 從零開始仿寫一個抖音App——基於FFmpeg的極簡視訊播放器APP播放器
- 從零開始仿寫一個抖音App——日誌和埋點以及後端初步架構APP後端架構
- 從零開始仿寫一個抖音App——Android繪製機制以及Surface家族原始碼全解析APPAndroid原始碼
- 從零開始搭建一個vue專案Vue
- 從零開始仿寫一個BiliBili客戶端之編譯ijkplayer客戶端編譯
- 從零開始寫專案第一篇【搭建環境】
- 從零開始編寫一個babel外掛Babel
- 從零開始寫一個ExporterExport
- 從零開始構建一個webpack專案Web
- 從零搭建一個IdentityServer——專案搭建IDEServer
- OcenAudio for Mac跨平臺音訊編輯神器Mac音訊
- 【從零開始擼一個App】PKCEAPP
- 【從零開始擼一個App】KotlinAPPKotlin
- 從零搭建一個vue專案Vue
- 從零開始編寫一個 Python 非同步 ASGI WEB 框架Python非同步Web框架
- 【Java EE】從零開始寫專案【總結】Java
- 短影片直播APP成品開發直播系統仿抖音APP無加密APP加密
- 從零開始仿寫一個B站客戶端之抓包介面客戶端
- 從零開始搭建一個 hexo 部落格。Hexo
- 從零開始搭建一個mock服務Mock
- 從零開始, 開發一個 Web Office 套件 (2): 富文字編輯器Web套件
- 從零開始, 開發一個 Web Office 套件 (1): 富文字編輯器Web套件
- 從零開始生成一個ios react-native專案iOSReact
- 從零開始使用 webpack5 搭建 react 專案WebReact
- 從零開始寫一個node爬蟲(一)爬蟲
- 【譯】使用Kotlin從零開始寫一個現代Android 專案-Part1KotlinAndroid
- 從零開始編寫指令碼引擎指令碼
- 用Vue仿了一個類似抖音的AppVueAPP
- 從零開始React專案架構(一)React架構
- 從零開始的爬蟲專案(一)爬蟲
- 【從零開始擼一個App】Dagger2APP
- 從零開始開發和搭建直播平臺-教程彙總篇
- 漫談直播:從零開始認識直播並快速搭建專屬直播平臺
- 從零開始構建自己的第一個vue專案Vue
- 從零開始寫一個Javascript解析器JavaScript