1. 程式人生 > >基於VCamera,仿微信錄製短視訊

基於VCamera,仿微信錄製短視訊

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


文/maimingliang(簡書作者)
原文連結:http://www.jianshu.com/p/2f6f53190d2f
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。