Android视频编码_安卓视频解码器

Android视频编码_安卓视频解码器SVideoRecorder(https://github.com/yellowcath/SVideoRecorder)使用Android原生的MediaCodec进行视频录制,对比大量使用FFmpeg进行录制的库优点如下:体积小 :编译后的aar只有187K,ffmpeg一个so就7、8M,精简之后也差不多还有一半大小 速度快 :在huaweiP9上,720P的一帧:  FFmpeg编码…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

SVideoRecorder(https://github.com/yellowcath/SVideoRecorder)使用Android原生的MediaCodec进行视频录制,对比大量使用FFmpeg进行录制的库优点如下:

  • 体积小 :编译后的aar只有187K,ffmpeg一个so就7、8M,精简之后也差不多还有一半大小
  • 速度快 :在huaweiP9上,720P的一帧: 
    FFmpeg编码时间:50~60ms 
    MediaCodec(YUV)编码时间:20~25ms 
    MediaCodec(Surface)编码时间:10~15ms
  • CPU占用低 :ffmpeg录制时占用CPU低端机明显卡顿,MediaCodec录制时几乎无影响

缺点是只支持Android4.3+(Android4.1和4.2已有MediaCodec,但是官方不保证可用)


 

功能简介

1、录制相机原始视频(YUV) 
2、录制Surface,用户可自行在相机原始预览数据上添加滤镜、贴纸等特效,再直接录制下来 
3、支持分段录制 
4、支持分段录制时进行回退

使用

主要类图如下

Android视频编码_安卓视频解码器

SMediaCodecRecorder:接收YUV数据进行录制 
SSurfaceRecorder:提供一个Surface,录制绘制到该Surface上的图像数据 
SSegmentRecorder:对上述两个类进行包装,扩展出分段录制的能力

初始化

//实现ICameraProxyForRecord接口,提供预览参数 
        ICameraProxyForRecord cameraProxyForRecord = new ICameraProxyForRecord() {
            @Override
            public void addSurfaceDataListener(PreviewSurfaceListener listener, SurfaceCreatedCallback callback) {
            //SSurfaceRecorder调用
                 RecordHelper.setPreviewSurfaceListener(previewSurfaceListener, surfaceCreatedCallback);   
            }
            @Override
            public void removeSurfaceDataListener(PreviewSurfaceListener listener) {
             //SSurfaceRecorder调用
             RecordHelper.setPreviewSurfaceListener(null, null);
            }
            @Override
            public void addPreviewDataCallback(PreviewDataCallback callback) {
                //SMediaCodecRecorder调用
                mCallback = callback;
            }
            @Override
            public void removePreviewDataCallback(PreviewDataCallback callback) {
                //SMediaCodecRecorder调用
                mCallback = null;
            }
            @Override
            public int getPreviewWidth() {
                return mPreviewSize.width;
            }
            @Override
            public int getPreviewHeight() {
                return mPreviewSize.height;
            }
            @Override
            public int getVideoRotation() {
                return mCameraFacing == Camera.CameraInfo.CAMERA_FACING_BACK ? 90 : 270;
            }
        };
        mRecorder = new SMediaCodecRecorder(this, cameraProxyForRecord);
        mRecorder.addRecordListener(this);

数据帧来源

SMediaCodecRecorder

  @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        if (mCallback != null) {
            long timeUs = System.nanoTime() / 1000;
            mCallback.onPreviewData(data, timeUs);
        }
    }

SSurfaceRecorder

Demo里提供两种方式(详见RecordHelper.java): 
1、 drawBlitFrameBuffer,将预览界面的图像数据直接拷贝到MediaCodec的Surface里,要求GLES3.0,部分老机型可能支持不太好 
2、drawBlit2X,直接将预览界面的图像数据重复绘制一次到MediaCodec的Surface,考虑到性能问题,这里需要使用FBO

调用

//开始录制
    mRecorder.startRecord();
    //结束录制,成功后回调OnRecordSuccess
    mRecorder.stopRecord();
    //暂停录制,只用于SSegmentRecorder
    mRecorder.pauseRecord();
    //恢复录制,只用于SSegmentRecorder
    mRecorder.resumeRecord();
    //取消,回调OnRecordFail()
    mRecorder.cancelRecord();

Demo

1、正常录YUV格式视频 
2、分段录YUV格式视频 
3、分段录带特效视频(Surface)

Android视频编码_安卓视频解码器

Android视频编码_安卓视频解码器

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184849.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Quartus II实验二 运算部件实验:并行乘法器「建议收藏」

    Quartus II实验二 运算部件实验:并行乘法器「建议收藏」1.设计一个4位求补器。2.设计一个44的不带符号的阵列乘法器。3.设计一个55的带符号的阵列乘法器。4.掌握原码并行乘法器的基本原理。5.掌握带求补器的补码阵列乘法器的基本原理。

    2022年10月15日
  • BufferedWriter写int型数据

    BufferedWriter写int型数据在做项目的过程中遇到用BufferedWriter.writer(…)写文件的,但是在写入int型数据时是乱码。在翻阅了API后发现,BufferedWriter.writer(intc)方法写的不是一个int型数据,而是一个character型数据:因此,在用BufferedWriter.writer写数据的时候,如果要写int型数据,可以先把它转成String型的数据,这样就

  • 英语词根词缀记忆法总口诀_词根词缀记忆法的利弊

    英语词根词缀记忆法总口诀_词根词缀记忆法的利弊英语词根词缀记忆法(全集) 前言        英语单词的构词规律也是有规可寻的。单词是由词素构成的,词素派生出词义。单词的数量虽然浩瀚,但构成其的词素的数量却是有限的。如果掌握了词素,懂得基本的构词方法,就能容易地识记单词,突破记忆单词这一难关。词素又是由词根和词缀两部分组成的,而词缀又分为前缀和后缀。常用的252个词根和289个词缀,掌握了这些词素便可掌握绝大

  • vim常用快捷键

    vim常用快捷键键盘移动(Move)一切都从键盘的移动k ->上upj ->下downh ->左leftl ->右rightz ->重画屏幕,当前光标变成屏幕的第一行(redrawcurrentlineattopofwindow)CTRL-f ->跳到下一页(pagedown)CTRL-b ->跳到上一页(pageup)跳跃

  • 安装SPSS22_SPSS 24安装教程

    安装SPSS22_SPSS 24安装教程学习统计学必不可少的一个软件就是SPSS,这个软件非常的重要,但是随着时代的发展貌似又开始逐渐变得有点鸡肋,然而,我们还是要学,没辙,哈哈哈哈~接下来就跟着我一起安装一个SPSS22吧!首先你需要一个Windows电脑(Mac再说,风紧扯呼),最好是win10,然后在百度云下载必要的程序与秘钥百度云提取码:kp68里面包括exeandtxt下载下来后打开文件夹进入SPSS文件夹右击此文件,选择“以管理员权限运行”点击“下一步”选择“的那个用户许可证”,点击“下一步”选择“我接受许

    2022年10月23日
  • imread参数_imread函数图片路径matlab

    imread参数_imread函数图片路径matlabimread的函数原型是:Matimread(conststring&filename,intflags=1);Mat是OpenCV里的一个数据结构,在这里我们定义一个Mat类型的变量img,用于保存读入的图像,在本文开始有写到,我们用imread函数来读取图像,第一个字段标识图像的文件名(包括扩展名),第二个字段用于指定读入图像的颜色和深度,它的取值可以有以下几种:

    2022年10月14日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号