先看效果演示
接下來手把手教你實現這樣的效果。
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) 重啟手機
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
參考文檔