美文网首页程序员
Android 屏幕录制(Surface\ Texture 录制

Android 屏幕录制(Surface\ Texture 录制

作者: Zcclucky | 来源:发表于2019-03-14 16:27 被阅读0次

    你是否常常因为产品需要录制屏幕而不要状态栏而烦闷 ??
    你是不是常常因为产品需要录制直播视频而加班 ??
    你是不是常常因为要对一个surface同时录制两种Texture 分别存在的视频 (!!???)而恶心致死?

    嗯。。。我是第三种。于是便诞生了下面这个工具库。也希望能够解决对OpenGLES 和 视频编码不熟悉的同学的噩梦
    ZTextureRecorder 的核心功能是,接收一个纹理,然后在每一帧绘制这个纹理(同时和外界的声音)最后编码成为一个视频文件。

    先上代码: 戳我看源码

    目前ZTextureRecorder 支持 使用MediaRecorder 和MediaCodec(硬编码API) 进行录制。支持 Texture_2D普通纹理和 Texture_Ext Android扩展纹理作为输入。

    需要注意的是,由于库本身不创建GL线程,因此需要传入GLContext 或者 在一个GL线程中初始化(以便通过Android EGL API 获取当前线程的 GLContext)。 这里会推荐使用GLSurfaceView 去承载和初始化GL上下文,当然如果是离屏渲染,可能需要自行创建GL线程及上下文。

    怎么使用?

    只需要五步就可以管理对texture 的录制,并轻松生成mp4 文件。

    1. init capturing params: 用纹理的宽高, 文件地址、以及 纹理类型
    
        capturingManager.initCapturing(textureWidth, textureHeight,
                            toSaveFilePath,
                            Texture2dProgram.ProgramType.TEXTURE_EXT,
                            encoderType, eglContext);
    
    1. start capturing manager:
    
       capturingManager.startCapturing()
    
    
    1. pass texture of each frame into it
    
       capturingManager.captureFrame(textureId)
    
    
    1. stop at proper time
    
        capturingManger.stop();
    
    
    1. release on component destroyed
    
        capturingManger.release();
    
    

    结构和核心技术点

    结构

    主要由GL图片帧产生线程 源码 和编码核心模块组成。

    这里主要是通过OpenGL 再次将Texture 渲染到编码核心模块提供的Surface 上,由于OpenGL 相关信息自成体系,并且较多,感兴趣的同学可以通过 这篇文章 学习

    其中编码核心模块分为mediaRecorder模块和mediaCodec 模块。

    前者是高度集成的API,只包含简单调用。 源码

    后者中集成了音频录制核心 源码 和帧录制核心 源码 。两个线程录制的同时需要通过Muxer 进行合成,以得到包含画面和声音的mp4 文件

    That's all

    相关文章

      网友评论

        本文标题:Android 屏幕录制(Surface\ Texture 录制

        本文链接:https://www.haomeiwen.com/subject/shrcmqtx.html