美文网首页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