Android视频录制与压缩

作者: 敬凡丶 | 来源:发表于2017-05-12 16:55 被阅读6144次

前两天项目有需求在上传视频之前需要对其先进行压缩,找了一圈找到个相对最好用最稳定的三方库,内部用的是FFmpeg视频录制与压缩处理技术,下面是github地址:
点击传送至github地址

功能描述

利用FFmpeg录制定制化的视频,并可对其定制化的压缩处理。如设置视频尺寸、设置码率、码率模式、帧率、视频质量等级、压缩速度等等,当然这些只是暂时的,后期会继续维护。

特点

  1. 利用FFmpeg自定义录制各种时长、分辨率、码率、帧率、转码速度的视频。
  2. 可设置以H264编解码器二次压缩,6秒的1M视频压缩后为200多KB,且视频还比较清晰
  3. 可选择本地视频压缩
  4. 录制简单,一行代码完成集成,几个参数搞定录制。

使用方法

  1. 添加依赖
    compile 'com.mabeijianxi:small-video-record:1.2.0'
  2. 在manifests里面添加
<!--视频录制页面的activity-->
<activity android:name="mabeijianxi.camera.MediaRecorderActivity"/>
  1. 在Application里面初始化小视频录制
public static void initSmallVideo(Context context) {
        // 设置拍摄视频缓存路径
        File dcim = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        if (DeviceUtils.isZte()) {
            if (dcim.exists()) {
                VCamera.setVideoCachePath(dcim + "/mabeijianxi/");
            } else {
                VCamera.setVideoCachePath(dcim.getPath().replace("/sdcard/",
                        "/sdcard-ext/")
                        + "/mabeijianxi/");
            }
        } else {
            VCamera.setVideoCachePath(dcim + "/mabeijianxi/");
        }
// 开启log输出,ffmpeg输出到logcat
        VCamera.setDebugMode(true);
// 初始化拍摄SDK,必须
        VCamera.initialize(context);
    }
  1. 跳转录制界面或选择压缩
// 录制
 MediaRecorderConfig config = new MediaRecorderConfig.Buidler()
                .doH264Compress(new AutoVBRMode()
//                        .setVelocity(BaseMediaBitrateConfig.Velocity.ULTRAFAST)
                        )
                .setMediaBitrateConfig(new AutoVBRMode()
//                        .setVelocity(BaseMediaBitrateConfig.Velocity.ULTRAFAST)
                )
                .smallVideoWidth(480)
                .smallVideoHeight(360)
                .recordTimeMax(6 * 1000)
                .maxFrameRate(20)
                .captureThumbnailsTime(1)
                .recordTimeMin((int) (1.5 * 1000))
                .build();
        MediaRecorderActivity.goSmallVideoRecorder(this, SendSmallVideoActivity.class.getName(), config);
// 选择本地视频压缩
LocalMediaConfig.Buidler buidler = new LocalMediaConfig.Buidler();
                        final LocalMediaConfig config = buidler
                                .setVideoPath(path)
                                .captureThumbnailsTime(1)
                                .doH264Compress(new AutoVBRMode())
                                .setFramerate(15)
                                .build();
                        OnlyCompressOverBean onlyCompressOverBean = new LocalMediaCompress(config).startCompress(); 
  1. 一些参数说明
    maxFrameRate:指定最大帧率,越大视频质量越好,体积也会越大,当在cbr模式下不再是动态帧率,而是固定帧率;
    
    captureThumbnailsTime:指定剪切哪个时间的画面来作为封面图;
    
    doH264Compress:不传入值将不做进一步压缩,暂时可以传入三种模式AutoVBRMode、VBRMode、VBRMode;
    
    setMediaBitrateConfig:视频录制时期的一些配置,暂时可以传入三种模式AutoVBRMode、VBRMode、VBRMode;
    
    AutoVBRMode:可以传入一个视频等级与转码速度,等级为0-51,越大质量越差,建议18~28之间即可。转码速度有ultrafast、superfast、            veryfast、faster、fast、medium、slow、slower、veryslow、placebo。
    
    VBRMode:此模式下可以传入一个最大码率与一个额定码率,当然同样可以设置转码速度。
    
    VBRMode:可以传入一个固定码率,也可以添加一个转码速度。

特别注意

1:编译环境请满足:targetSdkVersion<=22
2:出现 java.lang.UnsatisfiedLinkError错误可以尝试在gradle.properties中添加:android.useDeprecatedNdk=true,然后在主module的build.gradle中配置ndk {abiFilters "armeabi", "armeabi-v7a"}

相关文章

  • Android视频录制与压缩

    前两天项目有需求在上传视频之前需要对其先进行压缩,找了一圈找到个相对最好用最稳定的三方库,内部用的是FFmpeg视...

  • 阿里短视频SDK引用support包的坑

    因为项目需求,需要加入录制视频的功能。在Android中,录制视频功能好解决,最麻烦的就是压缩后上传了。之前试过用...

  • ffmpeg使用总结

    需求:实现Android上使用ffmpeg进行视频裁剪,压缩功能 使用到相关技术: 1FFmpeg实现录制视频 采...

  • 阿里云(I)

    参考资料:iOS 阿里云服务器图片上传iOS录制(或选择)视频,压缩、上传(整理)视频 拍摄 与压缩 阿里云OSS...

  • iOS视频录制压缩与上传

    我们在项目中有时会碰到视频相关的需求,一般的可以分为几种情况: 1. 简单的视频开发,对界面无要求,可直接使用系统...

  • Android camera

    基础知识 Android Framework提供Camera API来实现拍照与录制视频的功能,目前Android...

  • Android音视频录制之MediaRecorder+camer

    前言 本篇介绍使用Android 中视频录制,录制工具是: MediaRecorder : 视频编码封装 came...

  • Mac下 Android手机屏幕录制成gif

    从录制视频,视频转gif 软件 Android Studio和GIF Brewery 3 录制视频手机连接电脑打开...

  • Android录制视频

    1、系统相机 录制视频,最简单的当然是调用系统的相机,可以使用如下参数,配置系统相机: MediaStore.EX...

  • Android 视频录制

    想到视频录制,肯定又是运用MediaRecorder,这个类实在是方便,但是好用的东西一定要慎重,毕竟没有那么便宜...

网友评论

  • 飞起来的大雨:下载最新或者编码的 视频压缩老是崩溃
  • 9009da2af8bb:这个获得结果真是太蠢了,最后录制完成之后,拿到之前传入的activity,通过intent去push结果,然后startActivity。。。
  • 呆呆IT人:这个结果怎么监听??
  • CAT1024:试了下新更新的2版本,录制视频有卡顿的现象,视频完成处理时间较长
  • Keith_Fan:基于FFmpeg的视频处理都速度都很慢,而且这个作者的so库还是秒拍提供的
    a1f1efdfb8f7:请问你有了解的处理速度快的吗?我用的FFmpeg,一直觉得速度慢,想优化
  • 夕枫晚照:看过这个库,api22限制还是太多了,作为开发者应该尽快适配最新版本和让用户体验新的功能。而且这个库只提供了v7的so库,对于其他指令集缺乏支持

本文标题:Android视频录制与压缩

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