流程思路是:
創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元昌圖做網(wǎng)站,已為上家服務(wù),為昌圖各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
(1)利用系統(tǒng)錄屏API MediaProjectionManager 向用戶詢問是否錄制
(2)返回一個 Intent data 對象,根據(jù)這個對象調(diào)用 MediaProjectionManager.getMediaProjection() 方法生成 MediaProjection 對象
(3)根據(jù) MediaProjection 對象創(chuàng)建 VirtualDisplay 實例
(4)創(chuàng)建 MediaRecorder 對象并初始化
(5)調(diào)用 MediaRecorder.start() 開始錄制
(6)調(diào)用 MediaRecorder.stop() 停止錄制
(7)上傳文件
調(diào)用 okhttp3 庫
安裝 implementation "com.squareup.okhttp3:okhttp:4.9.3"
MyMediaRecorder.java:
MainActivity.java:
需要實現(xiàn)一個手機(jī)的錄屏功能,于是從網(wǎng)上找了些相關(guān)資料和源碼,發(fā)現(xiàn)跑不起來,于是開始dubug,發(fā)現(xiàn)坑還是很多的,這里記錄一下實現(xiàn)過程和一些些遇到的異常以及一個我調(diào)整完可以跑的Demo。
首先在AndroidManifest中靜態(tài)配置權(quán)限:
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/
uses-permission android:name="android.permission.RECORD_AUDIO"/
然后在Activity中動態(tài)申請
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQUEST_CODE);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.RECORD_AUDIO}, AUDIO_REQUEST_CODE);
}
因為項目中需要用到一個自定義的Application,所以要需要配置一個全局的Application,同樣在AndroidManiest中在application添加自定義的類名,如果在里面啟動服務(wù)了也要一并配置。
application
android:name=".RecordApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
activity android:name=".MainActivity"
intent-filter
action android:name="android.intent.action.MAIN" /
/application
然后可以使用封裝好的實現(xiàn)其錄屏功能的service,這個封裝類是網(wǎng)上找的,看很多人在用,我解決了一些異常,并根據(jù)自己需求修改了一下。
其中主要異常有:
1.mediaRecorder報空指針,解決方案,在聲明的時候聲明為靜態(tài)
private static MediaRecorder mediaRecorder;
2.mediaRecorder.start()方法異常,在每次調(diào)用stop時要先調(diào)用
mediaRecorder.stop();
mediaRecorder.release();
兩個方法,并將
mediaRecorder = null。
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)異常,這里是設(shè)置音頻源,可嘗試將參數(shù)改為
MediaRecorder.AudioSource.DEFAULT
4.stop方法異常,如果是running狀態(tài)不正常,可能是其狀態(tài)丟失,需要將聲明的running也改為靜態(tài)的
0.增加需求,在生成視頻時大部分人都會根據(jù)mediaRecorder.setVideoSize(width, height);方法來定死視頻大小,導(dǎo)致一些手機(jī)會解析不了,或者是視頻比屏幕小,這里提供一種根據(jù)屏幕大小動態(tài)設(shè)置視頻大小的方法。
這里就要用到我們之前定義的全局的Application,然后調(diào)用getInstance()獲取其實例,
然后通過
DisplayMetrics dm = RecordApplication.getInstance().getResources().getDisplayMetrics();
private int width = dm.widthPixels;
private int height = dm.heightPixels;
private int dpi = dm.densityDpi;
來獲取屏幕的長、寬和dpi的值,這里不用WindowsManager方法是因為我是在非Activity去獲取屏幕長寬的,所以用了getDisplayMetrics();
這樣這個功能基本就是實現(xiàn)了。
Demo地址:
Android 從 4.0 開始就提供了手機(jī)錄屏方法,但是需要 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 的,有極少極少的機(jī)型是沒有對應(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 再進(jìn)一步將其封裝處理為 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
截圖的過程錄屏是開啟的,錄屏開啟就可以進(jìn)行截屏,操作完需要關(guān)閉錄屏
截屏過程很快,效果很好
如果是APP外截屏則開啟懸浮窗服務(wù),可以通過操作懸浮窗進(jìn)行截屏
參考文章: 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)容保存下來
每一款手機(jī)的錄屏功能都不一樣,大部分都可以通過下拉控制中心,找到“屏幕錄制”這個選項,直接點擊就可以開始錄制了。但是手機(jī)自帶的錄屏功能,一般錄制的分辨率都不是很高,因此建議大家都能選擇一款簡單好用還能錄制高清穩(wěn)定視頻的專業(yè)錄屏軟件。
直接點擊獲取--->嗨格式錄屏大師
嗨格式錄屏大師是一款操作簡單,功能齊全的超高清錄屏軟件,擁有七種錄屏模式,包括全屏錄制、區(qū)域錄制、游戲錄制、應(yīng)用窗口錄制、跟隨鼠標(biāo)錄制、攝像頭錄制,全面覆蓋生活、工作與休閑娛樂場景,滿足絕大多數(shù)的使用需求!目前嗨格式錄屏大師支持最高120fps恒定幀率、320kbps音頻輸出以及4096*2160輸出分辨率,最大程度上讓視頻還原最真畫質(zhì),提高視頻質(zhì)量。
以上就是關(guān)于這個問題的回答,對嗨格式錄屏大師感興趣的小伙伴抓緊時間下載試試吧!
手機(jī)錄屏軟件免費下載
鏈接:
提取碼:9r21 ?
屏幕錄制軟件,超好用的手機(jī)截圖截屏、錄屏軟件,超高清的視頻錄制工具,專業(yè)手機(jī)截圖錄屏工具。