基于VCamera,仿微信录制短视频

2018-09-09 02:31:48

WxRecoderVideo

简介

基于VCamera,Android仿微信录制短视频,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request。

recoder4.gif

使用

  1. 在build.gradle,添加wechatRecoderVideoLibrary module 。

配置manifest

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • 配置拍摄视频缓存路径

       // 设置拍摄视频缓存路径
        File dcim = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        if (DeviceUtils.isZte()) {
            if (dcim.exists()) {
                VCamera.setVideoCachePath(dcim + "/recoder/");
            } else {
                VCamera.setVideoCachePath(dcim.getPath().replace("/sdcard/",
                        "/sdcard-ext/")
                        + "/recoder/");
            }
        } else {
            VCamera.setVideoCachePath(dcim + "/WeChatJuns/");
        }
//      VCamera.setVideoCachePath(FileUtils.getRecorderPath());
        // 开启log输出,ffmpeg输出到logcat
        VCamera.setDebugMode(true);
        // 初始化拍摄SDK,必须
        VCamera.initialize(this);
  • 注册activity

<application
    ...
   <activity android:name="com.maiml.wechatrecodervideolibrary.recoder.WechatRecoderActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@style/CameraTheme"
            /></application
  • 调用 WechatRecoderActivity

   WechatRecoderActivity.launchActivity(MainActivity.this,REQ_CODE);

*在 onActivityResult Method 接收结果

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if(RESULT_OK == resultCode){            if(requestCode == REQ_CODE){
                String videoPath = data.getStringExtra(WechatRecoderActivity.VIDEO_PATH);

                play(videoPath);
            }

        }
    }

参数配置

自定义dialog

拍摄完成需要对视频进行转码,转码过程中弹出的dialog。

让你的Activity implements OnDialogListener 例如:

 public class MainActivity extends AppCompatActivity implements OnDialogListener{    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WechatRecoderActivity.launchActivity(MainActivity.this,REQ_CODE);
     }    /**
     * 处理自定义Dialog 的显示
     * @param context 自定义dialog 依赖的Context,注意:自定义dialog的Context 需要使用这个
     *
     */
    @Override
    public void onShowDialog(Context context) {

    }    /**
     * 处理自定义Dialog 的隐藏
     * @param context 自定义dialog 依赖的Context,注意:自定义dialog的Context 需要使用这个
     *
     */
    @Override
    public void onHideDialog(Context context) {

    }
}

配置参数

nameformatdescription
recoderTimeMaxinteger录制的最长时间
recoderTimeMininteger录制的最短时间
titleBarCancelTextColorintegertitleBar取消字体的颜色
pressBtnColorinteger按住拍字体的颜色
pressBtnBginteger圆环的颜色
lowMinTimeProgressColorintegerProgress小于录制最短时间的颜色
progressColorintegerProgress大于录制最短时间的颜色

注意:颜色值均为 十六进制值,例如:0xFFFC2828

img_des1.png

img_des2.png

自定义参数

     RecoderAttrs attrs = new RecoderAttrs.Builder()
                            .pressBtnColorBg(0xff00ff00)
                            .titleBarCancelTextColor(0xff00ff00)
                            .pressBtnTextColor(0xff00ff00)
                            .build();
        WechatRecoderActivity.launchActivity(MainActivity.this,attrs,REQ_CODE);

Github

Thanks

VCamera



作者:maimingliang
链接:https://www.jianshu.com/p/2f6f53190d2f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 2019-02-28 15:54:24

    HTTP协议缓存策略深入详解之ETAG妙用

      HTTP协议规格说明定义ETag为“被请求变量的实体值” 。另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。

  • 2019-02-28 16:46:26

    android获取视频、图片时添加防盗链

    使用HTTP协议时,可以利用头信息中的Referer做防盗链。 我们在一些网站的网页里访问图片的时候,在图片本站是可以正常看到的,但在外头就不能看到了,这是因为在http的header信息中的referer元素。

  • 2019-03-02 11:29:17

    MySQL学习之索引顺序

    这个问题比较简单,MySQL本身会对条件和索引进行判断,这样写可以用到索引,没有问题。

  • 2019-03-06 11:24:19

    MySQL查看数据库表容量大小

    本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用。

  • 2019-03-13 09:38:11

    写入MySQL报错超出 max_allowed_packet 的问题

    MySQL会根据配置文件会限制server接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。