首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ShareREC for Android全系统录屏原理解析

文 / 余勋杰 前言 自安卓4.4开始,系统提供了内置的录屏功能,用户可以在adb下执行screenrecord命令,以指定码率、帧率、分辨率和时长来录制屏幕。...这里面的图形缓存是自安卓4.4以后提供的ImageReader。和MediaRecorder一样,它也提供了getSurface方法,返回用于更新缓存的surface实例。...然后说一下编码器MediaCodec。这东西从安卓4.1开始就有,一般是用来实现音视频编解码的。...自安卓4.3开始,它支持surface作为输入源,因此这里面临一个看似理所应当的问题:既然我们的全系统抓屏是基于安卓5.1的,而从安卓4.3开始,MediaCodec就支持以surface作为输入,那为什么不直接组合...其实在安卓平台同样自4.3以后系统自带了视频合并工具MediaMuxer。

1.4K20

MediaCodec基本原理及使用「建议收藏」

MediaCodec工作原理 MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMuxer...MediaCodec编码过程 在整个编解码过程中,MediaCodec的使用会经历配置、启动、数据处理、停止、释放几个过程,相应的状态可归纳为停止(Stopped),执行(Executing)以及释放(...参考资料 Android MediaCodec实现多段音视频的截取与拼接 http://qkxue.net/info/170238/Android-MediaCodec 安卓解码器MediaCodec...和 MediaMuxer API 解析和封装 mp4 文件 https://www.cnblogs.com/renhui/p/7474096.html Android硬编解码接口MediaCodec...//www.jianshu.com/p/14da1baaf08f Android音视频开发-入门(四):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    鸿蒙和安卓的对比

    文章目录 鸿蒙和安卓的对比 1. 系统内核方面的对比 2. 运行速度的对比 3. 作为手机操作系统的对比 4. 连接其他设备的对比 鸿蒙和安卓的对比 1....系统内核方面的对比 安卓系统是基于linux的宏内核设计 ,宏内核包含了操作系统绝大多数的功能和模块,而且这些功能和模块都具有最高的权限,只要一个模块出错,整个系统就会崩溃,这也是安卓系统容易崩溃的原因...鸿蒙系统中的方舟编译器解决了这个问题的,任何由编译器编译的软件,是直接运行在操作系统中的,可以直接与系统底层进行通信。 3....作为手机操作系统的对比 安卓和鸿蒙都是基于 安卓开源项目(AOSP) 进行开发的。 而AOSP里面的代码,是全球很多程序员共同维护开发的,谷歌和华为也是其中的提供者之一。...安卓开源平台是可以在开源许可下自由使用和修改的。国内外很多手机厂商都根据这套代码制定了自己的操作系统,比如:三星、小米、魅族等。而华为也是基于这套开源体系,制定了鸿蒙操作系统。

    1.1K20

    浅谈安卓中的MVP模式

    端午放假,天气下雨,于是乎在家撸一下博客,本篇博客将为大家解析MVP模式在安卓中的应用。 本文将从以下几个方面对MVP模式进行讲解: 1.  MVP简介 2.  为什么使用MVP模式 3.  ...MVP中的内存泄露问题 1.  MVP简介: 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责。...为什么使用MVP模式 在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应...当我们将其中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity其实就是MVP模式中 View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类...在各个Activitty中Presenter有很多类型,所以在BaseActivitty中,也需要对Presenter进行抽取成BasePresenter,MVP中Presenter是持有view的引用的

    98030

    短视频源码开发,Android端短视频功能的快速实现

    除了带宽之外,在短视频源码开发中,短视频内容的存储和CDN优化也尤为重要,通常我们需要上传到云存储服务器的内容是短视频内容和封面内容。...五、MediaCodec+MediaMuxer的使用 MediaMuxer和MediaCodec这两个类,它们的参考文http://developer.android.com/reference/android...drainVideoEncoder()和drainAudioEncoder()分别将编码好的音视频从buffer中拿出来(通过dequeueOutputBuffer()),然后交由MediaMuxer进行混合...bufferInfo中,视频由于是在Surface上画,因此直接用dequeueOutputBuffer()出来的bufferInfo中的就行,最后将编码好的数据送去MediaMuxer进行多路混合。...把audio和video的MediaCodec,MediaCodec用的Surface及MediaMuxer对象释放。

    1.1K10

    Android MediaCodec图片合成视频

    但是,ffmpeg却是c++写的,而且非常占用内存,虽然它是非常棒的音视频处理库,但是杀鸡焉用牛刀,所以今天就讲一下:如何利用Android API中的MediaCodec来实现图片合成视频 YUV...- https://www.cnblogs.com/Sharley/p/5595768.html 如何正确使用ImageReader与YUV_420_888和MediaCodec将视频编码为h264格式...VV UU YUV420sp:YYYYYYYY UVUV 由VU顺序的不同YUV420p可分为I420和YV12,上诉例子是YV12;YUV420sp可分为 NV12与NV21,上诉例子是NV12;...由于YUV420不是全采样,U和V的数据都是with*height*(1⁄4),所以数据长度为:1(Y)+1⁄4(U)+1⁄4(V) = 3/2。...保存为mp4格式的视频 视频处理需要用到MediaMuxer: mediaMuxer = new MediaMuxer(out.getAbsolutePath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG

    4.4K10

    使用MediaCodeC将图片集编码为视频

    此次实验中,所使用的图片集正是MediaCodeC硬解码视频,并将视频帧存储为图片文件文章中,对视频解码出来的图片文件集,总共332张图片帧。...这里我画了一张简单的工作流程图:[mediacodec_encoder.png] 整体流程上其实和普通的MediaCodeC工作流程差不多,只不过是将输入源由Buffer换成了Surface。...知识点 在代码中,MediaCodeC只负责数据的传输,而生成MP4文件主要靠的类是MediaMuxer。...MediaCodeC硬解码视频,并将视频帧存储为图片文件中的视频文件解码出来的,332张图片。...要想得到输出数据,必须在一个无限循环的代码中,去拿MediaCodeC输出数据。 也就是在这里的代码中,当输出数据格式改变时,为MediaMuxer加上视频轨,并启动。

    2.5K00

    MediaMuxer录制视频踩坑记录

    基本知识MediaCodec的相关数据时间单位为(纳秒/1000),类似610,729,613,772, 倒数第7位代表秒级MediaMuxer.writeSampleData Failed描述:写入数据失败常见原因这类错误基本和时间戳有关时间戳倒退问题现象解决吐出时间戳倒退丢弃异常帧...所以分析此类问题可能需要往前多找几帧,出现问题的帧数据不一定是当前的帧音视频录制合成后音频速率加快MediaCodec的工作原理两个队列管理入队出队,原始数据给到input,通过output吐出来图片问题原因如果...input和output在不同线程,因为两边处理速率不一致,会导致input数据来不及消费,导致部分原始数据被覆盖(丢弃),最终形成的现象就是音频会加快,鬼畜。...解决方案添加队列保存提前到来的数据,当MediaMuxer.Start之后统一写进去写入缓存时候需要加锁,防止新的数据进来导致时序不对,就会出现上面MediaMuxer.writeSampleData...场景某一个track一直不写数据录制快速停止场景,某些track对应的MediaCodec还没初始化完成

    3.7K30

    Android音视频硬编码与混合(三)

    Android 4.3之后增加了MediaCodec类用于进行硬件编解码的类,可以用于音频和视频编码。...:从输入流队列中取数据进行编码操作 getOutputBuffers:获取编解码之后的数据输出流队列,返回的是一个ByteBuffer数组 dequeueOutputBuffer:从输出队列中取出编码操作之后的数据...releaseOutputBuffer:处理完成,释放ByteBuffer数据 MediaCodec的使用流程: 1、创建MediaCodec实体和配置: private void startMediaCodec...处理完这些数据并将处理结果输出至一个空的输出buffer(ByteBuffer)中。...(MediaMuxerThread.TRACK_VIDEO, newFormat); 然后每次从编码器中取出分别音频和视频录制到的ByteBuffer,写入(writeSampleData)到编码器所在的轨道中

    2.5K70
    领券