Skip to content

Commit

Permalink
Merge pull request pili-engineering#30 from geeklok/release_v1.4.0
Browse files Browse the repository at this point in the history
release v1.4.0
  • Loading branch information
Jhuster authored Sep 7, 2017
2 parents 81c1072 + 46aecd9 commit 9dd241f
Show file tree
Hide file tree
Showing 23 changed files with 849 additions and 54 deletions.
7 changes: 4 additions & 3 deletions PLDroidShortVideoDemo/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ android {
applicationId "com.qiniu.pili.droid.shortvideo.demo"
minSdkVersion 18
targetSdkVersion 25
versionCode 7
versionName "1.3.0"
versionCode 8
versionName "1.4.0"
multiDexEnabled true
buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"
}
Expand All @@ -28,7 +28,8 @@ android {
}

dependencies {
compile files('libs/pldroid-shortvideo-1.3.0.jar')
compile files('libs/pldroid-shortvideo-1.4.0.jar')
compile files('libs/pldroid-player-2.0.1.jar')
compile 'com.android.support:recyclerview-v7:25+'
compile 'com.android.support:appcompat-v7:25+'
compile 'com.android.support:design:25+'
Expand Down
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion PLDroidShortVideoDemo/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<activity
android:name=".activity.ScreenRecordActivity"
android:screenOrientation="portrait" />
<activity android:name=".activity.ShowGIFActivity"></activity>
<activity android:name=".activity.ShowGIFActivity"/>
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";

private Spinner mRecordSpeedLevelSpinner;
private Spinner mRecordOrientationSpinner;
private Spinner mPreviewSizeRatioSpinner;
private Spinner mPreviewSizeLevelSpinner;
Expand All @@ -38,28 +39,33 @@ protected void onCreate(Bundle savedInstanceState) {
String info = "版本号:" + getVersionDescription() + ",编译时间:" + getBuildTimeDescription();
versionInfoTextView.setText(info);

mRecordSpeedLevelSpinner = (Spinner) findViewById(R.id.RecordSpeedLevelSpinner);
mRecordOrientationSpinner = (Spinner) findViewById(R.id.RecordOrientationSpinner);
mPreviewSizeRatioSpinner = (Spinner) findViewById(R.id.PreviewSizeRatioSpinner);
mPreviewSizeLevelSpinner = (Spinner) findViewById(R.id.PreviewSizeLevelSpinner);
mEncodingSizeLevelSpinner = (Spinner) findViewById(R.id.EncodingSizeLevelSpinner);
mEncodingBitrateLevelSpinner = (Spinner) findViewById(R.id.EncodingBitrateLevelSpinner);

ArrayAdapter<String> adapter0 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.RECORD_ORIENTATION_TIPS_ARRAY);
mRecordOrientationSpinner.setAdapter(adapter0);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.RECORD_SPEED_LEVEL_TIPS_ARRAY);
mRecordSpeedLevelSpinner.setAdapter(adapter);
mRecordSpeedLevelSpinner.setSelection(3);

ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_RATIO_TIPS_ARRAY);
mPreviewSizeRatioSpinner.setAdapter(adapter1);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.RECORD_ORIENTATION_TIPS_ARRAY);
mRecordOrientationSpinner.setAdapter(adapter);

ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_LEVEL_TIPS_ARRAY);
mPreviewSizeLevelSpinner.setAdapter(adapter2);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_RATIO_TIPS_ARRAY);
mPreviewSizeRatioSpinner.setAdapter(adapter);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.PREVIEW_SIZE_LEVEL_TIPS_ARRAY);
mPreviewSizeLevelSpinner.setAdapter(adapter);
mPreviewSizeLevelSpinner.setSelection(3);

ArrayAdapter<String> adapter3= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_SIZE_LEVEL_TIPS_ARRAY);
mEncodingSizeLevelSpinner.setAdapter(adapter3);
adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_SIZE_LEVEL_TIPS_ARRAY);
mEncodingSizeLevelSpinner.setAdapter(adapter);
mEncodingSizeLevelSpinner.setSelection(10);

