簡體   English   中英

Android,屏幕截圖

[英]Android, Screen capture

我正在構建一個應用程序,該應用程序應為具有Android 4及更高版本的任何無根設備實現屏幕“鏡像”功能,啟動2幀/秒就足夠了。

我正在嘗試使用ADB“ framebuffer:”命令來抓取設備屏幕截圖

ADB USB通信協議是面向消息的(不是流式的),因此,要獲取數據塊,需要接收/發送一組已讀(A_WRTE @ 4096bytes)/確認(A_OKEY @ 24bytes)命令對。
只要接收方沒有發送A_OKEY,設備就不會推送其他數據(因此,不是流協議)。

為了優化性能,我直接實現了ADB USB協議,而不是使用ADB.exe

三星Galaxy 5設備的圖像具有1920 * 1080的分辨率和32位深度,因此,RAW幀緩沖圖像的權重為1920 * 1080 * 4 = 8294400字節(對於iPAD,它甚至更大),使用通過面向ADB消息的協議的“ framebuffer:”命令大約需要2秒鍾才能收到一個屏幕截圖(grrr ..)。

如果這將是流協議,則在USB 2.0 @ 480Mbps上應該花費約150毫秒

  • 考慮到以上幾點,有什么方法可以使“ framebuffer:”更快嗎?
  • 是否可以通過USB發送任何降低分辨率的方法?
  • 是否有其他方法可用於所有設備通用的更快的全天候24x7截圖?
  • 相當於Android的AirPlay( 對所有設備通用 )是否最佳?

PS
我已經嘗試過ASL項目,因為ADB.exe Shell並未以系統特權運行(而是在“ shell”帳戶下運行),所以它在我的“三星Galaxy 5”上不起作用。

在Android 4.3及更高版本上,您可以執行screenrecord操作,並將鏡像的虛擬顯示輸入視頻編碼器。 帶有5.0“ Lollipop”的1.2版具有內置的USB流傳輸功能,其中包括termio代碼,可通過adb shell發送二進制數據。 使用“ hidden”參數--output-format=h264並指定連字符( - )作為輸出文件名。

源代碼在frameworks / av / cmds / screenrecord中

這是通過USB獲得體面幀速率的唯一方法。 您可以通過指定--output-format=raw-frames來嘗試未壓縮的數據,但是即使在VGA分辨率下,也無法以適當的速度獲得幀。

FWIW,當前的設備通常不在恢復模式下使用幀緩沖區dev。 取而代之的是,它們使用覆蓋層,這些覆蓋層是在掃描顯示時由硬件編輯器組合而成的。 完整細節在體系結構文檔中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM