diff --git a/PLDroidShortVideoDemo/app/build.gradle b/PLDroidShortVideoDemo/app/build.gradle
index 9bac469..559427d 100644
--- a/PLDroidShortVideoDemo/app/build.gradle
+++ b/PLDroidShortVideoDemo/app/build.gradle
@@ -15,7 +15,7 @@ android {
minSdkVersion 18
targetSdkVersion 25
versionCode 26
- versionName "2.2.1"
+ versionName "3.0.0"
multiDexEnabled true
buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"
ndk {
@@ -32,7 +32,7 @@ android {
dependencies {
compile 'com.qiniu:qiniu-android-sdk:7.3.11'
- compile files('libs/pldroid-shortvideo-2.2.1.jar')
+ compile files('libs/pldroid-shortvideo-3.0.0.jar')
compile files('libs/pldroid-player-2.1.8.jar')
compile files('libs/EasyAR.jar')
compile files('libs/EasyAR3D.jar')
diff --git a/PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-2.2.1.jar b/PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-3.0.0.jar
similarity index 78%
rename from PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-2.2.1.jar
rename to PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-3.0.0.jar
index 7f61f8c..96f16fc 100644
Binary files a/PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-2.2.1.jar and b/PLDroidShortVideoDemo/app/libs/pldroid-shortvideo-3.0.0.jar differ
diff --git a/PLDroidShortVideoDemo/app/src/main/AndroidManifest.xml b/PLDroidShortVideoDemo/app/src/main/AndroidManifest.xml
index 9ef13da..9b6383b 100644
--- a/PLDroidShortVideoDemo/app/src/main/AndroidManifest.xml
+++ b/PLDroidShortVideoDemo/app/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
@@ -38,6 +39,9 @@
+
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_RATIO_TIPS_ARRAY);
+ mPreviewSizeRatioSpinner.setAdapter(adapter);
+ mPreviewSizeRatioSpinner.setSelection(PREVIEW_SIZE_RATIO_POS);
+ mPreviewSizeRatioSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ PREVIEW_SIZE_RATIO_POS = position;
+ }
+ @Override
+ public void onNothingSelected(AdapterView> parent) {}
+ });
+
+ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_LEVEL_TIPS_ARRAY);
+ mPreviewSizeLevelSpinner.setAdapter(adapter);
+ mPreviewSizeLevelSpinner.setSelection(PREVIEW_SIZE_LEVEL_POS);
+ mPreviewSizeLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ PREVIEW_SIZE_LEVEL_POS = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_MODE_LEVEL_TIPS_ARRAY);
+ mEncodingModeLevelSpinner.setAdapter(adapter);
+ mEncodingModeLevelSpinner.setSelection(ENCODING_MODE_LEVEL_POS);
+ mEncodingModeLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ ENCODING_MODE_LEVEL_POS = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_SIZE_LEVEL_TIPS_ARRAY);
+ mEncodingSizeLevelSpinner.setAdapter(adapter);
+ mEncodingSizeLevelSpinner.setSelection(ENCODING_SIZE_LEVEL_POS);
+ mEncodingSizeLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ ENCODING_SIZE_LEVEL_POS = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_BITRATE_LEVEL_TIPS_ARRAY);
+ mEncodingBitrateLevelSpinner.setAdapter(adapter);
+ mEncodingBitrateLevelSpinner.setSelection(ENCODING_BITRATE_LEVEL_POS);
+ mEncodingBitrateLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ ENCODING_BITRATE_LEVEL_POS = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.AUDIO_CHANNEL_NUM_TIPS_ARRAY);
+ mAudioChannelNumSpinner.setAdapter(adapter);
+ mAudioChannelNumSpinner.setSelection(AUDIO_CHANNEL_NUM_POS);
+ mAudioChannelNumSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ AUDIO_CHANNEL_NUM_POS = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+ }
+
+ public void onClickBack(View view) {
+ finish();
+ }
+}
diff --git a/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java
new file mode 100644
index 0000000..f442979
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/ImportAndEditActivity.java
@@ -0,0 +1,75 @@
+package com.qiniu.pili.droid.shortvideo.demo.activity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+
+import com.qiniu.pili.droid.shortvideo.demo.R;
+import com.qiniu.pili.droid.shortvideo.demo.utils.PermissionChecker;
+import com.qiniu.pili.droid.shortvideo.demo.utils.ToastUtils;
+
+public class ImportAndEditActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_import_and_edit);
+ }
+
+ public void onClickImport(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(VideoTrimActivity.class);
+ }
+ }
+
+ public void onClickTransitionMake(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(VideoDivideActivity.class);
+ }
+ }
+
+ public void onClickVideoCompose(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(VideoComposeActivity.class);
+ }
+ }
+
+ public void onClickTranscode(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(VideoTranscodeActivity.class);
+ }
+ }
+
+ public void onClickMultipleCompose(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(MultipleComposeActivity.class);
+ }
+ }
+
+ public void onClickExternalMediaRecord(View v) {
+ if (isPermissionOK()) {
+ jumpToActivity(ExternalMediaRecordActivity.class);
+ }
+ }
+
+ private boolean isPermissionOK() {
+ PermissionChecker checker = new PermissionChecker(this);
+ boolean isPermissionOK = Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checker.checkPermission();
+ if (!isPermissionOK) {
+ ToastUtils.s(this, "Some permissions is not approved !!!");
+ }
+ return isPermissionOK;
+ }
+
+ private void jumpToActivity(Class> cls) {
+ Intent intent = new Intent(ImportAndEditActivity.this, cls);
+ startActivity(intent);
+ }
+
+ public void onClickBack(View view) {
+ finish();
+ }
+}
diff --git a/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
index f3035c1..637b860 100644
--- a/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
+++ b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/activity/MainActivity.java
@@ -7,17 +7,13 @@
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.Spinner;
-import android.widget.TextView;
-
import com.qiniu.pili.droid.shortvideo.PLAuthenticationResultCallback;
import com.qiniu.pili.droid.shortvideo.PLShortVideoEnv;
import com.qiniu.pili.droid.shortvideo.demo.BuildConfig;
import com.qiniu.pili.droid.shortvideo.demo.R;
import com.qiniu.pili.droid.shortvideo.demo.utils.PermissionChecker;
-import com.qiniu.pili.droid.shortvideo.demo.utils.RecordSettings;
import com.qiniu.pili.droid.shortvideo.demo.utils.ToastUtils;
+import com.qiniu.pili.droid.shortvideo.demo.view.ItemView;
import java.text.SimpleDateFormat;
import java.util.Locale;
@@ -25,51 +21,16 @@
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
- private Spinner mPreviewSizeRatioSpinner;
- private Spinner mPreviewSizeLevelSpinner;
- private Spinner mEncodingModeLevelSpinner;
- private Spinner mEncodingSizeLevelSpinner;
- private Spinner mEncodingBitrateLevelSpinner;
- private Spinner mAudioChannelNumSpinner;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- TextView versionInfoTextView = (TextView) findViewById(R.id.VersionInfoTextView);
- String info = "版本号:" + getVersionDescription() + ",编译时间:" + getBuildTimeDescription();
- versionInfoTextView.setText(info);
-
- mPreviewSizeRatioSpinner = (Spinner) findViewById(R.id.PreviewSizeRatioSpinner);
- mPreviewSizeLevelSpinner = (Spinner) findViewById(R.id.PreviewSizeLevelSpinner);
- mEncodingModeLevelSpinner = (Spinner) findViewById(R.id.EncodingModeLevelSpinner);
- mEncodingSizeLevelSpinner = (Spinner) findViewById(R.id.EncodingSizeLevelSpinner);
- mEncodingBitrateLevelSpinner = (Spinner) findViewById(R.id.EncodingBitrateLevelSpinner);
- mAudioChannelNumSpinner = (Spinner) findViewById(R.id.AudioChannelNumSpinner);
-
- ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_RATIO_TIPS_ARRAY);
- mPreviewSizeRatioSpinner.setAdapter(adapter);
-
- adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_LEVEL_TIPS_ARRAY);
- mPreviewSizeLevelSpinner.setAdapter(adapter);
- mPreviewSizeLevelSpinner.setSelection(3);
-
- adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_MODE_LEVEL_TIPS_ARRAY);
- mEncodingModeLevelSpinner.setAdapter(adapter);
- mEncodingModeLevelSpinner.setSelection(0);
-
- adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_SIZE_LEVEL_TIPS_ARRAY);
- mEncodingSizeLevelSpinner.setAdapter(adapter);
- mEncodingSizeLevelSpinner.setSelection(7);
-
- adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_BITRATE_LEVEL_TIPS_ARRAY);
- mEncodingBitrateLevelSpinner.setAdapter(adapter);
- mEncodingBitrateLevelSpinner.setSelection(2);
+ ItemView itemVersionInfo = (ItemView) findViewById(R.id.item_version_info);
+ itemVersionInfo.setValue("" + getVersionDescription());
- adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, RecordSettings.AUDIO_CHANNEL_NUM_TIPS_ARRAY);
- mAudioChannelNumSpinner.setAdapter(adapter);
- mAudioChannelNumSpinner.setSelection(0);
+ ItemView itemCompileInfo = (ItemView) findViewById(R.id.item_compile_info);
+ itemCompileInfo.setValue(""+ getBuildTimeDescription());
PLShortVideoEnv.checkAuthentication(getApplicationContext(), new PLAuthenticationResultCallback() {
@Override
@@ -111,9 +72,10 @@ public void onClickAudioCapture(View v) {
}
}
- public void onClickImport(View v) {
- if (isPermissionOK()) {
- jumpToActivity(VideoTrimActivity.class);
+ public void onClickImportAndRecord(View v){
+ if (isPermissionOK()){
+ Intent intent = new Intent(this, ImportAndEditActivity.class);
+ startActivity(intent);
}
}
@@ -123,12 +85,6 @@ public void onClickMixRecord(View v) {
}
}
- public void onClickTranscode(View v) {
- if (isPermissionOK()) {
- jumpToActivity(VideoTranscodeActivity.class);
- }
- }
-
public void onClickMakeGIF(View v) {
if (isPermissionOK()) {
jumpToActivity(MakeGIFActivity.class);
@@ -141,35 +97,18 @@ public void onClickScreenRecord(View v) {
}
}
- public void onClickVideoCompose(View v) {
- if (isPermissionOK()) {
- jumpToActivity(VideoComposeActivity.class);
- }
- }
-
public void onClickImageCompose(View v) {
if (isPermissionOK()) {
jumpToActivity(ImageComposeActivity.class);
}
}
- public void onClickMultipleCompose(View v) {
- if (isPermissionOK()) {
- jumpToActivity(MultipleComposeActivity.class);
- }
- }
-
public void onClickAR(View v) {
if (isPermissionOK()) {
jumpToActivity(ArRecordActivity.class);
}
}
- public void onClickTransitionMake(View v) {
- if (isPermissionOK()) {
- jumpToActivity(VideoDivideActivity.class);
- }
- }
public void onClickDraftBox(View v) {
if (isPermissionOK()) {
@@ -177,12 +116,6 @@ public void onClickDraftBox(View v) {
}
}
- public void onClickExternalMediaRecord(View v) {
- if (isPermissionOK()) {
- jumpToActivity(ExternalMediaRecordActivity.class);
- }
- }
-
public void onClickVideoMix(View v) {
if (isPermissionOK()) {
jumpToActivity(VideoMixActivity.class);
@@ -196,19 +129,19 @@ private void jumpToActivity(Class> cls) {
public void jumpToCaptureActivity() {
Intent intent = new Intent(MainActivity.this, VideoRecordActivity.class);
- intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_RATIO, mPreviewSizeRatioSpinner.getSelectedItemPosition());
- intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_LEVEL, mPreviewSizeLevelSpinner.getSelectedItemPosition());
- intent.putExtra(VideoRecordActivity.ENCODING_MODE, mEncodingModeLevelSpinner.getSelectedItemPosition());
- intent.putExtra(VideoRecordActivity.ENCODING_SIZE_LEVEL, mEncodingSizeLevelSpinner.getSelectedItemPosition());
- intent.putExtra(VideoRecordActivity.ENCODING_BITRATE_LEVEL, mEncodingBitrateLevelSpinner.getSelectedItemPosition());
- intent.putExtra(VideoRecordActivity.AUDIO_CHANNEL_NUM, mAudioChannelNumSpinner.getSelectedItemPosition());
+ intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_RATIO, ConfigActivity.PREVIEW_SIZE_RATIO_POS);
+ intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_LEVEL, ConfigActivity.PREVIEW_SIZE_LEVEL_POS);
+ intent.putExtra(VideoRecordActivity.ENCODING_MODE, ConfigActivity.ENCODING_MODE_LEVEL_POS);
+ intent.putExtra(VideoRecordActivity.ENCODING_SIZE_LEVEL,ConfigActivity.ENCODING_SIZE_LEVEL_POS);
+ intent.putExtra(VideoRecordActivity.ENCODING_BITRATE_LEVEL, ConfigActivity.ENCODING_BITRATE_LEVEL_POS);
+ intent.putExtra(VideoRecordActivity.AUDIO_CHANNEL_NUM, ConfigActivity.AUDIO_CHANNEL_NUM_POS);
startActivity(intent);
}
public void jumpToAudioCaptureActivity() {
Intent intent = new Intent(MainActivity.this, AudioRecordActivity.class);
- intent.putExtra(AudioRecordActivity.ENCODING_MODE, mEncodingModeLevelSpinner.getSelectedItemPosition());
- intent.putExtra(AudioRecordActivity.AUDIO_CHANNEL_NUM, mAudioChannelNumSpinner.getSelectedItemPosition());
+ intent.putExtra(AudioRecordActivity.ENCODING_MODE, ConfigActivity.ENCODING_MODE_LEVEL_POS);
+ intent.putExtra(AudioRecordActivity.AUDIO_CHANNEL_NUM, ConfigActivity.AUDIO_CHANNEL_NUM_POS);
startActivity(intent);
}
@@ -226,4 +159,8 @@ private String getVersionDescription() {
protected String getBuildTimeDescription() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(BuildConfig.BUILD_TIMESTAMP);
}
+
+ public void onClickSetting(View view) {
+ jumpToActivity(ConfigActivity.class);
+ }
}
diff --git a/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java
new file mode 100644
index 0000000..a85fbda
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/java/com/qiniu/pili/droid/shortvideo/demo/view/ItemView.java
@@ -0,0 +1,47 @@
+package com.qiniu.pili.droid.shortvideo.demo.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.qiniu.pili.droid.shortvideo.demo.R;
+
+public class ItemView extends FrameLayout {
+
+ private TextView tvName;
+ private TextView tvValue;
+
+ public ItemView(Context context) {
+ this(context, null);
+ }
+
+ public ItemView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ItemView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ LayoutInflater.from(context).inflate(R.layout.v_item, this);
+ tvName = (TextView) findViewById(R.id.tv_name);
+ tvValue = (TextView) findViewById(R.id.tv_value);
+
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ItemView);
+ String text = typedArray.getString(R.styleable.ItemView_text);
+
+ if(!TextUtils.isEmpty(text)){
+ tvName.setText(text);
+ }
+
+ typedArray.recycle();
+ }
+
+ public void setValue(String v){
+ tvValue.setText(v);
+ }
+
+}
diff --git a/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_chevron_right_black_24dp.xml b/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_chevron_right_black_24dp.xml
new file mode 100644
index 0000000..1c71336
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_chevron_right_black_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_settings_white_24dp.xml b/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_settings_white_24dp.xml
new file mode 100644
index 0000000..1397d37
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/res/drawable/ic_settings_white_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/PLDroidShortVideoDemo/app/src/main/res/layout/activity_config.xml b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_config.xml
new file mode 100644
index 0000000..09731e5
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_config.xml
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLDroidShortVideoDemo/app/src/main/res/layout/activity_image_compose.xml b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_image_compose.xml
index 2aac958..0da5c82 100644
--- a/PLDroidShortVideoDemo/app/src/main/res/layout/activity_image_compose.xml
+++ b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_image_compose.xml
@@ -4,29 +4,43 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+ android:layout_height="wrap_content">
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLDroidShortVideoDemo/app/src/main/res/layout/activity_main.xml b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_main.xml
index 7c9818c..081ab14 100644
--- a/PLDroidShortVideoDemo/app/src/main/res/layout/activity_main.xml
+++ b/PLDroidShortVideoDemo/app/src/main/res/layout/activity_main.xml
@@ -1,238 +1,139 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="48dp">
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ android:text="@string/app_name"
+ android:textColor="@color/white"
+ android:textSize="18sp"
+ android:layout_gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLDroidShortVideoDemo/app/src/main/res/layout/v_item.xml b/PLDroidShortVideoDemo/app/src/main/res/layout/v_item.xml
new file mode 100644
index 0000000..5bb71fb
--- /dev/null
+++ b/PLDroidShortVideoDemo/app/src/main/res/layout/v_item.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PLDroidShortVideoDemo/app/src/main/res/values/colors.xml b/PLDroidShortVideoDemo/app/src/main/res/values/colors.xml
index fc78285..27a84ce 100644
--- a/PLDroidShortVideoDemo/app/src/main/res/values/colors.xml
+++ b/PLDroidShortVideoDemo/app/src/main/res/values/colors.xml
@@ -1,7 +1,7 @@
- #3F51B5
- #303F9F
+ #0090CC
+ #0090CC
#FF4081
#cc222222
#99222222
@@ -56,6 +56,7 @@
#000000
#ff0000
#707070
+ #F0F0F0
#ff6633
#00000000
#7f000000
diff --git a/PLDroidShortVideoDemo/app/src/main/res/values/strings.xml b/PLDroidShortVideoDemo/app/src/main/res/values/strings.xml
index e1620c2..6a9494a 100644
--- a/PLDroidShortVideoDemo/app/src/main/res/values/strings.xml
+++ b/PLDroidShortVideoDemo/app/src/main/res/values/strings.xml
@@ -9,10 +9,11 @@
视频拍摄
音频录制
视频拼接
- 图片合成
+ 制作图片电影
图片视频混排
视频播放
屏幕录制
+ 素材导入编辑
视频转码
视频剪辑
制作GIF动画
@@ -23,7 +24,7 @@
音频文件:
添加图片
添加音乐
- AR 特效
+ 制作AR视频
草稿箱
草稿列表
视频分割
diff --git a/PLDroidShortVideoDemo/app/src/main/res/values/styles.xml b/PLDroidShortVideoDemo/app/src/main/res/values/styles.xml
index 650db9a..fd4eb5c 100644
--- a/PLDroidShortVideoDemo/app/src/main/res/values/styles.xml
+++ b/PLDroidShortVideoDemo/app/src/main/res/values/styles.xml
@@ -1,9 +1,11 @@
-
+
+
+
+
diff --git a/README.md b/README.md
index 4fa5e82..cd1b083 100644
--- a/README.md
+++ b/README.md
@@ -3,74 +3,83 @@
PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 SDK,提供了包括美颜、滤镜、水印、断点录制、分段回删、视频编辑、混音特效、本地/云端存储在内的多种功能,支持高度定制以及二次开发。我们提供 80+ 功能供开发使用,申请 **0 元体验**可联系销售或[填写表单](https://jinshuju.net/f/IeOD89?ref=www.qiniu.com)获得产品试用权限。
## 1. 多版本功能分布
-短视频SDK主要区分基础版、进阶版、专业版 3 个版本,不同版本的功能区别见如下表格
+短视频SDK主要区分精简版、基础版、进阶版、专业版 4 个版本,不同版本的功能区别见如下表格
-| 功能 | 子功能 | 基础版 | 进阶版 | 专业版 |
-| :----------------------------------------------------------- | :----------------------------------------------------------- | :---------------------: | :---------------------: | :----------------------: |
-| **用户交互界面** | **提供了一套完整的UI交互源码,可复用或自定义** | ✓ | ✓ | ✓ |
-| **视频拍摄录制** | **摄像头采集** | ✓ | ✓ | ✓ |
-| | **麦克风采集** | ✓ | ✓ | ✓ |
-| | **视频采集参数定义**
*支持最高1080P拍摄,支持自定义视频采集源、采集画面的分辨率、采集画面的长宽比等参数* | ✓ | ✓ | ✓ |
-| | **音频采集参数定义**
*支持自定义音频采集源、音频格式、音频声道、音频采样率等参数* | ✓ | ✓ | ✓ |
-| | **视频编码参数定义**
*支持自定义编码视频的码率、帧率、分辨率、H.264 编码方式等参数* | ✓ | ✓ | ✓ |
-| | **音频编码参数定义**
*支持自定义编码音频的码率、采样率、声道数、AAC 编码方式等参数* | ✓ | ✓ | ✓ |
-| | **拍摄时长设置**
*支持设置实际拍摄过程中的最大、最小拍摄时长* | ✓ | ✓ | ✓ |
-| | **摄像头切换**
*支持切换前后摄像头进行拍摄* | ✓ | ✓ | ✓ |
-| | **闪光灯设置**
支持开关闪光灯用于拍摄时的补光 | ✓ | ✓ | ✓ |
-| | **曝光调节**
*支持调整曝光度参数* | ✓ | ✓ | ✓ |
-| | **画面对焦**
*支持手动对焦和自动对焦* | ✓ | ✓ | ✓ |
-| | **焦距调节**
*支持手动调节画面焦距进行放大、缩小* | ✓ | ✓ | ✓ |
-| | **画面镜像**
*支持设置是否镜像预览画面和编码画面* | ✓ | ✓ | ✓ |
-| | **横屏拍摄**
*支持根据设备的方向自动确定竖屏、横屏拍摄* | ✓ | ✓ | ✓ |
-| | **分段拍摄**
*支持拍摄过程中*实现连续多次拍摄、断点续拍、回删 | ✓ | ✓ | ✓ |
-| | **变速拍摄**
支持设置*拍摄时的快/慢速率,目前支持5种拍摄速率(默认正常速率**,**只支持 2 的倍数,或 1/2 的倍数**)* | ✗ | ✓ | ✓ |
-| | **音频录制**
支持纯音频录制 | ✓ | ✓ | ✓ |
-| | **音频录制(图片特效)**
*支持音频录制的过程中,增加图片旋转效果,输出为 mp4 文件* | ✗ | ✓ | ✓ |
-| | **背景音乐**
*支持拍摄前选择本地文件作为背景音乐* | ✗ | ✓ | ✓ |
-| | **实时截图**
*支持拍摄时实时截图拍照保存到本地* | ✓ | ✓ | ✓ |
-| | **静音功能**
*支持静音拍摄* | ✓ | ✓ | ✓ |
-| | **分屏拍摄(合拍)**
可以*根据*素材视频(或图片)进行合拍,生成*双画面视频* | ✗ | ✗ | ✓ |
-| | **屏幕录制(全屏) / View 录制(局部)**
*支持对整个屏幕或部分区域进行录制,实现整体或局部的录制效果* | ✗ | ✓
全屏 | ✓
全屏+局部 |
-| | **外部导入**
*支持外部音视频裸数据导入,生成mp4文件* | ✗ | ✗ | ✓ |
-| | **前后台切换**
*根据监听到 Application 的前后台状态自动停止和开始录制视频,默认从后台进入前台自动开始录制* | ✓ | ✓ | ✓ |
-| | **实时水印**
*支持拍摄时添加静态水印,支持设置水印位置、大小、透明度,设置作用时间范围* | ✗ | ✓ | ✓ |
-| | **实时美颜**
*支持拍摄时启用美颜功能,支持设置美颜、美白、红润3种效果并调节强度* | ✓ | ✓ | ✓ |
-| | **实时滤镜**
支持*拍摄时启用滤镜功能,支持自由调节多种滤镜效果(33种)* | ✓
提供10种滤镜效果 | ✓
提供10种滤镜效果 | ✓
提供33种滤镜效果 |
-| | **实时预览**
*支持实时本地预览* | ✓ | ✓ | ✓ |
-| | **草稿箱**
*支持将当前录制的片段与设置项存入草稿箱* | ✓ | ✓ | ✓ |
-| **视频剪辑合成** | **视频导入**
*支持本地视频快速导入后编辑* | ✓ | ✓ | ✓ |
-| | **编辑预览**
*支持编辑时实时预览本地效果* | ✓ | ✓ | ✓ |
-| | **视频剪辑**
*支持按照给定的时间范围生成一个mp4文件* | ✓ | ✓ | ✓ |
-| | **视频剪裁**
*支持按照视频画面大小(原比例、指定区域)精确裁剪视频生成一个mp4文件* | ✗ | ✗ | ✓ |
-| | **视频转码**
*支持按照给定的目标旋转角度、码率、帧率等参数,生成一个mp4文件* | ✓ | ✓ | ✓ |
-| | **视频拼接**
*基础功能:支持设置多个视频按照前后顺序导入拼接生成一个mp4文件*
*高级功能:支持设置多个视频的时间范围按照前后顺序导入拼接生成一个mp4文件(先分割后拼接)* | ✗ | ✓
基础功能 | ✓
基础功能+高级功能 |
-| | **视频合成**
*支持设置多个视频合并为一个视频,支持设置每一个视频的位置、大小、开始播放时间等* | ✗ | ✗ | ✓ |
-| | **GIF动画**
*支持基于多个图片或视频直接导出GIF动图* | ✗ | ✓ | ✓ |
-| | **图片拼接**
*支持设置多个图片按照前后顺序导入拼接生成一个mp4文件* | ✗ | ✓ | ✓ |
-| | **图片 & GIF 图 & 视频混拼**
*支持设置多个视频和图片按照前后顺序导入拼接生成一个mp4文件* | ✗ | ✗ | ✓ |
-| **视频编辑处理** | **滤镜特效**
*支持给视频文件添加滤镜效果,默认支持33种滤镜效果* | ✗ | ✓
提供10种滤镜效果 | ✓
提供33种滤镜效果 |
-| | **贴纸特效**
*支持给视频文件添加静态贴纸,并且能够自由设置贴纸大小、位置、旋转角度,支持设置特效显示的时间范围,可以**自定义素材或使用供应商提供的收费素材* | ✗ | ✓ | ✓ |
-| | **水印特效**
*支持给视频文件添加静态、动态水印,并且能够自由设置水印的大小、位置、透明度、旋转角度,支持设置特效显示的时间范围,可以自定义素材或使用供应商提供的收费素材* | ✗ | ✓ | ✓ |
-| | **时间特效**
*支持对视频文件进行整体变速、分段变速,**支持5种变速效果(极慢、慢、正常、快、极快)*
*支持1种倒放操作(即时光倒流特效)* | ✗ | ✓
变速 | ✓
变速+倒序 |
-| | **字幕特效**
*支持给视频文件添加文字特效,支持设置文字内容,字体大小,字体颜色,透明度,旋转,位置等,支持设置特效显示的时间范围* | ✗ | ✓ | ✓ |
-| | **MV特效**
*支持给视频文件添加MV效果,默认提供4种MV特效,MV特效素材需要客户自行按要求制作* | ✗ | ✗ | ✓ |
-| | **涂鸦特效**
支持画笔尺寸和颜色调整,*支持设置特效显示的时间范围* | ✗ | ✓ | ✓ |
-| | **基础转场**
支持在视频图片片段之间,增加淡入淡出效果 | ✗ | ✓ | ✓ |
-| | **过场字幕**
支持在视频之间增加转场字幕,支持定义转场字幕的背景色、持续时间、支持文字和图片特效,支持旋转、放大、位置移动、淡入淡出4种效果 | ✗ | ✗ | ✓ |
-| | **混音特效**
*支持给视频文件添加多个背景音乐,支持调整视频原声、背景音乐音量,支持设置多个背景音乐有效时间区域* | ✗ | ✓
支持单音频混音 | ✓
支持多音频混音 |
-| | **旋转特效**
*支持设置视频左右上下旋转,实时预览旋转效果* | ✗ | ✓ | ✓ |
-| **视频播放** | **播放器SDK** | ✓ | ✓ | ✓ |
-| **上传分发** | **视频上传** | ✓ | ✓ | ✓ |
-| | **断点续传** | ✓ | ✓ | ✓ |
-| | **上传加速** | ✓ | ✓ | ✓ |
-| **接口扩展** | **扩展接口支持对接第三方美颜特效等增值能力** | ✓ | ✓ | ✓ |
-| **增值能力**
(需要客户单独选购,在视频拍摄或视频编辑阶段增加) | **高级美颜**
*拍摄设置大眼、瘦脸、V脸、下巴调整、短脸、小鼻效果,并支持调节强度* | ✓ | ✓ | ✓ |
-| | **人脸贴纸**
*支持人脸识别,进行人脸2D、3D贴纸操作* | ✓ | ✓ | ✓ |
-| | **手势识别**
可以对拍摄的人物的特定手势进行识别,配合其他特效 | ✓ | ✓ | ✓ |
-| | **AR 特效**
*支持拍摄时设置AR特效* | ✓ | ✓ | ✓ |
-| | **变声混响**
拍摄时对录制的人音进行变声(如萝莉、大叔)和混响效果等操作(如KTV、会堂) | ✓ | ✓ | ✓ |
-| | **类抖音特效**
*滤镜效果,*支持抖动、幻觉、灵魂出窍等数种抖音特效 | ✓ | ✓ | ✓ |
-| | **背景抠图**
将画面中的绿色元素(比如纯绿背景)抠除,替换成其他的元素,比如动态背景/PPT等 | ✓ | ✓ | ✓ |
+| 功能 | 子功能 | 精简版 | 基础版 | 进阶版 | 专业版 |
+| :-------------------------- | :------------------------ | :------------------:| :---------------------: | :---------------------: | :----------------------: |
+| **用户交互界面** | **提供了一套完整的UI交互源码,可复用或自定义** | ✓ | ✓ | ✓ | ✓ |
+| **拍摄设置** | **摄像头采集** | ✓ | ✓ | ✓ | ✓ |
+| | **麦克风采集** | ✓ | ✓ | ✓ | ✓ |
+| | **视频采集参数定义**
*支持最高 1080P 拍摄,支持自定义视频采集源、采集画面的分辨率、采集画面的长宽比等参数* | ✓ | ✓ | ✓ | ✓ |
+| | **音频采集参数定义**
*支持自定义音频采集源、音频格式、音频声道、音频采样率等参数* | ✓ | ✓ | ✓ | ✓ |
+| | **视频编码参数定义**
*支持自定义编码视频的码率、帧率、分辨率、H.264 编码方式等参数* | ✓ | ✓ | ✓ | ✓ |
+| | **音频编码参数定义**
*支持自定义编码音频的码率、采样率、声道数、AAC 编码方式等参数* | ✓ | ✓ | ✓ | ✓ |
+| | **拍摄时长设置**
*支持设置实际拍摄过程中的最大、最小拍摄时长* | ✓ | ✓ | ✓ | ✓ |
+| | **前后台切换**
*根据监听到 Application 的前后台状态自动停止和开始录制视频,默认从后台进入前台自动开始录制* | ✓ | ✓ | ✓ | ✓ |
+| | **摄像头切换**
*支持切换前后摄像头进行拍摄* | ✓ | ✓ | ✓ | ✓ |
+| | **闪光灯设置**
*支持开关闪光灯用于拍摄时的补光* | ✓ | ✓ | ✓ | ✓ |
+| | **画面镜像**
*支持设置是否镜像预览画面和编码画面* | ✓ | ✓ | ✓ | ✓ |
+| | **画面对焦**
*支持手动对焦和自动对焦* | ✓ | ✓ | ✓ | ✓ |
+| | **焦距调节**
*支持手动调节画面焦距进行放大、缩小* | ✓ | ✓ | ✓ | ✓ |
+| | **曝光调节**
*支持调整曝光度参数* | ✓ | ✓ | ✓ | ✓ |
+| **拍摄模式** | **横屏拍摄**
*支持根据设备的方向自动确定竖屏、横屏拍摄* | ✓ | ✓ | ✓ | ✓ |
+| | **分段拍摄**
*支持拍摄过程中实现连续多次拍摄、断点续拍、回删* | ✓ | ✓ | ✓ | ✓ |
+| | **静音拍摄**
*支持静音拍摄* | ✓ | ✓ | ✓ | ✓ |
+| | **音频录制**
*支持纯音频录制* | ✓ | ✓ | ✓ | ✓ |
+| | **屏幕录制**
*支持对整个屏幕区域进行录制,实现整体的录制效果* | ✓ | ✓ | ✓ | ✓ |
+| | **变速拍摄**
*支持设置拍摄时的快/慢速率,目前支持 5 种拍摄速率(默认正常速率,只支持 2 的倍数,或 1/2 的倍数)* | ✗ | ✓ | ✓ | ✓ |
+| | **分屏拍摄(合拍)**
*可以根据素材视频(或图片)进行合拍,生成双画面视频* | ✗ | ✗ | ✓ | ✓ |
+| **实时处理** | **实时截图**
*支持拍摄时实时截图拍照保存到本地* | ✓ | ✓ | ✓ | ✓ |
+| | **实时预览**
*支持实时本地预览* | ✓ | ✓ | ✓ | ✓ |
+| | **实时美颜**
*支持拍摄时启用美颜功能,支持设置美颜、美白、红润 3 种效果并调节强度* | ✓ | ✓ | ✓ | ✓ |
+| | **实时滤镜**
支持*拍摄时启用滤镜功能,支持自由调节多种滤镜效果(33种)* | ✗ | ✓
提供 10 种滤镜效果 | ✓
提供 33 种滤镜效果 | ✓
提供 33 种滤镜效果 |
+| | **实时水印**
*支持拍摄时添加静态水印,支持设置水印位置、大小、透明度,设置作用时间范围* | ✗ | ✓ | ✓ | ✓ |
+| | **背景音乐**
*支持拍摄前选择本地文件作为背景音乐* | ✗ | ✓ | ✓ | ✓ |
+| **基础编辑** | **视频导入**
*支持本地视频快速导入后编辑* | ✓ | ✓ | ✓ | ✓ |
+| | **编辑预览**
*支持编辑时实时预览本地效果* | ✓ | ✓ | ✓ | ✓ |
+| | **时长剪裁**
*支持时长裁剪,按照给定的时间范围生成一个 mp4 文件* | ✓ | ✓ | ✓ | ✓ |
+| | **本地转码**
*支持按照给定的码率、帧率等参数,生成一个 mp4 文件* | ✓ | ✓ | ✓ | ✓ |
+| | **视频旋转**
*支持按照给定的目标旋转角度,生成一个 mp4 文件* | ✗ | ✓ | ✓ | ✓ |
+| | **画面剪裁**
*支持画面裁剪,按照视频画面大小(原比例、指定区域)精确裁剪视频生成一个mp4文件* | ✗ | ✗ | ✓ | ✓ |
+| **特效编辑** | **视频旋转特效**
*支持设置视频左右上下旋转,实时预览旋转效果* | ✗ | ✓ | ✓ | ✓ |
+| | **单音频混音**
*支持给视频文件添加单音频,实现混音效果* | ✗ | ✓ | ✓ | ✓ |
+| | **滤镜特效**
*支持给视频文件添加滤镜效果,默认支持 33 种滤镜效果* | ✗ | ✓
提供 10 种滤镜效果 | ✓
提供 33 种滤镜效果 | ✓
提供 33 种滤镜效果 |
+| | **涂鸦特效**
*支持画笔尺寸和颜色调整,支持设置特效显示的时间范围* | ✗ | ✓ | ✓ | ✓ |
+| | **字幕特效**
*支持给视频文件添加文字特效,支持设置文字内容,字体大小,字体颜色,透明度,旋转,位置等,支持设置特效显示的时间范围* | ✗ | ✓ | ✓ | ✓ |
+| | **水印特效**
*支持给视频文件添加静态、动态水印,并且能够自由设置水印的大小、位置、透明度、旋转角度,支持设置特效显示的时间范围,可以自定义素材或使用供应商提供的收费素材* | ✗ | ✓ | ✓ | ✓ |
+| | **贴纸特效**
*支持给视频文件添加静态贴纸,并且能够自由设置贴纸大小、位置、旋转角度,支持设置特效显示的时间范围,可以自定义素材或使用供应商提供的收费素材* | ✗ | ✓ | ✓ | ✓ |
+| | **时间特效**
*支持对视频文件进行整体变速、分段变速,支持5种变速效果(极慢、慢、正常、快、极快)* | ✗ | ✓ | ✓ | ✓ |
+| | **时光倒流**
*支持 1 种倒放操作(即时光倒流特效)* | ✗ | ✗ | ✓ | ✓ |
+| | **音乐唱片**
*支持音频录制的过程中,增加图片旋转效果,输出为 mp4 文件* | ✗ | ✗ | ✓ | ✓ |
+| | **多音频混音**
*支持给视频文件添加多个背景音乐,支持调整视频原声、背景音乐音量,支持设置多个背景音乐有效时间区域,支持自己录音或者选用本地音乐* | ✗ | ✗ | ✗ | ✓ |
+| | **MV 特效**
*支持给视频文件添加 MV 效果,默认提供 4 种 MV 特效,MV 特效素材需要客户自行按要求制作* | ✗ | ✗ | ✗ | ✓ |
+| **多素材编排** | **视频拼接**
*支持设置多个视频按照前后顺序导入拼接生成一个 mp4 文件* | ✗ | ✗ | ✓ | ✓ |
+| | **GIF 动画**
*支持基于多个图片或视频直接导出 GIF 动图* | ✗ | ✗ | ✓ | ✓ |
+| | **图片拼接**
*支持设置多个图片按照前后顺序导入拼接生成一个 mp4 文件* | ✗ | ✗ | ✓ | ✓ |
+| | **基础转场**
*支持在视频图片片段之间,增加淡入淡出效果* | ✗ | ✗ | ✓ | ✓ |
+| | **过场字幕**
*支持在视频之间增加转场字幕,支持定义转场字幕的背景色、持续时间、支持文字和图片特效,支持旋转、放大、位置移动、淡入淡出 4 种效果* | ✗ | ✗ | ✓ | ✓ |
+| | **视频合成**
*支持设置多个视频合并为一个视频,支持设置每一个视频的位置、大小、开始播放时间等* | ✗ | ✗ | ✗ | ✓ |
+| | **图片 & GIF 图 & 视频混拼**
*支持设置多个视频和图片按照前后顺序导入拼接生成一个 mp4 文件* | ✗ | ✗ | ✗ | ✓ |
+| **其他功能** | **草稿箱**
*支持将当前录制的片段与设置项存入草稿箱* | ✓ | ✓ | ✓ | ✓ |
+| | **接口扩展**
*扩展接口支持对接第三方美颜特效等增值能力* | ✓ | ✓ | ✓ | ✓ |
+| | **外部裸数据导入**
*支持外部音视频裸数据导入,生成 mp4 文件* | ✗ | ✗ | ✗ | ✓ |
+| | **View 录制**
*支持 View 录制* | ✗ | ✗ | ✗ | ✓ |
+| **视频播放** | **播放器 SDK** | ✓ | ✓ | ✓ | ✓ |
+| **上传分发** | **视频上传** | ✓ | ✓ | ✓ | ✓ |
+| | **断点续传** | ✓ | ✓ | ✓ | ✓ |
+| | **上传加速** | ✓ | ✓ | ✓ | ✓ |
+
+增值能力方面,需要单独选购,在视频拍摄或视频编辑阶段增加,4个版本都支持相关开放接口。
+
+| **功能** |
+| ---------------------------------------------------------------------------------- |
+| **高级美颜**
*拍摄设置大眼、瘦脸、V脸、下巴调整、短脸、小鼻效果,并支持调节强度* |
+| **人脸贴纸**
*支持人脸识别,进行人脸 2D、3D 贴纸操作* |
+| **手势识别**
*可以对拍摄的人物的特定手势进行识别,配合其他特效* |
+| **AR 特效**
*支持拍摄时设置 AR 特效* |
+| **变声混响**
*拍摄时对录制的人音进行变声(如萝莉、大叔)和混响效果等操作(如 KTV、会堂)* |
+| **类抖音特效**
*滤镜效果,支持抖动、幻觉、灵魂出窍等数种抖音特效* |
+| **背景抠图**
*将画面中的绿色元素(比如纯绿背景)抠除,替换成其他的元素,比如动态背景/ PPT 等* |
## 2. 设备以及系统要求
@@ -90,3 +99,4 @@ PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 S
当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 issues 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 Labels 中指明类型为 bug 或者其他。
[通过这里查看已有的 issues 和提交 Bug](https://github.com/pili-engineering/PLDroidShortVideo/issues)
+~
\ No newline at end of file
diff --git a/ReleaseNotes/release-notes-3.0.0.md b/ReleaseNotes/release-notes-3.0.0.md
new file mode 100644
index 0000000..9f2b2b5
--- /dev/null
+++ b/ReleaseNotes/release-notes-3.0.0.md
@@ -0,0 +1,22 @@
+# PLDroidShortVideo Release Notes for 3.0.0
+
+### 简介
+
+PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 SDK,提供了包括美颜、滤镜、水印、断点录制、分段回删、视频编辑、混音特效、本地/云端存储在内的多种功能,支持高度定制以及二次开发。
+
+### 版本
+
+* 发布 pldroid-shortvideo-3.0.0.jar
+
+### 缺陷
+
+* 修复个别华为机型编辑保存异常的问题
+* 修复图片合成添加个别音频卡住的问题
+
+### 注意事项
+* 七牛短视频 SDK 自 v3.0.0 版本起, 划分为精简版、基础版、进阶版、专业版。不同版本 SDK 可以使用的功能点数量有差别,请按照购买的 License 版本使用对应的短视频 SDK 版本。
+* 上传 SDK 的依赖需要更新到如下版本:
+
+```java
+compile 'com.qiniu:qiniu-android-sdk:7.3.11'
+```
\ No newline at end of file
diff --git a/releases/releases_advanced/filters/gray/filter.png b/releases/releases_advanced/filters/gray/filter.png
new file mode 100644
index 0000000..42a177d
Binary files /dev/null and b/releases/releases_advanced/filters/gray/filter.png differ
diff --git a/releases/releases_advanced/filters/gray/thumb.png b/releases/releases_advanced/filters/gray/thumb.png
new file mode 100644
index 0000000..5d294a2
Binary files /dev/null and b/releases/releases_advanced/filters/gray/thumb.png differ
diff --git a/releases/releases_advanced/filters/habana/filter.png b/releases/releases_advanced/filters/habana/filter.png
new file mode 100644
index 0000000..827226b
Binary files /dev/null and b/releases/releases_advanced/filters/habana/filter.png differ
diff --git a/releases/releases_advanced/filters/habana/thumb.png b/releases/releases_advanced/filters/habana/thumb.png
new file mode 100644
index 0000000..f216bd4
Binary files /dev/null and b/releases/releases_advanced/filters/habana/thumb.png differ
diff --git a/releases/releases_advanced/filters/happy/filter.png b/releases/releases_advanced/filters/happy/filter.png
new file mode 100644
index 0000000..9f4c304
Binary files /dev/null and b/releases/releases_advanced/filters/happy/filter.png differ
diff --git a/releases/releases_advanced/filters/happy/thumb.png b/releases/releases_advanced/filters/happy/thumb.png
new file mode 100644
index 0000000..0bd0370
Binary files /dev/null and b/releases/releases_advanced/filters/happy/thumb.png differ
diff --git a/releases/releases_advanced/filters/harvest/filter.png b/releases/releases_advanced/filters/harvest/filter.png
new file mode 100644
index 0000000..0c4b8e8
Binary files /dev/null and b/releases/releases_advanced/filters/harvest/filter.png differ
diff --git a/releases/releases_advanced/filters/harvest/thumb.png b/releases/releases_advanced/filters/harvest/thumb.png
new file mode 100644
index 0000000..347c24e
Binary files /dev/null and b/releases/releases_advanced/filters/harvest/thumb.png differ
diff --git a/releases/releases_advanced/filters/kc/filter.png b/releases/releases_advanced/filters/kc/filter.png
new file mode 100644
index 0000000..9d5deb4
Binary files /dev/null and b/releases/releases_advanced/filters/kc/filter.png differ
diff --git a/releases/releases_advanced/filters/kc/thumb.png b/releases/releases_advanced/filters/kc/thumb.png
new file mode 100644
index 0000000..ae49808
Binary files /dev/null and b/releases/releases_advanced/filters/kc/thumb.png differ
diff --git a/releases/releases_advanced/filters/lyon/filter.png b/releases/releases_advanced/filters/lyon/filter.png
new file mode 100644
index 0000000..2eaaa06
Binary files /dev/null and b/releases/releases_advanced/filters/lyon/filter.png differ
diff --git a/releases/releases_advanced/filters/lyon/thumb.png b/releases/releases_advanced/filters/lyon/thumb.png
new file mode 100644
index 0000000..3e6e536
Binary files /dev/null and b/releases/releases_advanced/filters/lyon/thumb.png differ
diff --git a/releases/releases_advanced/filters/lzp/filter.png b/releases/releases_advanced/filters/lzp/filter.png
new file mode 100644
index 0000000..d9256d1
Binary files /dev/null and b/releases/releases_advanced/filters/lzp/filter.png differ
diff --git a/releases/releases_advanced/filters/lzp/thumb.png b/releases/releases_advanced/filters/lzp/thumb.png
new file mode 100644
index 0000000..399078a
Binary files /dev/null and b/releases/releases_advanced/filters/lzp/thumb.png differ
diff --git a/releases/releases_advanced/filters/miss/filter.png b/releases/releases_advanced/filters/miss/filter.png
new file mode 100644
index 0000000..e1317d7
Binary files /dev/null and b/releases/releases_advanced/filters/miss/filter.png differ
diff --git a/releases/releases_advanced/filters/miss/thumb.png b/releases/releases_advanced/filters/miss/thumb.png
new file mode 100644
index 0000000..8f52135
Binary files /dev/null and b/releases/releases_advanced/filters/miss/thumb.png differ
diff --git a/releases/releases_advanced/filters/misty/filter.png b/releases/releases_advanced/filters/misty/filter.png
new file mode 100644
index 0000000..2bee4f0
Binary files /dev/null and b/releases/releases_advanced/filters/misty/filter.png differ
diff --git a/releases/releases_advanced/filters/misty/thumb.png b/releases/releases_advanced/filters/misty/thumb.png
new file mode 100644
index 0000000..fd5d3c0
Binary files /dev/null and b/releases/releases_advanced/filters/misty/thumb.png differ
diff --git a/releases/releases_advanced/filters/normal/filter.png b/releases/releases_advanced/filters/normal/filter.png
new file mode 100644
index 0000000..12de54c
Binary files /dev/null and b/releases/releases_advanced/filters/normal/filter.png differ
diff --git a/releases/releases_advanced/filters/normal/thumb.png b/releases/releases_advanced/filters/normal/thumb.png
new file mode 100644
index 0000000..399078a
Binary files /dev/null and b/releases/releases_advanced/filters/normal/thumb.png differ
diff --git a/releases/releases_advanced/filters/pailide/filter.png b/releases/releases_advanced/filters/pailide/filter.png
new file mode 100644
index 0000000..9576d69
Binary files /dev/null and b/releases/releases_advanced/filters/pailide/filter.png differ
diff --git a/releases/releases_advanced/filters/pailide/thumb.png b/releases/releases_advanced/filters/pailide/thumb.png
new file mode 100644
index 0000000..49fcda2
Binary files /dev/null and b/releases/releases_advanced/filters/pailide/thumb.png differ
diff --git a/releases/releases_advanced/filters/pink/filter.png b/releases/releases_advanced/filters/pink/filter.png
new file mode 100644
index 0000000..97b6bc2
Binary files /dev/null and b/releases/releases_advanced/filters/pink/filter.png differ
diff --git a/releases/releases_advanced/filters/pink/thumb.png b/releases/releases_advanced/filters/pink/thumb.png
new file mode 100644
index 0000000..94549d1
Binary files /dev/null and b/releases/releases_advanced/filters/pink/thumb.png differ
diff --git a/releases/releases_advanced/filters/pld/filter.png b/releases/releases_advanced/filters/pld/filter.png
new file mode 100644
index 0000000..d9256d1
Binary files /dev/null and b/releases/releases_advanced/filters/pld/filter.png differ
diff --git a/releases/releases_advanced/filters/pld/thumb.png b/releases/releases_advanced/filters/pld/thumb.png
new file mode 100644
index 0000000..399078a
Binary files /dev/null and b/releases/releases_advanced/filters/pld/thumb.png differ
diff --git a/releases/releases_advanced/filters/print/filter.png b/releases/releases_advanced/filters/print/filter.png
new file mode 100644
index 0000000..d9ece3b
Binary files /dev/null and b/releases/releases_advanced/filters/print/filter.png differ
diff --git a/releases/releases_advanced/filters/print/thumb.png b/releases/releases_advanced/filters/print/thumb.png
new file mode 100644
index 0000000..44005c4
Binary files /dev/null and b/releases/releases_advanced/filters/print/thumb.png differ
diff --git a/releases/releases_advanced/filters/purple/filter.png b/releases/releases_advanced/filters/purple/filter.png
new file mode 100644
index 0000000..405dd55
Binary files /dev/null and b/releases/releases_advanced/filters/purple/filter.png differ
diff --git a/releases/releases_advanced/filters/purple/thumb.png b/releases/releases_advanced/filters/purple/thumb.png
new file mode 100644
index 0000000..278bad9
Binary files /dev/null and b/releases/releases_advanced/filters/purple/thumb.png differ
diff --git a/releases/releases_advanced/filters/railway/filter.png b/releases/releases_advanced/filters/railway/filter.png
new file mode 100644
index 0000000..ae2d313
Binary files /dev/null and b/releases/releases_advanced/filters/railway/filter.png differ
diff --git a/releases/releases_advanced/filters/railway/thumb.png b/releases/releases_advanced/filters/railway/thumb.png
new file mode 100644
index 0000000..3d037a9
Binary files /dev/null and b/releases/releases_advanced/filters/railway/thumb.png differ
diff --git a/releases/releases_advanced/filters/red/filter.png b/releases/releases_advanced/filters/red/filter.png
new file mode 100644
index 0000000..2212960
Binary files /dev/null and b/releases/releases_advanced/filters/red/filter.png differ
diff --git a/releases/releases_advanced/filters/red/thumb.png b/releases/releases_advanced/filters/red/thumb.png
new file mode 100644
index 0000000..0eb368c
Binary files /dev/null and b/releases/releases_advanced/filters/red/thumb.png differ
diff --git a/releases/releases_advanced/filters/retro/filter.png b/releases/releases_advanced/filters/retro/filter.png
new file mode 100644
index 0000000..0b88aad
Binary files /dev/null and b/releases/releases_advanced/filters/retro/filter.png differ
diff --git a/releases/releases_advanced/filters/retro/thumb.png b/releases/releases_advanced/filters/retro/thumb.png
new file mode 100644
index 0000000..30a3178
Binary files /dev/null and b/releases/releases_advanced/filters/retro/thumb.png differ
diff --git a/releases/releases_advanced/filters/sunny/filter.png b/releases/releases_advanced/filters/sunny/filter.png
new file mode 100644
index 0000000..4e5b033
Binary files /dev/null and b/releases/releases_advanced/filters/sunny/filter.png differ
diff --git a/releases/releases_advanced/filters/sunny/thumb.png b/releases/releases_advanced/filters/sunny/thumb.png
new file mode 100644
index 0000000..7bf83a8
Binary files /dev/null and b/releases/releases_advanced/filters/sunny/thumb.png differ
diff --git a/releases/releases_advanced/filters/tasty/filter.png b/releases/releases_advanced/filters/tasty/filter.png
new file mode 100644
index 0000000..decc97a
Binary files /dev/null and b/releases/releases_advanced/filters/tasty/filter.png differ
diff --git a/releases/releases_advanced/filters/tasty/thumb.png b/releases/releases_advanced/filters/tasty/thumb.png
new file mode 100644
index 0000000..0099ff1
Binary files /dev/null and b/releases/releases_advanced/filters/tasty/thumb.png differ
diff --git a/releases/releases_advanced/filters/turkish/filter.png b/releases/releases_advanced/filters/turkish/filter.png
new file mode 100644
index 0000000..e901f07
Binary files /dev/null and b/releases/releases_advanced/filters/turkish/filter.png differ
diff --git a/releases/releases_advanced/filters/turkish/thumb.png b/releases/releases_advanced/filters/turkish/thumb.png
new file mode 100644
index 0000000..d617e2f
Binary files /dev/null and b/releases/releases_advanced/filters/turkish/thumb.png differ
diff --git a/releases/releases_advanced/filters/waltz/filter.png b/releases/releases_advanced/filters/waltz/filter.png
new file mode 100644
index 0000000..61105bf
Binary files /dev/null and b/releases/releases_advanced/filters/waltz/filter.png differ
diff --git a/releases/releases_advanced/filters/waltz/thumb.png b/releases/releases_advanced/filters/waltz/thumb.png
new file mode 100644
index 0000000..9eb9f4a
Binary files /dev/null and b/releases/releases_advanced/filters/waltz/thumb.png differ
diff --git a/releases/releases_advanced/filters/west/filter.png b/releases/releases_advanced/filters/west/filter.png
new file mode 100644
index 0000000..4a2cc8a
Binary files /dev/null and b/releases/releases_advanced/filters/west/filter.png differ
diff --git a/releases/releases_advanced/filters/west/thumb.png b/releases/releases_advanced/filters/west/thumb.png
new file mode 100644
index 0000000..47d31c9
Binary files /dev/null and b/releases/releases_advanced/filters/west/thumb.png differ
diff --git a/releases/releases_advanced/pldroid-shortvideo-2.2.1.jar b/releases/releases_advanced/pldroid-shortvideo-3.0.0.jar
similarity index 56%
rename from releases/releases_advanced/pldroid-shortvideo-2.2.1.jar
rename to releases/releases_advanced/pldroid-shortvideo-3.0.0.jar
index da70964..c0ba787 100644
Binary files a/releases/releases_advanced/pldroid-shortvideo-2.2.1.jar and b/releases/releases_advanced/pldroid-shortvideo-3.0.0.jar differ
diff --git a/releases/releases_basic/arm64-v8a/libpldroid_amix.so b/releases/releases_basic/arm64-v8a/libpldroid_amix.so
new file mode 100644
index 0000000..39ab922
Binary files /dev/null and b/releases/releases_basic/arm64-v8a/libpldroid_amix.so differ
diff --git a/releases/releases_basic/armeabi-v7a/libpldroid_amix.so b/releases/releases_basic/armeabi-v7a/libpldroid_amix.so
new file mode 100644
index 0000000..10fabd1
Binary files /dev/null and b/releases/releases_basic/armeabi-v7a/libpldroid_amix.so differ
diff --git a/releases/releases_basic/armeabi/libpldroid_amix.so b/releases/releases_basic/armeabi/libpldroid_amix.so
new file mode 100644
index 0000000..10250bd
Binary files /dev/null and b/releases/releases_basic/armeabi/libpldroid_amix.so differ
diff --git a/releases/releases_basic/pldroid-shortvideo-3.0.0.jar b/releases/releases_basic/pldroid-shortvideo-3.0.0.jar
new file mode 100644
index 0000000..4962e46
Binary files /dev/null and b/releases/releases_basic/pldroid-shortvideo-3.0.0.jar differ
diff --git a/releases/releases_basic/x86/libpldroid_amix.so b/releases/releases_basic/x86/libpldroid_amix.so
new file mode 100644
index 0000000..e9ffc14
Binary files /dev/null and b/releases/releases_basic/x86/libpldroid_amix.so differ
diff --git a/releases/releases_professional/pldroid-shortvideo-2.2.1.jar b/releases/releases_professional/pldroid-shortvideo-3.0.0.jar
similarity index 78%
rename from releases/releases_professional/pldroid-shortvideo-2.2.1.jar
rename to releases/releases_professional/pldroid-shortvideo-3.0.0.jar
index 7f61f8c..96f16fc 100644
Binary files a/releases/releases_professional/pldroid-shortvideo-2.2.1.jar and b/releases/releases_professional/pldroid-shortvideo-3.0.0.jar differ
diff --git a/releases/releases_smart/arm64-v8a/libpldroid_beauty.so b/releases/releases_smart/arm64-v8a/libpldroid_beauty.so
new file mode 100644
index 0000000..53819c7
Binary files /dev/null and b/releases/releases_smart/arm64-v8a/libpldroid_beauty.so differ
diff --git a/releases/releases_smart/arm64-v8a/libpldroid_encoder.so b/releases/releases_smart/arm64-v8a/libpldroid_encoder.so
new file mode 100644
index 0000000..7a08ad9
Binary files /dev/null and b/releases/releases_smart/arm64-v8a/libpldroid_encoder.so differ
diff --git a/releases/releases_smart/arm64-v8a/libpldroid_shortvideo_core.so b/releases/releases_smart/arm64-v8a/libpldroid_shortvideo_core.so
new file mode 100644
index 0000000..58fde4a
Binary files /dev/null and b/releases/releases_smart/arm64-v8a/libpldroid_shortvideo_core.so differ
diff --git a/releases/releases_smart/armeabi-v7a/libpldroid_beauty.so b/releases/releases_smart/armeabi-v7a/libpldroid_beauty.so
new file mode 100644
index 0000000..5e65e6a
Binary files /dev/null and b/releases/releases_smart/armeabi-v7a/libpldroid_beauty.so differ
diff --git a/releases/releases_smart/armeabi-v7a/libpldroid_encoder.so b/releases/releases_smart/armeabi-v7a/libpldroid_encoder.so
new file mode 100644
index 0000000..e0c022b
Binary files /dev/null and b/releases/releases_smart/armeabi-v7a/libpldroid_encoder.so differ
diff --git a/releases/releases_smart/armeabi-v7a/libpldroid_shortvideo_core.so b/releases/releases_smart/armeabi-v7a/libpldroid_shortvideo_core.so
new file mode 100644
index 0000000..380a5bb
Binary files /dev/null and b/releases/releases_smart/armeabi-v7a/libpldroid_shortvideo_core.so differ
diff --git a/releases/releases_smart/armeabi/libpldroid_beauty.so b/releases/releases_smart/armeabi/libpldroid_beauty.so
new file mode 100644
index 0000000..64945b7
Binary files /dev/null and b/releases/releases_smart/armeabi/libpldroid_beauty.so differ
diff --git a/releases/releases_smart/armeabi/libpldroid_encoder.so b/releases/releases_smart/armeabi/libpldroid_encoder.so
new file mode 100644
index 0000000..4869ba7
Binary files /dev/null and b/releases/releases_smart/armeabi/libpldroid_encoder.so differ
diff --git a/releases/releases_smart/armeabi/libpldroid_shortvideo_core.so b/releases/releases_smart/armeabi/libpldroid_shortvideo_core.so
new file mode 100644
index 0000000..6315585
Binary files /dev/null and b/releases/releases_smart/armeabi/libpldroid_shortvideo_core.so differ
diff --git a/releases/releases_basic/pldroid-shortvideo-2.2.1.jar b/releases/releases_smart/pldroid-shortvideo-3.0.0.jar
similarity index 57%
rename from releases/releases_basic/pldroid-shortvideo-2.2.1.jar
rename to releases/releases_smart/pldroid-shortvideo-3.0.0.jar
index 0256a9e..2f78cda 100644
Binary files a/releases/releases_basic/pldroid-shortvideo-2.2.1.jar and b/releases/releases_smart/pldroid-shortvideo-3.0.0.jar differ
diff --git a/releases/releases_smart/x86/libpldroid_beauty.so b/releases/releases_smart/x86/libpldroid_beauty.so
new file mode 100644
index 0000000..02d6688
Binary files /dev/null and b/releases/releases_smart/x86/libpldroid_beauty.so differ
diff --git a/releases/releases_smart/x86/libpldroid_encoder.so b/releases/releases_smart/x86/libpldroid_encoder.so
new file mode 100644
index 0000000..298e23e
Binary files /dev/null and b/releases/releases_smart/x86/libpldroid_encoder.so differ
diff --git a/releases/releases_smart/x86/libpldroid_shortvideo_core.so b/releases/releases_smart/x86/libpldroid_shortvideo_core.so
new file mode 100644
index 0000000..060699b
Binary files /dev/null and b/releases/releases_smart/x86/libpldroid_shortvideo_core.so differ