ArrayAdapter<String> adapter4 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_BITRATE_LEVEL_TIPS_ARRAY);
mEncodingBitrateLevelSpinner.setAdapter(adapter4);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, RecordSettings.ENCODING_BITRATE_LEVEL_TIPS_ARRAY);
mEncodingBitrateLevelSpinner.setAdapter(adapter);
mEncodingBitrateLevelSpinner.setSelection(2);
}

Expand Down Expand Up @@ -124,6 +130,7 @@ private void jumpToScreenRecordActivity() {

public void jumpToCaptureActivity() {
Intent intent = new Intent(MainActivity.this, VideoRecordActivity.class);
intent.putExtra(VideoRecordActivity.RECORD_SPEED_LEVEL, mRecordSpeedLevelSpinner.getSelectedItemPosition());
intent.putExtra(VideoRecordActivity.RECORD_ORIENTATION_LANDSCAPE, mRecordOrientationSpinner.getSelectedItemPosition() == 1);
intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_RATIO, mPreviewSizeRatioSpinner.getSelectedItemPosition());
intent.putExtra(VideoRecordActivity.PREVIEW_SIZE_LEVEL, mPreviewSizeLevelSpinner.getSelectedItemPosition());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
Expand Down Expand Up @@ -144,6 +145,8 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun
mProcessingDialog = new ProgressDialog(MakeGIFActivity.this);
mProcessingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProcessingDialog.setCancelable(false);
mProcessingDialog.setCanceledOnTouchOutside(false);
mProcessingDialog.setMessage("正在生成");
}

public void onClickMakeGIF(View v) {
Expand All @@ -152,36 +155,48 @@ public void onClickMakeGIF(View v) {
mProcessingDialog.dismiss();
return;
}
ArrayList<Bitmap> bitmaps = new ArrayList<>();
for (int i = 0; i < mSelectedFrameIndex.size(); i++) {
bitmaps.add(mTrimmer.getVideoFrameByIndex(mSelectedFrameIndex.get(i), true).toBitmap());
}
mProcessingDialog.setMessage("正在生成");
mProcessingDialog.show();
mShortVideoComposer.composeToGIF(bitmaps, 500, true, GIF_SAVE_PATH, new PLVideoSaveListener() {
new Thread(new Runnable() {
@Override
public void onSaveVideoSuccess(String s) {
mProcessingDialog.dismiss();
startActivity(new Intent(MakeGIFActivity.this, ShowGIFActivity.class));
finish();
}
public void run() {
ArrayList<Bitmap> bitmaps = new ArrayList<>();
for (int i = 0; i < mSelectedFrameIndex.size(); i++) {
bitmaps.add(mTrimmer.getVideoFrameByIndex(mSelectedFrameIndex.get(i), true).toBitmap());
}
mProcessingDialog.setCancelable(true);
mProcessingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
mShortVideoComposer.cancelComposeToGIF();
}
});
mShortVideoComposer.composeToGIF(bitmaps, 500, true, GIF_SAVE_PATH, new PLVideoSaveListener() {
@Override
public void onSaveVideoSuccess(String s) {
mProcessingDialog.dismiss();
startActivity(new Intent(MakeGIFActivity.this, ShowGIFActivity.class));
finish();
}

@Override
public void onSaveVideoFailed(int i) {
mProcessingDialog.dismiss();
ToastUtils.s(MakeGIFActivity.this, "Failed");
}
@Override
public void onSaveVideoFailed(int i) {
mProcessingDialog.dismiss();
ToastUtils.s(MakeGIFActivity.this, "Failed");
}

@Override
public void onSaveVideoCanceled() {
@Override
public void onSaveVideoCanceled() {
ToastUtils.s(MakeGIFActivity.this, "Canceled");

}
}

@Override
public void onProgressUpdate(float v) {
@Override
public void onProgressUpdate(float v) {

}
});
}
});
}).start();
}

private class FrameAdapter extends BaseAdapter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,36 @@
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.VideoView;
import android.widget.TextView;

import com.pili.pldroid.player.AVOptions;
import com.pili.pldroid.player.PLMediaPlayer;
import com.pili.pldroid.player.widget.PLVideoView;
import com.qiniu.pili.droid.shortvideo.PLShortVideoUploader;
import com.qiniu.pili.droid.shortvideo.PLUploadProgressListener;
import com.qiniu.pili.droid.shortvideo.PLUploadResultListener;
import com.qiniu.pili.droid.shortvideo.PLUploadSetting;
import com.qiniu.pili.droid.shortvideo.demo.R;
import com.qiniu.pili.droid.shortvideo.demo.utils.Config;
import com.qiniu.pili.droid.shortvideo.demo.utils.ToastUtils;
import com.qiniu.pili.droid.shortvideo.demo.view.MediaController;
import com.qiniu.pili.droid.shortvideo.demo.view.MediaController.OnClickSpeedAdjustListener;

public class PlaybackActivity extends Activity implements
PLUploadResultListener,
PLUploadProgressListener {
private static final String TAG = "PlaybackActivity";
private static final String MP4_PATH = "MP4_PATH";

private VideoView mVideoView;
private PLVideoView mVideoView;
private Button mUploadBtn;
private PLShortVideoUploader mVideoUploadManager;
private ProgressBar mProgressBarDeterminate;
Expand Down Expand Up @@ -60,15 +66,22 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mUploadBtn.setOnClickListener(new UploadOnClickListener());
mProgressBarDeterminate = (ProgressBar) findViewById(R.id.progressBar);
mProgressBarDeterminate.setMax(100);
mVideoView = (VideoView) findViewById(R.id.video);
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mVideoView.start();
}
});
mVideoView = (PLVideoView) findViewById(R.id.video);
mVideoPath = getIntent().getStringExtra(MP4_PATH);
mVideoView.setLooping(true);
mVideoView.setAVOptions(new AVOptions());
mVideoView.setVideoPath(mVideoPath);
MediaController mediaController = new MediaController(this, true, false);
mediaController.setOnClickSpeedAdjustListener(mOnClickSpeedAdjustListener);
mVideoView.setMediaController(mediaController);

mVideoView.setOnInfoListener(mOnInfoListener);
mVideoView.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
mVideoView.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
mVideoView.setOnCompletionListener(mOnCompletionListener);
mVideoView.setOnErrorListener(mOnErrorListener);
mVideoView.setOnVideoFrameListener(mOnVideoFrameListener);
mVideoView.setOnAudioFrameListener(mOnAudioFrameListener);
}

