From f854787b2ae5f77b6f89acb0ffaa1cb3f01023e4 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Fri, 2 Jun 2023 14:53:33 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E6=92=AD=E6=94=BE=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE=E5=99=A8=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 11 +- .../player/ProVideoActivity.java | 351 ++++++------------ .../safetywatcher/player/ProVideoView.java | 9 - .../player/VideoControllerView.java | 327 +--------------- .../watcher/ui/HistoryVideoActivity.kt | 14 +- .../res/layout/activity_choose_params.xml | 8 +- app/src/main/res/layout/activity_main_pro.xml | 17 +- app/src/main/res/layout/media_controller.xml | 170 ++------- 8 files changed, 177 insertions(+), 730 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f509da4..1bf254f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -100,6 +100,12 @@ android:name=".watcher.ui.NetSettingActivity" android:exported="false" android:screenOrientation="landscape" /> + + - \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoActivity.java b/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoActivity.java index 3b5e3b8..9118d57 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoActivity.java +++ b/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoActivity.java @@ -18,14 +18,12 @@ package com.yinuo.safetywatcher.player; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; -import android.Manifest; +import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.Intent; import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Color; -import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -37,24 +35,16 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; import android.widget.LinearLayout; -import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; import androidx.core.view.ViewCompat; import androidx.core.view.ViewConfigurationCompat; import com.bumptech.glide.Glide; import com.yinuo.safetywatcher.BuildConfig; import com.yinuo.safetywatcher.databinding.ActivityMainProBinding; -import com.yinuo.safetywatcher.player.utils.FileUtil; import com.yinuo.safetywatcher.player.utils.SPUtil; -import java.io.File; -import java.text.SimpleDateFormat; -import java.util.Date; - import tv.danmaku.ijk.media.player.IMediaPlayer; import tv.danmaku.ijk.media.player.IjkMediaPlayer; @@ -73,12 +63,9 @@ public class ProVideoActivity extends AppCompatActivity { private GestureDetector detector; private VideoControllerView mediaController; - private MediaScannerConnection mScanner; - - private Runnable mSpeedCalcTask; - private int mMode; // 画面模式 + @SuppressLint("ClickableViewAccessibility") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -145,107 +132,68 @@ public class ProVideoActivity extends AppCompatActivity { mVideoView.setMediaController(mediaController); mProgress = mBinding.progress; - mVideoView.setOnInfoListener(new IMediaPlayer.OnInfoListener() { - @Override - public boolean onInfo(IMediaPlayer iMediaPlayer, int arg1, int arg2) { - switch (arg1) { - case IMediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING: - Log.i(TAG, "MEDIA_INFO_VIDEO_TRACK_LAGGING"); - break; - case IMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START: - Log.i(TAG, "MEDIA_INFO_VIDEO_RENDERING_START"); - mProgress.setVisibility(View.GONE); - mBinding.surfaceCover.setVisibility(View.GONE); - mBinding.playerContainer.setVisibility(View.GONE); - mBinding.videoView.setVisibility(View.VISIBLE); - mBinding.videoView2.setVisibility(View.VISIBLE); - - // 快照 - File file = FileUtil.getSnapshotFile(mVideoPath); - mVideoView.takePicture(file.getPath()); - break; - case IMediaPlayer.MEDIA_INFO_BUFFERING_START: - Log.i(TAG, "MEDIA_INFO_BUFFERING_START"); - break; - case IMediaPlayer.MEDIA_INFO_BUFFERING_END: - Log.i(TAG, "MEDIA_INFO_BUFFERING_END"); - break; - case IMediaPlayer.MEDIA_INFO_NETWORK_BANDWIDTH: - Log.i(TAG, "MEDIA_INFO_NETWORK_BANDWIDTH"); - break; - case IMediaPlayer.MEDIA_INFO_BAD_INTERLEAVING: - Log.i(TAG, "MEDIA_INFO_BAD_INTERLEAVING"); - break; - case IMediaPlayer.MEDIA_INFO_NOT_SEEKABLE: - Log.i(TAG, "MEDIA_INFO_NOT_SEEKABLE"); - break; - case IMediaPlayer.MEDIA_INFO_METADATA_UPDATE: - Log.i(TAG, "MEDIA_INFO_METADATA_UPDATE"); - break; - case IMediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE: - Log.i(TAG, "MEDIA_INFO_UNSUPPORTED_SUBTITLE"); - break; - case IMediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT: - Log.i(TAG, "MEDIA_INFO_SUBTITLE_TIMED_OUT"); - break; - case IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED: - Log.i(TAG, "MEDIA_INFO_VIDEO_ROTATION_CHANGED"); - break; - case IMediaPlayer.MEDIA_INFO_AUDIO_RENDERING_START: - Log.i(TAG, "MEDIA_INFO_AUDIO_RENDERING_START"); - break; - } - - return false; + mVideoView.setOnInfoListener((iMediaPlayer, arg1, arg2) -> { + switch (arg1) { + case IMediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING: + Log.i(TAG, "MEDIA_INFO_VIDEO_TRACK_LAGGING"); + break; + case IMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START: + Log.i(TAG, "MEDIA_INFO_VIDEO_RENDERING_START"); + mProgress.setVisibility(View.GONE); + mBinding.surfaceCover.setVisibility(View.GONE); + mBinding.playerContainer.setVisibility(View.GONE); + mBinding.videoView.setVisibility(View.VISIBLE); + break; + case IMediaPlayer.MEDIA_INFO_BUFFERING_START: + Log.i(TAG, "MEDIA_INFO_BUFFERING_START"); + break; + case IMediaPlayer.MEDIA_INFO_BUFFERING_END: + Log.i(TAG, "MEDIA_INFO_BUFFERING_END"); + break; + case IMediaPlayer.MEDIA_INFO_NETWORK_BANDWIDTH: + Log.i(TAG, "MEDIA_INFO_NETWORK_BANDWIDTH"); + break; + case IMediaPlayer.MEDIA_INFO_BAD_INTERLEAVING: + Log.i(TAG, "MEDIA_INFO_BAD_INTERLEAVING"); + break; + case IMediaPlayer.MEDIA_INFO_NOT_SEEKABLE: + Log.i(TAG, "MEDIA_INFO_NOT_SEEKABLE"); + break; + case IMediaPlayer.MEDIA_INFO_METADATA_UPDATE: + Log.i(TAG, "MEDIA_INFO_METADATA_UPDATE"); + break; + case IMediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE: + Log.i(TAG, "MEDIA_INFO_UNSUPPORTED_SUBTITLE"); + break; + case IMediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT: + Log.i(TAG, "MEDIA_INFO_SUBTITLE_TIMED_OUT"); + break; + case IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED: + Log.i(TAG, "MEDIA_INFO_VIDEO_ROTATION_CHANGED"); + break; + case IMediaPlayer.MEDIA_INFO_AUDIO_RENDERING_START: + Log.i(TAG, "MEDIA_INFO_AUDIO_RENDERING_START"); + break; } - }); - mVideoView.setOnErrorListener(new IMediaPlayer.OnErrorListener() { - @Override - public boolean onError(IMediaPlayer iMediaPlayer, int i, int i1) { - Log.i(TAG, "播放错误"); - mBinding.videoView.setVisibility(View.GONE); - mBinding.videoView2.setVisibility(View.GONE); - mProgress.setVisibility(View.GONE); - mBinding.playerContainer.setVisibility(View.VISIBLE); - - mVideoView.postDelayed(new Runnable() { - @Override - public void run() { - mVideoView.reStart(); - } - }, 5000); - - return true; - } + return false; }); - mVideoView.setOnCompletionListener(new IMediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(IMediaPlayer iMediaPlayer) { - Log.i(TAG, "播放完成"); - mProgress.setVisibility(View.GONE); - - if (mVideoPath.toLowerCase().startsWith("rtsp") || - mVideoPath.toLowerCase().startsWith("rtmp") || - mVideoPath.toLowerCase().startsWith("http")) { - mVideoView.postDelayed(new Runnable() { - @Override - public void run() { - mVideoView.reStart(); - } - }, 5000); - } - } + mVideoView.setOnErrorListener((iMediaPlayer, i, i1) -> { + Log.i(TAG, "播放错误"); + mBinding.videoView.setVisibility(View.GONE); + mProgress.setVisibility(View.GONE); + mBinding.playerContainer.setVisibility(View.VISIBLE); + return true; }); - mVideoView.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(IMediaPlayer iMediaPlayer) { - Log.i(TAG, String.format("onPrepared")); - } + mVideoView.setOnCompletionListener(iMediaPlayer -> { + Log.i(TAG, "播放完成"); + mProgress.setVisibility(View.GONE); }); + mVideoView.setOnPreparedListener(iMediaPlayer -> Log.i(TAG, String.format("onPrepared"))); + if (mVideoPath != null) { mVideoView.setVideoPath(mVideoPath); } else if (mVideoUri != null) { @@ -261,19 +209,6 @@ public class ProVideoActivity extends AppCompatActivity { GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { -// if (!isLandscape() && mMode == 3) { -// if (mFullScreenMode) { -// mMode = mVideoView.toggleAspectRatio(); -// mBinding.playerContainer.setVisibility(View.VISIBLE); -// mFullScreenMode = false; -// } else { -// mFullScreenMode = true; -// mBinding.playerContainer.setVisibility(View.GONE); -// } -// } else { -// mMode = mVideoView.toggleAspectRatio(); -// } - if (mVideoView.isInPlaybackState()) { mVideoView.toggleMediaControlsVisibility(); return true; @@ -284,92 +219,38 @@ public class ProVideoActivity extends AppCompatActivity { @Override public boolean onDoubleTap(MotionEvent e) { -// setRequestedOrientation(isLandscape() ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); return true; } }; detector = new GestureDetector(this, listener); - mVideoView.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - detector.onTouchEvent(event); - - return true; - } + mVideoView.setOnTouchListener((v, event) -> { + detector.onTouchEvent(event); + return true; }); - - mSpeedCalcTask = new Runnable() { - private long mReceivedBytes; - - @Override - public void run() { - long l = mVideoView.getReceivedBytes(); - long received = l - mReceivedBytes; - mReceivedBytes = l; - - mBinding.loadingSpeed.setText(String.format("%3.01fKB/s", received * 1.0f / 1024)); - - if (mProgress.getVisibility() == View.VISIBLE){ - mVideoView.postDelayed(this,1000); - } - } - }; - - mVideoView.post(mSpeedCalcTask); - - if (BuildConfig.DEBUG) { - mBinding.videoView2.setVideoPath("rtmp://13088.liveplay.myqcloud.com/live/13088_65829b3d3e"); - mBinding.videoView2.setShowing(false); - mBinding.videoView2.start(); - } } -// @Override -// protected void onResume() { -// super.onResume(); -// -// if (mVideoView != null) { -// mVideoView.postDelayed(new Runnable() { -// @Override -// public void run() { -// mVideoView.reStart(); -// } -// }, 5000); -// } -// } - @Override protected void onStop() { super.onStop(); - mVideoView.stopPlayback(); - - if (BuildConfig.DEBUG) { - mBinding.videoView2.stopPlayback(); - } } @Override protected void onDestroy() { super.onDestroy(); - - if (mScanner != null) { - mScanner.disconnect(); - mScanner = null; - } } - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (REQUEST_WRITE_STORAGE == requestCode){ - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - doTakePicture(); - } - } - } +// @Override +// public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { +// super.onRequestPermissionsResult(requestCode, permissions, grantResults); +// if (REQUEST_WRITE_STORAGE == requestCode){ +// if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { +// doTakePicture(); +// } +// } +// } @Override public void onConfigurationChanged(Configuration newConfig) { @@ -400,10 +281,6 @@ public class ProVideoActivity extends AppCompatActivity { int newVis = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; if (!visible) { - // } else { - // newVis &= ~(View.SYSTEM_UI_FLAG_LOW_PROFILE | - // View.SYSTEM_UI_FLAG_FULLSCREEN | - // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); newVis |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE; } @@ -421,50 +298,50 @@ public class ProVideoActivity extends AppCompatActivity { Log.i(TAG, "画面模式:" + mMode); } - /* - * 截图 - * */ - public void onTakePicture(View view) { - if (mVideoView.isInPlaybackState()) { - if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE); - } else { - doTakePicture(); - } - } - } - - private void doTakePicture() { - File file = new File(FileUtil.getPicturePath()); - file.mkdirs(); - - file = new File(file, "pic_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg"); - final String picture = mVideoView.takePicture(file.getPath()); - - if (!TextUtils.isEmpty(picture)) { - Toast.makeText(ProVideoActivity.this,"图片已保存", Toast.LENGTH_SHORT).show(); - - if (mScanner == null) { - MediaScannerConnection connection = new MediaScannerConnection(ProVideoActivity.this, new MediaScannerConnection.MediaScannerConnectionClient() { - public void onMediaScannerConnected() { - mScanner.scanFile(picture, "image/jpeg"); - } - - public void onScanCompleted(String path1, Uri uri) { - - } - }); - - try { - connection.connect(); - } catch (Exception e) { - e.printStackTrace(); - } - - mScanner = connection; - } else { - mScanner.scanFile(picture, "image/jpeg"); - } - } - } +// /* +// * 截图 +// * */ +// public void onTakePicture(View view) { +// if (mVideoView.isInPlaybackState()) { +// if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ +// ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE); +// } else { +// doTakePicture(); +// } +// } +// } +// +// private void doTakePicture() { +// File file = new File(FileUtil.getPicturePath()); +// file.mkdirs(); +// +// file = new File(file, "pic_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg"); +// final String picture = mVideoView.takePicture(file.getPath()); +// +// if (!TextUtils.isEmpty(picture)) { +// Toast.makeText(ProVideoActivity.this,"图片已保存", Toast.LENGTH_SHORT).show(); +// +// if (mScanner == null) { +// MediaScannerConnection connection = new MediaScannerConnection(ProVideoActivity.this, new MediaScannerConnection.MediaScannerConnectionClient() { +// public void onMediaScannerConnected() { +// mScanner.scanFile(picture, "image/jpeg"); +// } +// +// public void onScanCompleted(String path1, Uri uri) { +// +// } +// }); +// +// try { +// connection.connect(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// mScanner = connection; +// } else { +// mScanner.scanFile(picture, "image/jpeg"); +// } +// } +// } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoView.java b/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoView.java index 9e5696d..6e02d3d 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoView.java +++ b/app/src/main/java/com/yinuo/safetywatcher/player/ProVideoView.java @@ -135,10 +135,6 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu @Override public void reStart() { super.reStart(); - if (mRecordPath != null) { - toggleRecord(); - toggleRecord(); - } } @Override @@ -191,7 +187,6 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu if (mMediaPlayer == null) { return; } - if (mMediaPlayer instanceof IjkMediaPlayer) { IjkMediaPlayer player = (IjkMediaPlayer) mMediaPlayer; player.setSpeed(speed); @@ -200,10 +195,6 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu @Override public void takePicture() { - if (getContext() instanceof ProVideoActivity) { - ProVideoActivity pro = (ProVideoActivity) getContext(); - pro.onTakePicture(null); - } } @Override diff --git a/app/src/main/java/com/yinuo/safetywatcher/player/VideoControllerView.java b/app/src/main/java/com/yinuo/safetywatcher/player/VideoControllerView.java index 99f68c4..e254412 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/player/VideoControllerView.java +++ b/app/src/main/java/com/yinuo/safetywatcher/player/VideoControllerView.java @@ -3,7 +3,6 @@ package com.yinuo.safetywatcher.player; import android.content.Context; import android.os.Handler; import android.os.Message; -import android.os.SystemClock; import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; @@ -27,7 +26,6 @@ import java.util.Formatter; import java.util.Locale; import tv.danmaku.ijk.media.widget.media.IMediaController; -import tv.danmaku.ijk.media.widget.media.IjkVideoView; /** * 播放控制器 @@ -63,15 +61,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController private ImageButton mPauseButton; // 暂停or开始 private ImageButton mFastButton; // 快进 private ImageButton mRewindButton; // 快退 - private ImageButton mFullscreenButton; // 全屏 - private ImageButton mRecordButton; // 录像 - private ImageButton mFastPlay; // 播放速度加快 - private ImageButton mSlowPlay; // 播放速度减慢 - - private TextView mTVSpeed; - private TextView mTVRecordDuration; - private TextView fps, kbps; - private View mPictureBtn, mChangeModeBtn; private long mReceivedBytes; private long mReceivedPackets; @@ -80,98 +69,27 @@ public class VideoControllerView extends FrameLayout implements IMediaController private Handler mHandler = new MessageHandler(this); - Runnable mRecordTickTask = new Runnable() { - @Override - public void run() { - long recordSecond = (System.currentTimeMillis() - recordBeginTime) / 1000; - - if (recordSecond >= 300) { // 分段 - - } - - recordSecond %= 3600; - mTVRecordDuration.setText(String.format("%02d:%02d", recordSecond / 60, recordSecond % 60)); - mTVRecordDuration.setCompoundDrawablesWithIntrinsicBounds(recordSecond % 2 == 0 ? R.drawable.red_dot : R.drawable.transparent_dot, 0, 0, 0); - postDelayed(this, 1000); - } - }; - - // 每一秒更新fps/bps - Runnable fpsBpsTickTask = new Runnable() { - long firstTimeStamp = 0l; - - @Override - public void run() { - if (firstTimeStamp == 0l) - firstTimeStamp = System.currentTimeMillis(); - - if (mPlayer != null && (mPlayer instanceof IjkVideoView)) { - IjkVideoView ijk = (IjkVideoView) mPlayer; - long l = ijk.getReceivedBytes(); - long received = l - mReceivedBytes; - - long packets = ijk.getVideoCachePackets(); - long receivedPackets = packets - mReceivedPackets; - mReceivedBytes = l; - mReceivedPackets = packets; - - if (ijk.isPlaying() && lastBitsMillis != 0) { - long l1 = SystemClock.uptimeMillis() - lastBitsMillis; - - if (l1 >= 300) { - long time = System.currentTimeMillis() - firstTimeStamp; - - if (time < 900) { - fps.setText(""); - kbps.setText(""); - } else { - receivedPackets = Math.min(receivedPackets, 30); - fps.setText(String.format("%dfps", receivedPackets)); - kbps.setText(String.format("%3.01fKB/s", received * 1.0f * 1000 / l1 / 1024)); - } - } - } else { - fps.setText(""); - kbps.setText(""); - } - - lastBitsMillis = SystemClock.uptimeMillis(); - } - postDelayed(this, 1000); - } - }; - private Runnable mSeekingPending; // 暂停/开始的点击事件 - private OnClickListener mPauseListener = new OnClickListener() { - public void onClick(View v) { - doPauseResume(); - show(sDefaultTimeout); - } + private OnClickListener mPauseListener = v -> { + doPauseResume(); + show(sDefaultTimeout); }; // 全屏的点击事件 - private OnClickListener mFullscreenListener = new OnClickListener() { - public void onClick(View v) { - doToggleFullscreen(); - show(sDefaultTimeout); - } + private OnClickListener mFullscreenListener = v -> { + doToggleFullscreen(); + show(sDefaultTimeout); }; // 录像的点击事件 - private OnClickListener mRecordingListener = new OnClickListener() { - public void onClick(View v) { - doToggleRecord(); - show(sDefaultTimeout); - } - }; + private OnClickListener mRecordingListener = v -> show(sDefaultTimeout); // 滚动条的点击事件 private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() { public void onStartTrackingTouch(SeekBar bar) { show(3600000); - mDragging = true; mHandler.removeMessages(SHOW_PROGRESS); } @@ -243,91 +161,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController } }; - // 播放速度加快 - private OnClickListener mFastPlayListener = new OnClickListener() { - @Override - public void onClick(View v) { - show(sDefaultTimeout); - - if (mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl player = (FullScreenAbleMediaPlayerControl) mPlayer; - float speed = player.getSpeed(); - - if (speed > 2.0) { - return; - } - - if (speed >= 1.0f) { - mTVSpeed.setText(String.format("%d倍速", (int) (speed * 2))); - } else { - mTVSpeed.setText(String.format("%.02f倍速", speed * 2)); - } - - if (speed == 0.5) { - mTVSpeed.setVisibility(GONE); - } else { - mTVSpeed.setVisibility(VISIBLE); - } - - player.setSpeed(speed * 2); - } else { - - } - } - }; - - private OnClickListener mSlowPlayListener = new OnClickListener() { - @Override - public void onClick(View v) { - if (mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl player = (FullScreenAbleMediaPlayerControl) mPlayer; - float speed = player.getSpeed(); - - if (speed < 0.5) { - return; - } - - if (speed >= 2.0f) { - mTVSpeed.setText(String.format("%d倍速", (int) (speed * 0.5))); - } else { - mTVSpeed.setText(String.format("%.02f倍速", speed * 0.5)); - } - - if (speed == 2.0) { - mTVSpeed.setVisibility(GONE); - } else { - mTVSpeed.setVisibility(VISIBLE); - } - - player.setSpeed(speed * 0.5f); - } - - show(sDefaultTimeout); - } - }; - - private OnClickListener takePicListener = new OnClickListener() { - @Override - public void onClick(View v) { - show(sDefaultTimeout); - if (mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl player = (FullScreenAbleMediaPlayerControl) mPlayer; - player.takePicture(); - } - } - }; - - private OnClickListener modeListener = new OnClickListener() { - @Override - public void onClick(View v) { - show(sDefaultTimeout); - if (mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl player = (FullScreenAbleMediaPlayerControl) mPlayer; - player.toggleMode(); - } - } - }; - /** ==================== constructor ==================== */ public VideoControllerView(Context context, AttributeSet attrs) { @@ -505,9 +338,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController mPlayer = player; updatePausePlay(); - updateFullScreen(); - updateRecord(); - updateSpeedCtrl(); } @Override @@ -540,9 +370,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController } updatePausePlay(); - updateFullScreen(); - updateRecord(); - updateSpeedCtrl(); mHandler.sendEmptyMessage(SHOW_PROGRESS); @@ -552,11 +379,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController mHandler.removeMessages(FADE_OUT); mHandler.sendMessageDelayed(msg, timeout); } - - if (mPlayer != null && mPlayer.isPlaying()) { - removeCallbacks(fpsBpsTickTask); - post(fpsBpsTickTask); - } } @Override @@ -572,9 +394,7 @@ public class VideoControllerView extends FrameLayout implements IMediaController protected View makeControllerView() { LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRoot = inflate.inflate(R.layout.media_controller, null); - initControllerView(mRoot); - return mRoot; } @@ -587,18 +407,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController mPauseButton.setOnClickListener(mPauseListener); } - mFullscreenButton = (ImageButton) v.findViewById(R.id.fullscreen); - if (mFullscreenButton != null) { - mFullscreenButton.requestFocus(); - mFullscreenButton.setOnClickListener(mFullscreenListener); - } - - mRecordButton = (ImageButton) v.findViewById(R.id.action_record); - if (mRecordButton != null) { - mRecordButton.requestFocus(); - mRecordButton.setOnClickListener(mRecordingListener); - } - mFastButton = (ImageButton) v.findViewById(R.id.fast_forward); if (mFastButton != null) { mFastButton.setOnClickListener(mFastListener); @@ -621,45 +429,15 @@ public class VideoControllerView extends FrameLayout implements IMediaController SeekBar seeker = (SeekBar) mProgress; seeker.setOnSeekBarChangeListener(mSeekListener); } - mProgress.setMax(1000); } - fps = (TextView) v.findViewById(R.id.tv_fps); - kbps = (TextView) v.findViewById(R.id.tv_kbps); mEndTime = (TextView) v.findViewById(R.id.total_time); mCurrentTime = (TextView) v.findViewById(R.id.time_current); - mTVSpeed = (TextView) v.findViewById(R.id.tv_speed); mFormatBuilder = new StringBuilder(); mFormatter = new Formatter(mFormatBuilder, Locale.getDefault()); - mFastPlay = (ImageButton) v.findViewById(R.id.fast); - mFastPlay.setOnClickListener(mFastPlayListener); - - mSlowPlay = (ImageButton) v.findViewById(R.id.slow); - mSlowPlay.setOnClickListener(mSlowPlayListener); - - mPictureBtn = v.findViewById(R.id.action_take_picture); - mPictureBtn.setOnClickListener(takePicListener); - - mChangeModeBtn = v.findViewById(R.id.action_change_mode); - mChangeModeBtn.setOnClickListener(modeListener); - - mTVRecordDuration = (TextView) v.findViewById(R.id.tv_record_time); - mTVRecordDuration.setOnClickListener(mRecordingListener); - - if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; - } else { - mFastPlay.setVisibility(GONE); - mSlowPlay.setVisibility(GONE); - } - - if (mPlayer.isPlaying()) { - post(fpsBpsTickTask); - } - if (!mPlayer.canSeekBackward() || !mPlayer.canSeekForward()) { v.findViewById(R.id.seek_bar_container).setVisibility(GONE); } else { @@ -693,32 +471,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController } } - private void updateSpeedCtrl() { - if (mRoot == null || mRecordButton == null || this.mPlayer == null) { - return; - } - - if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; - - if (mPlayer.speedCtrlEnable()) { - mFastPlay.setVisibility(VISIBLE); - mSlowPlay.setVisibility(VISIBLE); - mTVSpeed.setVisibility(VISIBLE); - - kbps.setVisibility(GONE); - fps.setVisibility(GONE); - } else { - mFastPlay.setVisibility(GONE); - mSlowPlay.setVisibility(GONE); - mTVSpeed.setVisibility(GONE); - - kbps.setVisibility(VISIBLE); - fps.setVisibility(VISIBLE); - } - } - } - /* * 暂停/开始播放 * */ @@ -727,8 +479,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController return; } - removeCallbacks(fpsBpsTickTask); - if (mPlayer.isPlaying()) { mPlayer.pause(); } else { @@ -758,7 +508,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController postDelayed(mSeekingPending,500); } - post(fpsBpsTickTask); mReceivedBytes = 0; mReceivedPackets = 0; } @@ -826,46 +575,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController return position; } - public void updateFullScreen() { - if (mRoot == null || mFullscreenButton == null || this.mPlayer == null) { - return; - } - - if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; - if (mPlayer.isFullScreen()) { - mFullscreenButton.setImageResource(R.drawable.new_full); - } else { - mFullscreenButton.setImageResource(R.drawable.new_full_white); - } - } - } - - private void updateRecord() { - if (mRoot == null || mRecordButton == null || this.mPlayer == null) { - return; - } - - if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; - - if (mPlayer.isRecording()) { - mRecordButton.setImageResource(R.drawable.new_videotape_click); - - removeCallbacks(mRecordTickTask); - post(mRecordTickTask); - } else { - mRecordButton.setImageResource(R.drawable.new_videotape_btn); - } - - if (mPlayer.recordEnable()) { - mRecordButton.setVisibility(VISIBLE); - } else { - mRecordButton.setVisibility(GONE); - } - } - } - private void doToggleFullscreen() { if (mPlayer == null) { return; @@ -875,28 +584,6 @@ public class VideoControllerView extends FrameLayout implements IMediaController FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; mPlayer.toggleFullScreen(); } - - updateFullScreen(); - } - - private void doToggleRecord() { - if (mPlayer == null) { - return; - } - - if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) { - FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer; - mPlayer.toggleRecord(); - - if (mPlayer.isRecording()) { - findViewById(R.id.tv_record_time).setVisibility(VISIBLE); - recordBeginTime = System.currentTimeMillis(); - post(mRecordTickTask); - } else { - findViewById(R.id.tv_record_time).setVisibility(GONE); - removeCallbacks(mRecordTickTask); - } - } } private String stringForTime(int timeMs) { diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt index 882aa5c..bef168b 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt @@ -1,16 +1,13 @@ package com.yinuo.safetywatcher.watcher.ui +import android.content.Intent import android.view.View -import androidx.recyclerview.widget.LinearLayoutManager import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityHistoryVideoBinding -import com.yinuo.safetywatcher.databinding.ActivityWarndataBinding -import com.yinuo.safetywatcher.watcher.adapter.HistoryDataAdapter -import com.yinuo.safetywatcher.watcher.adapter.WarnDataAdapter +import com.yinuo.safetywatcher.player.ProVideoActivity import com.yinuo.safetywatcher.watcher.base.BaseActivity -import com.yinuo.safetywatcher.watcher.bean.HistoryData -import com.yinuo.safetywatcher.watcher.bean.WarnData import com.yinuo.safetywatcher.watcher.view.CommonTopBar +import com.yinuo.safetywatcher.xls.utils.PathUtils class HistoryVideoActivity : BaseActivity() { @@ -22,7 +19,10 @@ class HistoryVideoActivity : BaseActivity() { if (0 == type) { } else if (1 == type) { - + val intent = Intent(this@HistoryVideoActivity, ProVideoActivity::class.java) + val path = PathUtils.getExternalStorageDirectory() + "/test.mp4" + intent.putExtra("videoPath", path) + startActivity(intent) } } diff --git a/app/src/main/res/layout/activity_choose_params.xml b/app/src/main/res/layout/activity_choose_params.xml index c9ac227..0547f67 100644 --- a/app/src/main/res/layout/activity_choose_params.xml +++ b/app/src/main/res/layout/activity_choose_params.xml @@ -67,7 +67,7 @@ android:id="@+id/divider2" android:layout_width="@dimen/_6dp" android:layout_height="@dimen/_28dp" - android:layout_marginStart="@dimen/_55dp" + android:layout_marginStart="@dimen/_132dp" android:background="@drawable/white_rectangle" app:layout_constraintBottom_toBottomOf="@id/tv_endTime" app:layout_constraintStart_toStartOf="parent" @@ -114,7 +114,7 @@ android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" - android:paddingTop="@dimen/_20dp"> + android:paddingTop="@dimen/font_46dp"> + android:paddingTop="@dimen/font_46dp"> - + android:visibility="gone" />--> - - - - + android:layout_gravity="center_horizontal" + android:paddingLeft="@dimen/_20dp" + android:paddingRight="@dimen/_20dp" + android:textColor="@color/white" + android:textSize="@dimen/_30dp" + android:textStyle="bold" /> - + android:layout_weight="1" + android:progress="0" + android:secondaryProgress="60" /> + android:textSize="@dimen/_30dp" + android:textStyle="bold" /> + - - + android:orientation="horizontal" + android:paddingHorizontal="@dimen/_580dp"> - - - - - - - - - - - - - - - - - - - - - - - - - - + android:src="@drawable/new_forward_btn" />