文章目录

  • 前言
  • 实现
    • 实现方案
      • 方案一:MediaCodec录制
        • 概述
        • 博客
      • 方案二:GLES20.glReadPixels()
        • 概述
      • 方案三:PBO
        • 概述
      • 方案四: ImageReader
        • 概述
    • 相关技术
      • MediaCodec
        • 概述
      • MediaMuxer
        • 概述
        • 相关博客
    • 问题

前言

最近在做录屏相关的项目,学习过程中记录的笔记如下,方便日后回顾。

实现

实现方案

方案一:MediaCodec录制

概述

  1. 录制我们在另外一个线程中进行(录制现场),所以录制的EGL环境和显示的EGL环境(GLSurfaceView,显示线程)是两个独立的工作环境,他们又能够共享上下文资源:显示线程中使用的texture等,需要能够在录制线程中操作(通过录制线程中使用OpenGL绘制到MediaCodec的Surface)。
  2. 因为是直接硬编码的H264,比起一般使用ffmpng的软编码效率要高不少,但是有个非常致命的缺点,无法设置fps。
  3. MediaCodec有个MediaFormat.KEY_FRAME_RATE参数,它可以设置fps,但是我发现我不管设置什么最终读出的fps都是25帧。
  4. 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()

概述

  1. OpenGL方法,用于读取像素,但我测试过只有在索尼或者三星的手机上效率可以,在国产的机子上效率低的可以差不多接近100ms,这是完全不可接受的。

方案三:PBO

概述

  1. PBO的确可以实现跟ImageReader一样的效果,并且版本要求仅为Android4.3。

方案四: ImageReader

概述

  1. 跟MediaCodec创建Surface的方式一模一样,唯一不同的就是MediaCodec录制出来的是H264,而ImageReader拿出来的是BGRA的,用《Android ImageReader使用》的话说就是**ImageReader类允许应用程序直接访问呈现表面的图像数据 **

  2. ImageReader首先要求4.4及以上(稍微有点瑕疵,但是现在4.4以下的机子应该比较少了),并且拿出来的是BGRA的(跟Bitmap的ARGB_8888是不一样的,这里要注意),而且在使用过程中要注意内存对齐的问题。

  3. 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

问题

  1. texture id是怎样与media关联的。
  2. 停止录像是否能够立即停止
  3. Q71录像会导致卡顿,Q60是否有相同的现象?
  4. 加锁是否对滤镜有影响。
  5. 自己写一个录像demo,查找原因。

Android OpglEs录屏功能实现相关推荐

  1. 【Android】录屏功能实现——MediaProjection

    目录 Android录屏功能实现-MediaProjection 概述 工具类 作用 过程 权限申请 连接服务 开始录制 停止录制 总结 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远 ...

  2. android 手机录屏功能,手机自带录屏功能在哪里找?轻松搞定屏幕录制

    手机的录屏功能如何使用?智能手机发展到现在,除了无线通话功能.讯息发送功能之外,又逐渐发展出拍照功能.上网功能.各类应用交互功能.尤其近几年在手机上看视频成为打发碎片化时间的重要消遣,在手机上录屏的需 ...

  3. android 手机录屏功能,Android录屏功能的实现

    最近做一个Android开发的项目用到了录屏的功能,开始查阅了一些资料和博客,基本上都是在讨论ROOT的.直到后来在github上看到一个比较新的代码,才恍然发现,Android 5.0时候开放了一个 ...

  4. android禁止录屏功能,react-native(安卓)项目中禁止截屏与录屏

    一.整个项目中禁止截屏与录屏 在android/app/src/main/java/com/your-app-name/MainActivity.java文件中的onCreate方法中添加如下代码即可 ...

  5. android 实现录屏功能(悬浮窗)

    前言:网上关于录屏的介绍已经很多了,本篇文章也不过多介绍详细,主要是阐述其流程原理,输出demo,该demo样式仿照小米自带的系统录屏 1.如何录屏 Android中在5.0以上的版本中系统已经提供了 ...

  6. android开发录屏功能吗,Android-录屏APP该怎么实现?

    前言 这次不是需求了,这次是个人兴趣爱好.个人比较喜欢音视频方面的东西,还有就是有时候需要录屏去制作GIF图,所以就花时间去试着自己写一个简单的录屏小程序自用了. 经过一段时间的尝试,算是弄出来了一个 ...

  7. android录屏功能

    思路 android实现录屏功能有两种方案,一种是直接使用android自带的MediaProjectionManager实现录屏功能,第二种是是只录语音,用户的操作通过某种方式进行记录保存,最后通过 ...

  8. Android防录屏防截屏功能失效、不起作用

    有关Android防录屏功能网上有很多资料,在这里还是稍微说一下,实现方法就是在Activity.onCreate中,添加以下代码: getWindow().addFlags(WindowManage ...

  9. Android实现录屏直播(二)需求才是硬道理之产品功能调研

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/54254244 Android实现录 ...

最新文章

  1. Ubuntu使用wget下载zabbix的扩展源
  2. 为什么ppt图形卡配置不正确_电脑配置 | 赛博朋克2077什么配置能玩
  3. qcolor文字生成颜色
  4. SQL Server 数据库基础编程
  5. 长文 | 从发展轨迹、社会变迁和人口数据变化来看工具类产品的发展出路有哪些(1)
  6. java语言实验报告,Java语言 实验报告(二)
  7. 面向机器学习的特征工程翻译版
  8. Bash脚本教程之基本语法
  9. atomikosdatasourcebean mysql_SpringBoot2整合JTA组件实现多数据源事务管理
  10. HTTP / HTTPS抓包工具-Fiddler
  11. oracle时间类型
  12. nginx配置ssl证书的方法
  13. 8-思科防火墙:Cisco ASA uRPF运用
  14. Excel数据分析系列之用好底层分析工具统计分析功能
  15. Compile fails with 3.5 framework but succeeds with 4.0
  16. 摄像头参数详细介绍[转]
  17. 超宽带雷达P440?雷达的快时间慢时间是什么意思?
  18. minigui[基础篇][11]—— 图标
  19. 2022 WordPress Tongleer 仿微博社交主题模板
  20. scratch(图形化编程工具)使用画笔绘制雪绒花!真的太美了!

热门文章

  1. matplotlib微博点赞和评论数据可视化
  2. AI绘画发展到什么程度了?
  3. js 获取当前时间、时间格式转换
  4. php httpreferer,php中HTTP_REFERER函数用法实例
  5. [免费专栏] Android安全之ZIP文件目录遍历漏洞
  6. centos系统mysql忘记密码
  7. C++简介 / 低级语言 / 高级语言
  8. alphago阿尔法狗学习
  9. 暗数据现状堪忧 Splunk给出实现数据驱动的四点建议
  10. 魔兽世界私服trinitycore2的数据库TDB(3)