錄制Android屏幕內(nèi)容的解決辦法

10年的拉孜網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整拉孜建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“拉孜網(wǎng)站設(shè)計”,“拉孜網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
首先,下載adb工具到電腦本地并解壓縮到某個盤符的根目錄(本文以G盤為例)(圖1)。接下來,請打開手機的USB調(diào)試模式(在開發(fā)者選項中,如果設(shè)置中沒有找到,請進入系統(tǒng)版本信息界面狂點版本號即可進入開發(fā)者模式),通過USB線連接電腦,當(dāng)屏幕出現(xiàn)“允許USB調(diào)試嗎”的提示時選擇是。
重新回到電腦端,同時按下“Win+R”鍵輸入“cmd”進入命令提示符界面,依次輸入“G:”(進入保存有adb工具的盤符),回車;“cd adb”(進入cdb文件夾),回車;“adb devices”(連接手機),回車;“adb shell screenrecord /sdcard/movie.mp4”(開始錄制,注意screenrecord與/間有空格,movie為文件名),回車(圖2)。此時,你就可以對手機進行操作了,而屏幕所顯示的所有內(nèi)容都將會被記錄成視頻。當(dāng)你想結(jié)束錄制時,只需在電腦上按“ctrl+c”鍵即可,視頻文件會保存在手機的根目錄下(圖3)。
Android 從 4.0 開始就提供了手機錄屏方法,但是需要 root 權(quán)限,比較麻煩不容易實現(xiàn)。但是從 5.0 開始,系統(tǒng)提供給了 app 錄制屏幕的一系列方法,不需要 root 權(quán)限,只需要用戶授權(quán)即可錄屏,相對來說較為簡單。本文是在參考了網(wǎng)絡(luò)上其他錄屏資料后完成的, 感謝 。以下將介紹開發(fā)錄屏功能的一系列步驟以及實現(xiàn)過程中所遇到的一些需要注意的事項。
因為錄制用到麥克風(fēng),所以需要加上 AUDIO 權(quán)限,
如果開發(fā)的 app targetApi 在 6.0 以上時,還需要動態(tài)獲取權(quán)限。
這里先介紹 MediaProjectionManager , MediaProjectionManager 是系統(tǒng)提供的一種服務(wù),當(dāng)我們拿到這個服務(wù)對象,可以創(chuàng)建一個 Intent ,通過這個 Intent 可以啟動一個彈框樣式的 Activity,如果用戶授權(quán)了,那我們便可以繼續(xù)下一步屏幕錄制。需要說明的是,Intent 是去啟動另一個 Activity 的,有極少極少的機型是沒有對應(yīng)的授權(quán)Activity 的,所以這里需要多加判斷,防止應(yīng)用奔潰。
即使用戶授權(quán)了,同意錄制操作,仍然需要捕獲異常,因為有可能會出現(xiàn)這樣一種情況,就是用戶在同意錄屏的時候系統(tǒng)也正在錄屏,錄屏操作沖突了。
這一步是整個錄屏操作最為關(guān)鍵的一步!我們初始化了 MediaRecorder,設(shè)置了是否錄上聲音、錄屏文件格式、錄屏文件路徑、音視頻的編碼器、比特率、視頻幀率等
然后將在步驟 3 中的 resultCode 以及 data 作為必要的參數(shù)通過 MediaProjectionManager 創(chuàng)建 VirtualDisplay。VirtualDisplay 可以理解為虛擬的呈現(xiàn)器,它可以捕獲屏幕上的內(nèi)容,并將其捕獲的內(nèi)容渲染到 Surface 上(Surace 由 MediaRecorder 提供,通過 getSurface() 方法得到),MediaRecorder 再進一步將其封裝處理為 Mp4 文件。
經(jīng)過以上步驟 prepare 之后,當(dāng)再次調(diào)用 MediaRecorder.start() 就可以開始錄屏了,這里同意也需要注意的時,調(diào)用 start() 方法開始錄屏之后,不能立即調(diào)用 stop()方法停止錄屏,否則會奔潰。測試在測試錄屏功能時立馬停止錄屏,應(yīng)用奔潰,一直找不到原因。直到看到了源碼( API 26 )里的注釋
所以為了反正奔潰,在 stop 的時候捕獲異常,并且置空 MediaRecorder,下次錄屏的時候再重新生成 MediaRecorder。
由于知識水平有限,難免有錯誤遺漏,歡迎指正!項目地址為 屏幕錄制
有時候會用到顏色拾取器這樣的東西來查看屏幕上的顏色值,一直是用Pixolor這個軟件來看顏色的;很方便,點哪里顯示哪里,也沒有延遲,以為是什么黑科技;我注意到一個細(xì)節(jié),如果只是切換屏幕,顏色拾取器不會更新,只有移動拾取器才更新選中;可以確定是截屏來實現(xiàn)的了,那就簡單了,截屏獲取像素點的顏色值就好了
網(wǎng)上看了一下,截屏大概分為保存View為圖像和調(diào)用錄屏服務(wù)兩種辦法,錄屏是比較好的辦法,可以在APP外截屏,所以簡單的封裝了一下
Step 1. Add the JitPack repository to your build file
Step 2. Add the dependency
主要分為兩步,第一步是開啟錄屏;第二步就可以直接獲取截屏,返回Bitmap
截圖的過程錄屏是開啟的,錄屏開啟就可以進行截屏,操作完需要關(guān)閉錄屏
截屏過程很快,效果很好
如果是APP外截屏則開啟懸浮窗服務(wù),可以通過操作懸浮窗進行截屏
參考文章: Android 截屏方式整理 、 Android錄屏(5.0+)
1.初始化一個 MediaProjectionManager
2.創(chuàng)建并啟動 Intent
3.在 onActivityResult 中拿到MediaProjection
4.設(shè)置VirtualDisplay將圖像和展示的View關(guān)聯(lián)起來。一般來說我們會將圖像展示到SurfaceView,這里為了為了便于拿到截圖,我們使用ImageReader,他內(nèi)置有SurfaceView。
5.通過ImageReader拿到截圖
6.注意截屏之后要及時關(guān)閉VirtualDisplay ,因為VirtualDisplay 是十分消耗內(nèi)存和電量的。
錄屏和截屏差不多,只是截屏的時候只是設(shè)置了一個ImageReader去獲取圖像數(shù)據(jù),而錄屏是設(shè)置一個 SurfaceView 去接收內(nèi)容,獲取視頻流,然后通過 MediaCodec 來實現(xiàn)視頻的硬編碼,然后保存為視頻文件
初始化錄屏的大小和碼率
開始錄屏,設(shè)置輸出文件
停止錄屏
參考文章: Android視頻錄制--屏幕錄制
1.在 AndroidManifest 中添加權(quán)限,Android 6.0 加入的動態(tài)權(quán)限申請,如果應(yīng)用的 targetSdkVersion 是 23,申請敏感權(quán)限還需要動態(tài)申請
中間操作和截屏一樣,就是準(zhǔn)備開啟錄屏
5.創(chuàng)建虛擬屏幕,這一步就是通過 MediaProject 錄制屏幕的關(guān)鍵所在, VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR 參數(shù)是指創(chuàng)建屏幕鏡像,所以我們實際錄制內(nèi)容的是屏幕鏡像,但內(nèi)容和實際屏幕是一樣的,并且這里我們把 VirtualDisplay 的渲染目標(biāo) Surface 設(shè)置為 MediaRecorder 的 getSurface ,后面我就可以通過 MediaRecorder 將屏幕內(nèi)容錄制下來,并且存成 video 文件
6.錄制屏幕數(shù)據(jù),這里利用 MediaRecord 將屏幕內(nèi)容保存下來
如何用 Android 手機完美錄屏
方法一:菜單欄錄屏
下拉手機屏幕,找到“屏幕錄制”快捷按鈕,如果沒有找到,可以查看菜單或者設(shè)置里,找到“屏幕錄制”,如果手機不支持錄屏的話。可以使用第三方的錄屏工具。
方法二:其他錄屏
1、首先,在自己的手機應(yīng)用商店或者百度搜索“迅捷錄屏大師”,然后運行軟件,選擇想要的錄屏方式;
2、然后,選擇想要錄制視頻的畫質(zhì),手機的內(nèi)存若是有限制的話,高清錄屏就能滿足需求了。
3、可以看到界面中“錄屏懸浮窗”的選項,建議開啟以助我們在錄屏過程中實現(xiàn)一些簡單的操作。
4、最后準(zhǔn)備就緒,我們就可以直接點擊“開始屏幕錄制”。
5、錄屏過程中假如出現(xiàn)什么問題,可利用剛剛打開的懸浮窗進行一些簡單操作,或者點擊中間的按鈕暫停錄制。
6、錄制完畢后,點擊懸浮窗的停止按鈕或者點擊主界面紅色按鈕,可完成錄制。
備注:以上就是如何用安卓手機錄屏的方法了,希望對想要錄屏的伙伴們有所幫助。
Android 錄制視頻:
public static voidrecordVideo(Context context, intlimit_time, intsize) {? ??
Intent intent =newIntent();
intent.setAction(MediaStore. ACTION_VIDEO_CAPTURE );
intent.putExtra(MediaStore. EXTRA_VIDEO_QUALITY ,1);
intent.addCategory(Intent. CATEGORY_DEFAULT );
if(size !=0) {? ? ? ??
? //大小限制是long型,int 型無效,所以后邊要寫一個L
? ? intent.putExtra(MediaStore. EXTRA_SIZE_LIMIT ,size *1024*1024L);//限制錄制大小(10M=10 * 1024 * 1024L)
}
if(limit_time !=0) {? ? ??
? ? ? intent.putExtra(MediaStore. EXTRA_DURATION_LIMIT ,limit_time);//限制錄制時間(10秒=10)
}? ??
File videoFile =createVideoFile(context);
if(videoFile !=null) {? ? ? ??
? ? intent.putExtra(MediaStore. EXTRA_OUTPUT ,Uri.fromFile(videoFile));
? ? context.startActivityForResult(intent, CAPTURE_VIDEO_CODE );
}
}
在Android 4.4(Kitkat - API level 19)上集成了一個比較好用的視頻(.mp4格式)錄制功能 – screenrecord 。
使用方法
1.? 基本用法
$ adb shell screenrecord /sdcard/myscreenrecord.mp4
/sdcard/myscreenrecord.mp4 為視頻錄制文件路徑
錄制默認(rèn)分辨率,默認(rèn)4Mbps,默認(rèn)180s的視頻,保存到sdcard上名為myscreenrecord.mp4
2.? 旋轉(zhuǎn)(參數(shù):–rotate)
$ adb shell screenrecord --rotate /sdcard/myscreenrecord.mp4
旋轉(zhuǎn)90度
3.? 指定分辨率(參數(shù):–size)
$adb shell screenrecord --size 112x112 /sdcard/myscreenrecord.mp4
分辨率為112x112,建議不要指定分辨率,使用默認(rèn)分辨率效果最佳;
注意,分辨率不是完全可以隨意定制的,比如在我手機上錄制100x100的會提示錯誤:
The max width/height supported by codec is1920x1088
100x100is not supported by codec, suggest to set it as112x112
4.? 指定比特率(參數(shù):–bit-rate)
$adb shell screenrecord --bit -rate 8000000 /sdcard/myscreenrecord.mp4
設(shè)置比特率為8Mbps,比特率越大,文件越大,畫面越清晰;
5.? 限制錄制時間 (參數(shù): –time-limit)
$adb shell screenrecord --time -limit 10 /sdcard/myscreenrecord.mp4
限制視頻錄制時間為10s,如果不限制,默認(rèn)180s
6.? 導(dǎo)出視頻
$adb pull /sdcard/myscreenrecord.mp4
7.? 注意
請關(guān)注視頻文件生成大小,根據(jù)自身情況而定;
暫不支持聲音;
咱時不支持模擬器錄制( 模擬器錄制看這里 ),出現(xiàn)如下提示:Unable to get output buffers (err=-38)
Encoder failed (err=-38),可認(rèn)為是此原因;
8.? 命令查看
adb shell screenrecord --help
Usage: screenrecord [options]
Records the device's display to a .mp4 file.
Options:
--size WIDTHxHEIGHT
Set the video size, e.g."1280x720".? Default is the device's main
display resolution (if supported),??????? 1280x720if not.? For best
results,use a size supported by the AVC encoder.
--bit -rate RATE
Set the video bit rate, in megabits per second.? Default4Mbps.
--time -limit TIME
Set the maximum recording time, in seconds.? Default / maximum is180.
--rotate
Rotate the output90 degrees.
--verbose
Display interesting information on stdout.
--help
Showthis message.
Recording continues until Ctrl-C is hit or the time limit is reached.
網(wǎng)頁名稱:android錄制,android錄制操作 重放
網(wǎng)站路徑:http://chinadenli.net/article1/dseppid.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、軟件開發(fā)、搜索引擎優(yōu)化、、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)