android 录屏自动运行,Android实现录屏直播+远程控制(二)
前言
前面Android實現(xiàn)錄屏直播+遠程控制(一)的文章說到Android5.0的錄屏直播實現(xiàn)方式,今天來說說實現(xiàn)錄屏直播的另外一種方案
1 啟動一個后臺服務(wù)實現(xiàn)錄屏
1、服務(wù)的創(chuàng)建這邊就不在贅述了,首先我們創(chuàng)建一個命名為AgentService的類,然后繼承Service,并重寫他們的實例
public AgentService() {
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new AgentService.ScreenImageBinder();
}
@Override
public void onCreate() {
super.onCreate();
_this = this;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}
2 獲取一個錄屏實例DisplayManager
1、可能有些伙伴覺得很奇怪,Android實現(xiàn)錄屏直播+遠程控制(一)的文章說的錄屏實例并不是這個呀,那么這個又是什么鬼呢,
2、你沒看錯,其實通過Android實現(xiàn)錄屏直播+遠程控制(一)的文章”介紹的錄屏實現(xiàn)方式是沒問題的,
3、通過DisplayManager也是沒有問題的,因為我的程序是有系統(tǒng)權(quán)限的,可以直接繞過權(quán)限申請的步驟
那么自然而然前面的文章說到的實現(xiàn)錄屏方式就不適合我的場景了,而且我的程序是通過啟動一個服務(wù)來運行的
// 獲取一個系統(tǒng)級的服務(wù)
DisplayManager mManager = _this .getSystemService(DisplayManager.class)
3 通過DisplayManager獲取VirtualDisplay
1、注意:通過DisplayManager獲取VirtualDisplay又是另外的一種方式了,請不要驚訝,因為我們實現(xiàn)錄屏的方式變了,那么獲取這些實例的方法自然也就跟著改變啦,只不過內(nèi)部的實現(xiàn)機制都還是一樣的,
Surface surface = MediaCodec.createInputSurface();
//實例化VirtualDisplay,這個類的主要作用是用來獲取屏幕信息并保存在里。
mVirtualDisplay = mManager.createVirtualDisplay("ScreenRecord", 720, 1280, 1, surface,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR);
4 MediaCodec編碼,也就是我們獲取屏幕數(shù)據(jù)的關(guān)鍵一員
當然這里面也可以使用MediaRecord去實現(xiàn)錄屏獲取數(shù)據(jù)
public static MediaCodec getVideoMediaCodec() {
MediaFormat format = MediaFormat.createVideoFormat("video/avc", 720, 1280);
//設(shè)置顏色格式
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
//設(shè)置比特率(設(shè)置碼率,通常碼率越高,視頻越清晰)
format.setInteger(MediaFormat.KEY_BIT_RATE, 1000 * 1024);
//設(shè)置幀率
format.setInteger(MediaFormat.KEY_FRAME_RATE, 10);
//關(guān)鍵幀間隔時間,通常情況下,你設(shè)置成多少問題都不大。
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
// 當畫面靜止時,重復(fù)最后一幀,不影響界面顯示
format.setLong(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, 1000000 / 45);
format.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR);
//設(shè)置復(fù)用模式
format.setInteger(MediaFormat.KEY_COMPLEXITY, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR);
MediaCodec mediaCodec = null;
try {
// MediaRecorder mediaRecorder = new MediaRecorder();
mediaCodec = MediaCodec.createEncoderByType("video/avc");
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
} catch (Exception e) {
e.printStackTrace();
if (mediaCodec != null) {
mediaCodec.reset();
mediaCodec.stop();
mediaCodec.release();
mediaCodec = null;
}
}
return mediaCodec;
}
結(jié)束語
以上就是Android 5.0以上屏幕錄制的第二種方案,有不懂的隨時私信。
PS:轉(zhuǎn)載請注明出處
-- The end
總結(jié)
以上是生活随笔為你收集整理的android 录屏自动运行,Android实现录屏直播+远程控制(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数独模板生成
- 下一篇: aap渗透_Android App渗透测