日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 录屏自动运行,Android实现录屏直播+远程控制(二)

發布時間:2024/3/24 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 录屏自动运行,Android实现录屏直播+远程控制(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前面Android實現錄屏直播+遠程控制(一)的文章說到Android5.0的錄屏直播實現方式,今天來說說實現錄屏直播的另外一種方案

1 啟動一個后臺服務實現錄屏

1、服務的創建這邊就不在贅述了,首先我們創建一個命名為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實現錄屏直播+遠程控制(一)的文章說的錄屏實例并不是這個呀,那么這個又是什么鬼呢,

2、你沒看錯,其實通過Android實現錄屏直播+遠程控制(一)的文章”介紹的錄屏實現方式是沒問題的,

3、通過DisplayManager也是沒有問題的,因為我的程序是有系統權限的,可以直接繞過權限申請的步驟

那么自然而然前面的文章說到的實現錄屏方式就不適合我的場景了,而且我的程序是通過啟動一個服務來運行的

// 獲取一個系統級的服務

DisplayManager mManager = _this .getSystemService(DisplayManager.class)

3 通過DisplayManager獲取VirtualDisplay

1、注意:通過DisplayManager獲取VirtualDisplay又是另外的一種方式了,請不要驚訝,因為我們實現錄屏的方式變了,那么獲取這些實例的方法自然也就跟著改變啦,只不過內部的實現機制都還是一樣的,

Surface surface = MediaCodec.createInputSurface();

//實例化VirtualDisplay,這個類的主要作用是用來獲取屏幕信息并保存在里。

mVirtualDisplay = mManager.createVirtualDisplay("ScreenRecord", 720, 1280, 1, surface,

DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR);

4 MediaCodec編碼,也就是我們獲取屏幕數據的關鍵一員

當然這里面也可以使用MediaRecord去實現錄屏獲取數據

public static MediaCodec getVideoMediaCodec() {

MediaFormat format = MediaFormat.createVideoFormat("video/avc", 720, 1280);

//設置顏色格式

format.setInteger(MediaFormat.KEY_COLOR_FORMAT,

MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);

//設置比特率(設置碼率,通常碼率越高,視頻越清晰)

format.setInteger(MediaFormat.KEY_BIT_RATE, 1000 * 1024);

//設置幀率

format.setInteger(MediaFormat.KEY_FRAME_RATE, 10);

//關鍵幀間隔時間,通常情況下,你設置成多少問題都不大。

format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);

// 當畫面靜止時,重復最后一幀,不影響界面顯示

format.setLong(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, 1000000 / 45);

format.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR);

//設置復用模式

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;

}

結束語

以上就是Android 5.0以上屏幕錄制的第二種方案,有不懂的隨時私信。

PS:轉載請注明出處

-- The end

總結

以上是生活随笔為你收集整理的android 录屏自动运行,Android实现录屏直播+远程控制(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。