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实现录屏直播+远程控制(二)相关推荐
- Android实现开机自动运行程序
有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don't call me, I'll c ...
- 关于 Windows Subsystem for Android 以及 Windows 11 运行 Android 应用的更多细节
更新:Beta 分支已经支持在 Windows 11 上使用 Android 应用了,具体的使用和安装方法参考这篇文章 Windows 11 Beta 预览版用户已经可以体验 Android 应用 即 ...
- android闹钟程序后台运行,Android闹钟启动时间设置无效问题的解决方法
Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后cpu休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...
- android高德地图后台运行,Android手把手教你集成高德地图
在上一篇博客上,和大家分享了如何在Android中集成高德定位以及定位的基本使用.今天我们就来看看高德地图在Android中如何使用吧. 同样,我将本篇博客的内容分为如下部分: (1)添加高德SDK ...
- 黑莓android系统,黑莓Passport运行Android系统
黑莓Passport运行Android系统 前不久黑莓正式发布了银色版Passport,预装了黑莓自家的BlackBerry 10操作系统,不过现在这款黑莓新机运行Android操作系统的谍照和上手视 ...
- 如何在pc上开发Android程序,电脑上运行Android应用(APK软件)超简单方法
android是一个广阔.有活力的应用生态系统.根据统计,google play商店当中的应用数量已经超过1500万,其中当然也包含着众多高品质的热门应用. 但你是否想过,要是能在计算机上运行这些应用 ...
- android 进度条自动增长,Android 进度条自动前进效果的实现代码
今天给大家分享进度条自动前进功能的实现,先给大家分享实现效果图,感觉不错可以参考实现代码. 效果如下图: 首先布局要设置进度条最大值: android:id="@+id/pro1" ...
- android系统相机自动录像,android 调用系统相机录像并保存
1.在AndroidManifest.xml中添加如下代码 tools:ignore="ProtectedPermissions" /> android:authoritie ...
- android 阅读器自动滚动,Android编程实现小说阅读器滑动效果的方法
本文实例讲述了Android编程实现小说阅读器滑动效果的方法.分享给大家供大家参考,具体如下: 看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点 ...
最新文章
- WIRW:淡水分子微生物生态学综述
- SoC嵌入式软件架构设计之中的一个:系统内存需求评估
- SpringBoot @Valid各种注解使用说明
- WPF企业内训全程实录(下)
- php转型mysql dba_MySQL_DBA整理(转)
- 配置机器学习训练环境太麻烦?开源工具Parris说一键就搞定
- 学生选课系统,第二版
- 超简单的Spring入门案例制作,快来看看吧!
- spring boot启动报错:Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase
- 计算机win7设置用户密码,怎么给win7电脑设置开机密码_w7电脑开机密码怎么设置...
- 搜索引擎市场份额2018.3
- 微信不提示ipad登陆不上服务器,微信退出登录后,重新登录不了ipad
- R语言︱异常值检验、离群点分析、异常值处理
- 关于迅盘Turbo Memory的ReadyDrive功能被禁用的思考
- 11.18C语言练习题
- 西北大学844计算机考研真题,2018年西北大学信息科学与技术学院844软件工程学科专业基础综合之计算机操作系统考研基础五套测试题...
- UnityShader学习笔记 更复杂的光照
- AutoJs学习-趣玩版跳一跳相关代码
- 您推荐哪些Excel VBA书籍
- (每日一练c++)天际线问题