屏幕錄制源碼
⑴ Android實現錄屏MediaProjection以及相關異常解決
需要實現一個手機的錄屏功能,於是從網上找了些相關資料和源碼,發現跑不起來,於是開始bug,發現坑還是很多的,這里記錄一下實現過程和一些些遇到的異常以及一個我調整完可以跑的Demo。
首先在AndroidManifest中靜態配置許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
然後在Activity中動態申請
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添加自定義的類名,如果在裡面啟動服務了也要一並配置。
<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>
然後可以使用封裝好的實現其錄屏功能的service,這個封裝類是網上找的,看很多人在用,我解決了一些異常,並根據自己需求修改了一下。
其中主要異常有:
1.mediaRecorder報空指針,解決方案,在聲明的時候聲明為靜態
private static MediaRecorder mediaRecorder;
2.mediaRecorder.start()方法異常,在每次調用stop時要先調用
mediaRecorder.stop();
mediaRecorder.release();
兩個方法,並將
mediaRecorder = null。
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)異常,這里是設置音頻源,可嘗試將參數改為
MediaRecorder.AudioSource.DEFAULT
4.stop方法異常,如果是running狀態不正常,可能是其狀態丟失,需要將聲明的running也改為靜態的
0.增加需求,在生成視頻時大部分人都會根據mediaRecorder.setVideoSize(width, height);方法來定死視頻大小,導致一些手機會解析不了,或者是視頻比屏幕小,這里提供一種根據屏幕大小動態設置視頻大小的方法。
這里就要用到我們之前定義的全局的Application,然後調用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();
這樣這個功能基本就是實現了。
Demo地址: https://github.com/han103070/Screencap
⑵ 如何用易語言編寫出屏幕錄像軟體
上面的代碼我也沒測試了,應該是不行的,西西。
害我還注冊個用戶,第一次寫ftp更新,哈。測試成功~
——————————————————————————————
連接FTP伺服器 (「204.45.67.202」, 「59354」, 「123456」, 21, )
FTP文件下載 (「/資料庫.edb」, 取特定目錄 (3) + 「\資料庫.edb」, )
——————————————————————————————
你把上面的代碼添加到更新按鈕,看你是怎麼想的,呵呵,加進去就對了。
還有,取特定目錄 (3) + 「\資料庫.edb」 這個,看你要不要改為 取運行目錄() + 「\資料庫.edb」
因為你的資料庫和程序放在一起,不下載到運行目錄,還要改代碼。
注意我寫的和你貼出來的代碼的不同之處、
拜拜~
⑶ 源碼錄制最清晰嗎
會清晰一點。
有一個極限。就是說不能大於屏幕錄象區域本身的解析度,一般情況下解析度還是描述了大小,至於清晰度要看壓縮演算法。就是說要看生成的片子的碼率,流暢度看楨率。
⑷ Android 5.0+ 屏幕錄制實現
Android 從 4.0 開始就提供了手機錄屏方法,但是需要 root 許可權,比較麻煩不容易實現。但是從 5.0 開始,系統提供給了 app 錄制屏幕的一系列方法,不需要 root 許可權,只需要用戶授權即可錄屏,相對來說較為簡單。本文是在參考了網路上其他錄屏資料後完成的, 感謝 。以下將介紹開發錄屏功能的一系列步驟以及實現過程中所遇到的一些需要注意的事項。
因為錄制用到麥克風,所以需要加上 AUDIO 許可權,
如果開發的 app targetApi 在 6.0 以上時,還需要動態獲取許可權。
這里先介紹 MediaProjectionManager , MediaProjectionManager 是系統提供的一種服務,當我們拿到這個服務對象,可以創建一個 Intent ,通過這個 Intent 可以啟動一個彈框樣式的 Activity,如果用戶授權了,那我們便可以繼續下一步屏幕錄制。需要說明的是,Intent 是去啟動另一個 Activity 的,有極少極少的機型是沒有對應的授權Activity 的,所以這里需要多加判斷,防止應用奔潰。
即使用戶授權了,同意錄制操作,仍然需要捕獲異常,因為有可能會出現這樣一種情況,就是用戶在同意錄屏的時候系統也正在錄屏,錄屏操作沖突了。
這一步是整個錄屏操作最為關鍵的一步!我們初始化了 MediaRecorder,設置了是否錄上聲音、錄屏文件格式、錄屏文件路徑、音視頻的編碼器、比特率、視頻幀率等
然後將在步驟 3 中的 resultCode 以及 data 作為必要的參數通過 MediaProjectionManager 創建 VirtualDisplay。VirtualDisplay 可以理解為虛擬的呈現器,它可以捕獲屏幕上的內容,並將其捕獲的內容渲染到 Surface 上(Surace 由 MediaRecorder 提供,通過 getSurface() 方法得到),MediaRecorder 再進一步將其封裝處理為 Mp4 文件。
經過以上步驟 prepare 之後,當再次調用 MediaRecorder.start() 就可以開始錄屏了,這里同意也需要注意的時,調用 start() 方法開始錄屏之後,不能立即調用 stop()方法停止錄屏,否則會奔潰。測試在測試錄屏功能時立馬停止錄屏,應用奔潰,一直找不到原因。直到看到了源碼( API 26 )里的注釋
所以為了反正奔潰,在 stop 的時候捕獲異常,並且置空 MediaRecorder,下次錄屏的時候再重新生成 MediaRecorder。
由於知識水平有限,難免有錯誤遺漏,歡迎指正!項目地址為 屏幕錄制
⑸ 如何用VB6.0做屏幕錄像軟體
用屏幕錄像專家破解版
