先看效果演示
接下來手把手教你實現這樣的效果。
minicap簡介
minicap是一個可以遠端獲取android螢幕畫面的開源庫,它在低版本的Android系統上採用截圖的方式獲取畫面,在Android4.2以上系統上採用建立VirtualDisplay的方式來獲取畫面、效能大大提高。 minicap的核心功能都在minicap.so中實現,如果要進行二次開發直接引用即可。
1.mincap下載
1.1 clone程式碼
git clone https://github.com/openstf/minicap.git
cd minicap
git submodule init // 初始化jni/vendor/libjpeg-turbo子倉庫配置
git submodule update // 更新jni/vendor/libjpeg-turbo子倉庫程式碼
1.2 minicap倉庫目錄結構
minicap
|-example 簡單的示例客戶端,連線minicap服務端,轉換為web顯示
|-jni 原始碼,minicap為純c/c++
| |-minicap 簡單的示例服務端,實現將捕獲到的幀通過網路傳輸的功能
| |-minicap-shared 核心功能庫,實現捕獲畫面、並通知listener的功能
| | |-aosp 實際實現
| | |-libs 已經編譯好的so庫
| | |-android-xx 對應API版本為xx的so庫,實現方法有所不同
| | |-src 原始碼
| | |-mock 空實現
| |-vendor 依賴的第三方庫
| |
|-libs 編譯後的輸出目錄
2.mincap編譯
2.1 下載ndk-build
2.2 用ndk-build 編譯mincap安裝包
2.2.1 下載配置adb
1) 下載安裝adb
2) 在環境變數配置中新增adb路徑,按鍵Windows+R開啟執行,輸入sysdm.cpl,回車,彈出系統屬性對話方塊 在高階==》環境變數==》系統變數==》path,新增adb可執行檔案的資料夾路徑。
2.2.2 連線裝置
需要手機開啟除錯者模式,開啟 設定==>開發人員選項==>USB除錯,開啟即可。開發人員選項在Android4.2以下,可以直接看到。 在Android 4.2及以上版本中預設是隱藏的。開啟開發人員選項的方法是:開啟 設定==>關於手機,連續點選版本號7次即可。
首次除錯,手機會彈出是否允許某臺電腦以USB方式除錯該手機的問詢對話方塊,勾選允許使用這臺計算機進行除錯。
然後用adb devices命令,檢視已連線的裝置。如果裝置列表為空,可以嘗試一下:1) 在充電和檔案傳輸模式之間切換一下 ;2)重新開啟USB除錯許可權 ; 3)撤銷USB除錯許可權重新賦權;4) 重啟手機
adb devices
2.2.3 檢視手機CPU支援的ABI(CPU指令架構)
不同的Android
手機使用不同的CPU
,而不同的 CPU
支援不同的指令集,CPU
與指令集的每種組合都有專屬的應用二進位制介面,即 ABI(全稱:ApplicationBinary Interface)
adb shell getprop ro.product.cpu.abi
2.2.4 獲取手機裝置的sdk
adb shell getprop ro.build.version.sdk
2.2.5 執行編譯
ndk-build可以通過APP_PLATFORM引數設定目標平臺,預設是android-14,這裡指定的是android-26(8.0),實際並沒有什麼影響,因為只有minicap-shared的實現是平臺相關的,但我們使用了編譯好的庫;通過APP_ABI可以指定指令平臺,如果不指定預設將編譯全部的armeabi-v7a、arm64-v8a、x86、x86_64平臺。
執行完畢後,在libs/armeabi-v7a下會生成minicap、minicap.so、minicap-nopie三個檔案,實際用到的只有minicap,這裡生成的minicap.so是一個空實現。
ndk-build.cmd APP_PLATFORM=android-26 APP_ABI=arm64-v8a
3. 執行minicap專案示例
3.1 執行minicap專案中的example內的服務端
3.1.1 將編譯好的兩個檔案push到手機裝置上
so檔案一定用minicap-master\jni\minicap-shared\aosp\libs\android-26\arm64-v8a\minicap.so,cpu架構要匹配.否則會導致與系統不相容,執行會報錯
adb push libs/arm64-v8a/minicap data/local/tmp
adb push jni/minicap-shared/aosp/libs/android-26/arm64-v8a/minicap.so data/local/tmp
3.1.2 設定檔案執行許可權
adb shell chmod 777 data/local/tmp/minicap
adb shell chmod 777 data/local/tmp/minicap.so
3.1.3 獲取android裝置解析度
adb shell wm size
3.1.4 啟動服務端
# 測試伺服器是否可用
adb shell LD_LIBRARY_PATH=data/local/tmp data/local/tmp/minicap -P 1080x1920@1080x1920/0 -t
# 啟動伺服器
adb shell LD_LIBRARY_PATH=data/local/tmp data/local/tmp/minicap -P 1080x1920@1080x1920/0
3.1.5 使用adb工具進行埠對映,將服務端的埠對映到1717,客戶端node讀取伺服器傳送資料的埠是1717
adb forward tcp:1717 localabstract:minicap
3.2 執行minicap專案中的example內的客戶端
3.2.1 安裝依賴
yarn
3.2.2 啟動客戶端
node app.js
參考文件