Android OpglEs录屏功能实现
文章目录
- 前言
- 实现
- 实现方案
- 方案一:MediaCodec录制
- 概述
- 博客
- 方案二:GLES20.glReadPixels()
- 概述
- 方案三:PBO
- 概述
- 方案四: ImageReader
- 概述
- 相关技术
- MediaCodec
- 概述
- MediaMuxer
- 概述
- 相关博客
- 问题
前言
最近在做录屏相关的项目,学习过程中记录的笔记如下,方便日后回顾。
实现
实现方案
方案一:MediaCodec录制
概述
- 录制我们在另外一个线程中进行(录制现场),所以录制的EGL环境和显示的EGL环境(
GLSurfaceView
,显示线程)是两个独立的工作环境,他们又能够共享上下文资源:显示线程中使用的texture等,需要能够在录制线程中操作(通过录制线程中使用OpenGL绘制到MediaCodec的Surface)。 - 因为是直接硬编码的H264,比起一般使用ffmpng的软编码效率要高不少,但是有个非常致命的缺点,无法设置fps。
- MediaCodec有个
MediaFormat.KEY_FRAME_RATE
参数,它可以设置fps,但是我发现我不管设置什么最终读出的fps都是25帧。 - OpenGL整体是一个状态机,通过改变状态就能改变后续的渲染方式,而
EGLContext(EgL上下文)就保存有所有状态,因此可以通过共享EGLContext
来实现同一场景渲染到不同的Surface上。
博客
android openGl录制音视频
https://blog.csdn.net/gan303/article/details/106620913
一个demo,并没有详细的解析。
Android 仿抖音之使用OpenGL实现抖音视频录制
https://www.jianshu.com/p/357cc096cd15
博客,没有源码,只是对实现进行解析。两个gl环境,一个glsurfacce录制,录像的opengl。能否将视频录制放到绘制线程中?
Android 关于美颜/滤镜 从OpenGl录制视频的一种方案
https://www.jianshu.com/p/12f06da0a4ec?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
Android MP4视频录制(思路篇,无DEMO)
https://www.jianshu.com/p/113e4eedb752
Android OpenGL添加水印并录制视频–抖音视频录制原理
https://blog.csdn.net/CSqingchen/article/details/105492716
OpenGLES渲染画面通过MediaCodec录制
https://cloud.tencent.com/developer/article/1333367
Android OpenGL ES(五)-结合相机进行预览/录制及添加滤镜
http://ddrv.cn/a/235073
方案二:GLES20.glReadPixels()
概述
- OpenGL方法,用于读取像素,但我测试过只有在索尼或者三星的手机上效率可以,在国产的机子上效率低的可以差不多接近100ms,这是完全不可接受的。
方案三:PBO
概述
- PBO的确可以实现跟ImageReader一样的效果,并且版本要求仅为Android4.3。
方案四: ImageReader
概述
跟MediaCodec创建Surface的方式一模一样,唯一不同的就是MediaCodec录制出来的是H264,而ImageReader拿出来的是BGRA的,用《Android ImageReader使用》的话说就是**ImageReader类允许应用程序直接访问呈现表面的图像数据 **
ImageReader首先要求4.4及以上(稍微有点瑕疵,但是现在4.4以下的机子应该比较少了),并且拿出来的是BGRA的(跟Bitmap的ARGB_8888是不一样的,这里要注意),而且在使用过程中要注意内存对齐的问题。
1280x1080那这效率还是远远跟不上的。
相关技术
MediaCodec
概述
Android多媒体–MediaCodec 中文API文档
http://www.2cto.com/kf/201607/527790.html
文档有点长,暂未看完。
MediaCodec的使用介绍
https://www.jianshu.com/p/f5a1c9318524
十分钟完成安卓MediaCodec视频解码
https://blog.csdn.net/u014653815/article/details/81084161
MediaMuxer
概述
根据数据源合成视频文件
相关博客
Android音视频处理之MediaMuxer
https://www.jianshu.com/p/aeadf260258a
问题
- texture id是怎样与media关联的。
- 停止录像是否能够立即停止
- Q71录像会导致卡顿,Q60是否有相同的现象?
- 加锁是否对滤镜有影响。
- 自己写一个录像demo,查找原因。
Android OpglEs录屏功能实现相关推荐
- 【Android】录屏功能实现——MediaProjection
目录 Android录屏功能实现-MediaProjection 概述 工具类 作用 过程 权限申请 连接服务 开始录制 停止录制 总结 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远 ...
- android 手机录屏功能,手机自带录屏功能在哪里找?轻松搞定屏幕录制
手机的录屏功能如何使用?智能手机发展到现在,除了无线通话功能.讯息发送功能之外,又逐渐发展出拍照功能.上网功能.各类应用交互功能.尤其近几年在手机上看视频成为打发碎片化时间的重要消遣,在手机上录屏的需 ...
- android 手机录屏功能,Android录屏功能的实现
最近做一个Android开发的项目用到了录屏的功能,开始查阅了一些资料和博客,基本上都是在讨论ROOT的.直到后来在github上看到一个比较新的代码,才恍然发现,Android 5.0时候开放了一个 ...
- android禁止录屏功能,react-native(安卓)项目中禁止截屏与录屏
一.整个项目中禁止截屏与录屏 在android/app/src/main/java/com/your-app-name/MainActivity.java文件中的onCreate方法中添加如下代码即可 ...
- android 实现录屏功能(悬浮窗)
前言:网上关于录屏的介绍已经很多了,本篇文章也不过多介绍详细,主要是阐述其流程原理,输出demo,该demo样式仿照小米自带的系统录屏 1.如何录屏 Android中在5.0以上的版本中系统已经提供了 ...
- android开发录屏功能吗,Android-录屏APP该怎么实现?
前言 这次不是需求了,这次是个人兴趣爱好.个人比较喜欢音视频方面的东西,还有就是有时候需要录屏去制作GIF图,所以就花时间去试着自己写一个简单的录屏小程序自用了. 经过一段时间的尝试,算是弄出来了一个 ...
- android录屏功能
思路 android实现录屏功能有两种方案,一种是直接使用android自带的MediaProjectionManager实现录屏功能,第二种是是只录语音,用户的操作通过某种方式进行记录保存,最后通过 ...
- Android防录屏防截屏功能失效、不起作用
有关Android防录屏功能网上有很多资料,在这里还是稍微说一下,实现方法就是在Activity.onCreate中,添加以下代码: getWindow().addFlags(WindowManage ...
- Android实现录屏直播(二)需求才是硬道理之产品功能调研
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/54254244 Android实现录 ...
最新文章
- Ubuntu使用wget下载zabbix的扩展源
- 为什么ppt图形卡配置不正确_电脑配置 | 赛博朋克2077什么配置能玩
- qcolor文字生成颜色
- SQL Server 数据库基础编程
- 长文 | 从发展轨迹、社会变迁和人口数据变化来看工具类产品的发展出路有哪些(1)
- java语言实验报告,Java语言 实验报告(二)
- 面向机器学习的特征工程翻译版
- Bash脚本教程之基本语法
- atomikosdatasourcebean mysql_SpringBoot2整合JTA组件实现多数据源事务管理
- HTTP / HTTPS抓包工具-Fiddler
- oracle时间类型
- nginx配置ssl证书的方法
- 8-思科防火墙:Cisco ASA uRPF运用
- Excel数据分析系列之用好底层分析工具统计分析功能
- Compile fails with 3.5 framework but succeeds with 4.0
- 摄像头参数详细介绍[转]
- 超宽带雷达P440?雷达的快时间慢时间是什么意思?
- minigui[基础篇][11]—— 图标
- 2022 WordPress Tongleer 仿微博社交主题模板
- scratch(图形化编程工具)使用画笔绘制雪绒花!真的太美了!