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

本文介绍如何在Android上使用VCamera库实现类似微信的短视频录制功能,包括权限配置、视频缓存路径设置、SDK初始化及调用流程等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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);


文/maimingliang(简书作者)
原文链接:http://www.jianshu.com/p/2f6f53190d2f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值