美文网首页Android_StudyAndroidMultimedia
基于VCamera,仿微信录制短视频

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

作者: maimingliang | 来源:发表于2016-09-27 23:15 被阅读5427次

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) {

    }
}

配置参数

name format description
recoderTimeMax integer 录制的最长时间
recoderTimeMin integer 录制的最短时间
titleBarCancelTextColor integer titleBar取消字体的颜色
pressBtnColor integer 按住拍字体的颜色
pressBtnBg integer 圆环的颜色
lowMinTimeProgressColor integer Progress小于录制最短时间的颜色
progressColor integer Progress大于录制最短时间的颜色

注意:颜色值均为 十六进制值,例如: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

相关文章

网友评论

  • 69034ab486e7:我想问一下 用这个拍摄全身,拍摄完成之后 只有半身,视频被裁剪了 ,怎样才能不被裁剪呢??
  • 6e99bf7c0c86:我把手机倾斜一点拍摄,45度左右,拍出来的视频就是倒立的,为什么呢,求指教
  • 539b5bc0175b:你好,录制视频的分辨率如何设置,还有那个视频压缩的,ffmeg命令要如何配置,还有拍摄过后会有两个视频,一个是mp4,一个是ts文件,mp4的只压缩的一点点,可以提供删除ts的文件的操作吧
  • 进击的猿:大神请教下。我这边用这个库拍摄全屏的视频,但压缩的时间好长,我录制一条15s的视频,压缩也需要十几秒,请教下如何缩短压缩时间,是我哪儿没设置对吗?求指教
    maimingliang:@进击的猿 启用36行的代码,配置-cvf 参数,通过改变输出视频的质量来达到压缩视频的大小的效果。
    至于你说录制后 视频全屏?你的意思是把录制后视频,全屏播放嘛?
    进击的猿:@maimingliang 想问下我这想录制后的视频是全屏的。该如何配置参数让视频压缩时间尽量短点。是配置 MediaRecorderNative 35 36行 还是MediaRecorderNative 中66 -71行的参数。请指点下啊。谢谢
    maimingliang:录制的视频很大
  • 21a240c7ee3c:大神,按住拍的时候,一直按着不松手,进度条走完了,还在录视频呢。
    maimingliang:@兔子盖盖 感谢提出,已解决。
  • c40e2eff5747:你好 请问怎么设置压缩率呢?
    maimingliang:可以看下 这个类的MediaRecorderNative 35 36行
  • 70c0d2b1e42f:大神你好,我想问下,这个VCamera我在官网上看上面写的是个人开发免费,企业收费,那是说如果我在公司的项目中用到关于VCamera的都是不行的吗?
  • 977bc70049b6:你好,我想在fragment中跳转到拍摄画面,怎么接收结果呢?
    maimingliang:@九天玄妖 同样在 onActivityResult 接收。
  • e310468fb9a3:本人引用到自己的项目,在application初始化的时候,提示找不到 libuititye.so 文件,本人加上去了啊
    我头疼了哈:大神 改了也不好使啊
    maimingliang:@nihao2008 你是不是没有把 build.gradle 的tagerSdkVersion修改为 小于 23 ?

  • b3f1cc639f61:请问这个支持api23吗?求解
    maimingliang:@Duan11 不支持,要把build.gradle的tagerSdkVersion< 23。因为vcamera 不支持。作者没有更新了。
  • 72c35595f71b:视频是否做过压缩处理
    maimingliang:@feng0413 不同的视频bitrate,大小都不一样,可以通过ffmeg命令配置。

本文标题:基于VCamera,仿微信录制短视频

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