前言

前面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实现录屏直播+远程控制(二)相关推荐

  1. Android实现开机自动运行程序

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don't call me, I'll c ...

  2. 关于 Windows Subsystem for Android 以及 Windows 11 运行 Android 应用的更多细节

    更新:Beta 分支已经支持在 Windows 11 上使用 Android 应用了,具体的使用和安装方法参考这篇文章 Windows 11 Beta 预览版用户已经可以体验 Android 应用 即 ...

  3. android闹钟程序后台运行,Android闹钟启动时间设置无效问题的解决方法

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后cpu休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...

  4. android高德地图后台运行,Android手把手教你集成高德地图

    在上一篇博客上,和大家分享了如何在Android中集成高德定位以及定位的基本使用.今天我们就来看看高德地图在Android中如何使用吧. 同样,我将本篇博客的内容分为如下部分: (1)添加高德SDK ...

  5. 黑莓android系统,黑莓Passport运行Android系统

    黑莓Passport运行Android系统 前不久黑莓正式发布了银色版Passport,预装了黑莓自家的BlackBerry 10操作系统,不过现在这款黑莓新机运行Android操作系统的谍照和上手视 ...

  6. 如何在pc上开发Android程序,电脑上运行Android应用(APK软件)超简单方法

    android是一个广阔.有活力的应用生态系统.根据统计,google play商店当中的应用数量已经超过1500万,其中当然也包含着众多高品质的热门应用. 但你是否想过,要是能在计算机上运行这些应用 ...

  7. android 进度条自动增长,Android 进度条自动前进效果的实现代码

    今天给大家分享进度条自动前进功能的实现,先给大家分享实现效果图,感觉不错可以参考实现代码. 效果如下图: 首先布局要设置进度条最大值: android:id="@+id/pro1" ...

  8. android系统相机自动录像,android 调用系统相机录像并保存

    1.在AndroidManifest.xml中添加如下代码 tools:ignore="ProtectedPermissions" /> android:authoritie ...

  9. android 阅读器自动滚动,Android编程实现小说阅读器滑动效果的方法

    本文实例讲述了Android编程实现小说阅读器滑动效果的方法.分享给大家供大家参考,具体如下: 看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点 ...

最新文章

  1. WIRW:淡水分子微生物生态学综述
  2. SoC嵌入式软件架构设计之中的一个:系统内存需求评估
  3. SpringBoot @Valid各种注解使用说明
  4. WPF企业内训全程实录(下)
  5. php转型mysql dba_MySQL_DBA整理(转)
  6. 配置机器学习训练环境太麻烦?开源工具Parris说一键就搞定
  7. 学生选课系统,第二版
  8. 超简单的Spring入门案例制作,快来看看吧!
  9. spring boot启动报错:Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase
  10. 计算机win7设置用户密码,怎么给win7电脑设置开机密码_w7电脑开机密码怎么设置...
  11. 搜索引擎市场份额2018.3
  12. 微信不提示ipad登陆不上服务器,微信退出登录后,重新登录不了ipad
  13. R语言︱异常值检验、离群点分析、异常值处理
  14. 关于迅盘Turbo Memory的ReadyDrive功能被禁用的思考
  15. 11.18C语言练习题
  16. 西北大学844计算机考研真题,2018年西北大学信息科学与技术学院844软件工程学科专业基础综合之计算机操作系统考研基础五套测试题...
  17. UnityShader学习笔记 更复杂的光照
  18. AutoJs学习-趣玩版跳一跳相关代码
  19. 您推荐哪些Excel VBA书籍
  20. (每日一练c++)天际线问题

热门文章

  1. requests登陆正方教务管理系统
  2. 库卡六轴机器人编程手册_KUKA机器人编程手册 高级.pdf
  3. CoovaChilli
  4. 从此以后谁也别说我不懂LDO了
  5. 音视频基础(2)声音的三要素,模数转换
  6. html转义字符解码,js对html转义和反转义以及编码和解码
  7. 怎么样说一口地道的英语
  8. 基于Spring boot的校园二手交易平台系统
  9. Http Chunked理解
  10. KEGG通路的从属/注释信息如何获取