@Override
Expand Down Expand Up @@ -132,4 +145,130 @@ public void onUploadVideoSuccess(String fileName) {
public void onUploadVideoFailed(int statusCode, String error) {
ToastUtils.l(this, "Upload failed, statusCode = " + statusCode + " error = " + error);
}

private OnClickSpeedAdjustListener mOnClickSpeedAdjustListener = new OnClickSpeedAdjustListener() {
@Override
public void onClickNormal() {
// 0x0001/0x0001 = 2
mVideoView.setPlaySpeed(0X00010001);
}

@Override
public void onClickFaster() {
// 0x0002/0x0001 = 2
mVideoView.setPlaySpeed(0X00020001);
}

@Override
public void onClickSlower() {
// 0x0001/0x0002 = 0.5
mVideoView.setPlaySpeed(0X00010002);
}
};

private PLMediaPlayer.OnVideoFrameListener mOnVideoFrameListener = new PLMediaPlayer.OnVideoFrameListener() {
@Override
public void onVideoFrameAvailable(byte[] data, int size, int width, int height, int format, long ts) {
Log.i(TAG, "onVideoFrameAvailable: " + size + ", " + width + " x " + height + ", " + format + ", " + ts);
}
};

private PLMediaPlayer.OnAudioFrameListener mOnAudioFrameListener = new PLMediaPlayer.OnAudioFrameListener() {
@Override
public void onAudioFrameAvailable(byte[] data, int size, int samplerate, int channels, int datawidth, long ts) {
Log.i(TAG, "onAudioFrameAvailable: " + size + ", " + samplerate + ", " + channels + ", " + datawidth + ", " + ts);
}
};

private PLMediaPlayer.OnInfoListener mOnInfoListener = new PLMediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(PLMediaPlayer plMediaPlayer, int what, int extra) {
Log.i(TAG, "OnInfo, what = " + what + ", extra = " + extra);
switch (what) {
case PLMediaPlayer.MEDIA_INFO_BUFFERING_START:
break;
case PLMediaPlayer.MEDIA_INFO_BUFFERING_END:
break;
case PLMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
ToastUtils.s(PlaybackActivity.this, "first video render time: " + extra + "ms");
break;
case PLMediaPlayer.MEDIA_INFO_AUDIO_RENDERING_START:
break;
case PLMediaPlayer.MEDIA_INFO_VIDEO_FRAME_RENDERING:
Log.i(TAG, "video frame rendering, ts = " + extra);
break;
case PLMediaPlayer.MEDIA_INFO_AUDIO_FRAME_RENDERING:
Log.i(TAG, "audio frame rendering, ts = " + extra);
break;
case PLMediaPlayer.MEDIA_INFO_VIDEO_GOP_TIME:
Log.i(TAG, "Gop Time: " + extra);
break;
case PLMediaPlayer.MEDIA_INFO_SWITCHING_SW_DECODE:
Log.i(TAG, "Hardware decoding failure, switching software decoding!");
break;
case PLMediaPlayer.MEDIA_INFO_METADATA:
Log.i(TAG, mVideoView.getMetadata().toString());
break;
case PLMediaPlayer.MEDIA_INFO_VIDEO_BITRATE:
case PLMediaPlayer.MEDIA_INFO_VIDEO_FPS:
Log.i(TAG, "FPS: " + extra);
break;
case PLMediaPlayer.MEDIA_INFO_CONNECTED:
Log.i(TAG, "Connected !");
break;
default:
break;
}
return true;
}
};

private PLMediaPlayer.OnErrorListener mOnErrorListener = new PLMediaPlayer.OnErrorListener() {
@Override
public boolean onError(PLMediaPlayer mp, int errorCode) {
Log.e(TAG, "Error happened, errorCode = " + errorCode);
switch (errorCode) {
case PLMediaPlayer.ERROR_CODE_IO_ERROR:
/**
* SDK will do reconnecting automatically
*/
Log.e(TAG, "IO Error!");
return false;
case PLMediaPlayer.ERROR_CODE_OPEN_FAILED:
ToastUtils.s(PlaybackActivity.this, "failed to open player !");
break;
case PLMediaPlayer.ERROR_CODE_SEEK_FAILED:
ToastUtils.s(PlaybackActivity.this, "failed to seek !");
break;
default:
ToastUtils.s(PlaybackActivity.this, "unknown error !");
break;
}
finish();
return true;
}
};

private PLMediaPlayer.OnCompletionListener mOnCompletionListener = new PLMediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(PLMediaPlayer plMediaPlayer) {
Log.i(TAG, "Play Completed !");
ToastUtils.s(PlaybackActivity.this, "Play Completed !");
finish();
}
};

private PLMediaPlayer.OnBufferingUpdateListener mOnBufferingUpdateListener = new PLMediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(PLMediaPlayer plMediaPlayer, int precent) {
Log.i(TAG, "onBufferingUpdate: " + precent);
}
};

private PLMediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new PLMediaPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(PLMediaPlayer plMediaPlayer, int width, int height) {
Log.i(TAG, "onVideoSizeChanged: width = " + width + ", height = " + height);
}
};
}
Loading

0 comments on commit 9dd241f

Please sign in to comment.