基於VCamera,仿微信錄製短視訊
阿新 • • 發佈:2019-02-19
基於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
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。