desc:播放页面按键处理

main
xiaowusky 2 years ago
parent d8d4b1c125
commit eb1be18330

@ -30,7 +30,7 @@ import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.GestureDetector; import android.view.GestureDetector;
import android.view.MotionEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.WindowManager; import android.view.WindowManager;
@ -191,29 +191,45 @@ public class ProVideoActivity extends AppCompatActivity {
mVideoView.start(); mVideoView.start();
GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() { // GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
// @Override
// public boolean onSingleTapConfirmed(MotionEvent e) {
// if (mVideoView.isInPlaybackState()) {
// mVideoView.toggleMediaControlsVisiblity();
// return true;
// }
//
// return true;
// }
//
// @Override
// public boolean onDoubleTap(MotionEvent e) {
// return true;
// }
// };
//
// detector = new GestureDetector(this, listener);
//
// mVideoView.setOnTouchListener((v, event) -> {
// detector.onTouchEvent(event);
// return true;
// });
}
@Override @Override
public boolean onSingleTapConfirmed(MotionEvent e) { public boolean onKeyDown(int keyCode, KeyEvent event) {
if (mVideoView.isInPlaybackState()) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
mVideoView.toggleMediaControlsVisiblity(); mVideoView.toggleMediaControlsVisiblity();
return true; return true;
} } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mediaController.rewindVideo();
return true; return true;
} } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
mediaController.fastVideo();
@Override
public boolean onDoubleTap(MotionEvent e) {
return true; return true;
} else {
return super.onKeyDown(keyCode, event);
} }
};
detector = new GestureDetector(this, listener);
mVideoView.setOnTouchListener((v, event) -> {
detector.onTouchEvent(event);
return true;
});
} }
@Override @Override

@ -33,30 +33,9 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu
super(context, attrs, defStyleAttr, defStyleRes); super(context, attrs, defStyleAttr, defStyleRes);
} }
/**
* ================ super override ================
*/
public void startRecord(String path, int seconds) {
}
public void stopRecord() {
}
/** /**
* ================ FullScreenAbleMediaPlayerControl ================ * ================ FullScreenAbleMediaPlayerControl ================
*/ */
@Override
public boolean isFullScreen() {
if (getContext() instanceof ProVideoActivity) {
ProVideoActivity pro = (ProVideoActivity) getContext();
return pro.isLandscape();
}
return false;
}
@Override @Override
public void toggleFullScreen() { public void toggleFullScreen() {
if (getContext() instanceof ProVideoActivity) { if (getContext() instanceof ProVideoActivity) {
@ -64,90 +43,4 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu
pro.onChangeOrientation(null); pro.onChangeOrientation(null);
} }
} }
@Override
public boolean recordEnable() {
Uri uri = null;
if (uri == null)
return false;
if (uri.getScheme() == null)
return false;
return !uri.getScheme().equals("file");
}
@Override
public boolean speedCtrlEnable() {
Uri uri = null;
if (uri == null)
return false;
if (uri.getScheme() == null)
return true;
return uri.getScheme().equals("file");
}
@Override
public boolean isRecording() {
if (mMediaPlayer == null) {
return false;
}
return !TextUtils.isEmpty(mRecordPath);
}
@Override
public void toggleRecord() {
}
@Override
public float getSpeed() {
if (mMediaPlayer == null) {
return 1.0f;
}
if (mMediaPlayer instanceof IjkMediaPlayer) {
IjkMediaPlayer player = (IjkMediaPlayer) mMediaPlayer;
return player.getSpeed(0f);
}
return 1.0f;
}
@Override
public void setSpeed(float speed) {
if (mMediaPlayer == null) {
return;
}
if (mMediaPlayer instanceof IjkMediaPlayer) {
IjkMediaPlayer player = (IjkMediaPlayer) mMediaPlayer;
player.setSpeed(speed);
}
}
@Override
public void takePicture() {
}
@Override
public void toggleMode() {
if (getContext() instanceof ProVideoActivity) {
ProVideoActivity pro = (ProVideoActivity) getContext();
pro.onChangePlayMode(null);
}
}
@Override
public boolean isCompleted() {
// if (mMediaPlayer instanceof IjkMediaPlayer) {
// IjkMediaPlayer player = (IjkMediaPlayer) mMediaPlayer;
// return player.isCompleted();
// }
return false;
}
} }

@ -462,6 +462,14 @@ public class VideoControllerView extends FrameLayout implements IMediaController
} }
} }
public void fastVideo() {
mFastButton.performClick();
}
public void rewindVideo() {
mRewindButton.performClick();
}
/* /*
* / * /
* */ * */
@ -473,33 +481,8 @@ public class VideoControllerView extends FrameLayout implements IMediaController
if (mPlayer.isPlaying()) { if (mPlayer.isPlaying()) {
mPlayer.pause(); mPlayer.pause();
} else { } else {
boolean isCompleted = false;
if (this.mPlayer instanceof FullScreenAbleMediaPlayerControl) {
FullScreenAbleMediaPlayerControl mPlayer = (FullScreenAbleMediaPlayerControl) this.mPlayer;
isCompleted = mPlayer.isCompleted();
}
mPlayer.start(); mPlayer.start();
if (isCompleted) {
int duration = mPlayer.getDuration();
final int progress = mProgress.getProgress();
Log.d(TAG, String.valueOf(duration));
mSeekingPending = new Runnable() {
@Override
public void run() {
if (mPlayer != null) {
mPlayer.seekTo(progress);
}
} }
};
postDelayed(mSeekingPending, 500);
}
}
updatePausePlay(); updatePausePlay();
} }
@ -588,27 +571,7 @@ public class VideoControllerView extends FrameLayout implements IMediaController
} }
public interface FullScreenAbleMediaPlayerControl extends MediaController.MediaPlayerControl { public interface FullScreenAbleMediaPlayerControl extends MediaController.MediaPlayerControl {
boolean isFullScreen();
void toggleFullScreen(); void toggleFullScreen();
boolean recordEnable();
boolean speedCtrlEnable();
boolean isRecording();
void toggleRecord();
float getSpeed();
void setSpeed(float speed);
void takePicture();
void toggleMode();
boolean isCompleted();
} }
private static class MessageHandler extends Handler { private static class MessageHandler extends Handler {

@ -12,13 +12,6 @@
android:layout_gravity="center" android:layout_gravity="center"
android:background="#000000"> android:background="#000000">
<!--<com.yinuo.safetywatcher.player.ProVideoView
android:id="@+id/video_view2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
android:visibility="gone" />-->
<com.yinuo.safetywatcher.player.ProVideoView <com.yinuo.safetywatcher.player.ProVideoView
android:id="@+id/video_view" android:id="@+id/video_view"
android:layout_width="match_parent" android:layout_width="match_parent"

@ -147,7 +147,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
mAppContext = context.getApplicationContext(); mAppContext = context.getApplicationContext();
mSettings = new Settings(mAppContext); mSettings = new Settings(mAppContext);
initBackground();
initRenders(); initRenders();
mVideoWidth = 0; mVideoWidth = 0;
@ -940,75 +939,10 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
setRender(mCurrentRender); setRender(mCurrentRender);
} }
public int toggleRender() {
mCurrentRenderIndex++;
mCurrentRenderIndex %= mAllRenders.size();
mCurrentRender = mAllRenders.get(mCurrentRenderIndex);
setRender(mCurrentRender);
return mCurrentRender;
}
public static String getRenderText(Context context, int render) {
String text;
// switch (render) {
// case RENDER_NONE:
// text = context.getString(R.string.VideoView_render_none);
// break;
// case RENDER_SURFACE_VIEW:
// text = context.getString(R.string.VideoView_render_surface_view);
// break;
// case RENDER_TEXTURE_VIEW:
// text = context.getString(R.string.VideoView_render_texture_view);
// break;
// default:
// text = context.getString(R.string.N_A);
// break;
// }
return "getRenderText";
}
//-------------------------
// Extend: Player
//-------------------------
public int togglePlayer() {
if (mMediaPlayer != null)
mMediaPlayer.release();
if (mRenderView != null)
mRenderView.getView().invalidate();
openVideo();
return mSettings.getPlayer();
}
public static String getPlayerText(Context context, int player) {
// String text;
// switch (player) {
// case Settings.PV_PLAYER__AndroidMediaPlayer:
// text = context.getString(R.string.VideoView_player_AndroidMediaPlayer);
// break;
// case Settings.PV_PLAYER__IjkMediaPlayer:
// text = context.getString(R.string.VideoView_player_IjkMediaPlayer);
// break;
// case Settings.PV_PLAYER__IjkExoMediaPlayer:
// text = context.getString(R.string.VideoView_player_IjkExoMediaPlayer);
// break;
// default:
// text = context.getString(R.string.N_A);
// break;
// }
return "getPlayerText";
}
public IMediaPlayer createPlayer(int playerType) { public IMediaPlayer createPlayer(int playerType) {
IMediaPlayer mediaPlayer = null; IMediaPlayer mediaPlayer = null;
switch (playerType) { switch (playerType) {
// case Settings.PV_PLAYER__IjkExoMediaPlayer: {
// IjkExoMediaPlayer IjkExoMediaPlayer = new IjkExoMediaPlayer(mAppContext);
// mediaPlayer = IjkExoMediaPlayer;
// }
// break;
case Settings.PV_PLAYER__AndroidMediaPlayer: { case Settings.PV_PLAYER__AndroidMediaPlayer: {
AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer(); AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer();
mediaPlayer = androidMediaPlayer; mediaPlayer = androidMediaPlayer;
@ -1072,180 +1006,4 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
return mediaPlayer; return mediaPlayer;
} }
//-------------------------
// Extend: Background
//-------------------------
private boolean mEnableBackgroundPlay = false;
private void initBackground() {
// mEnableBackgroundPlay = mSettings.getEnableBackgroundPlay();
// if (mEnableBackgroundPlay) {
// MediaPlayerService.intentToStart(getContext());
// mMediaPlayer = MediaPlayerService.getMediaPlayer();
// if (mHudViewHolder != null)
// mHudViewHolder.setMediaPlayer(mMediaPlayer);
// }
}
public boolean isBackgroundPlayEnabled() {
return mEnableBackgroundPlay;
}
// public void enterBackground() {
// MediaPlayerService.setMediaPlayer(mMediaPlayer);
// }
//
// public void stopBackgroundPlay() {
// MediaPlayerService.setMediaPlayer(null);
// }
//-------------------------
// Extend: Background
//-------------------------
// public void showMediaInfo() {
// if (mMediaPlayer == null)
// return;
//
// int selectedVideoTrack = MediaPlayerCompat.getSelectedTrack(mMediaPlayer, ITrackInfo.MEDIA_TRACK_TYPE_VIDEO);
// int selectedAudioTrack = MediaPlayerCompat.getSelectedTrack(mMediaPlayer, ITrackInfo.MEDIA_TRACK_TYPE_AUDIO);
// int selectedSubtitleTrack = MediaPlayerCompat.getSelectedTrack(mMediaPlayer, ITrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT);
//
// TableLayoutBinder builder = new TableLayoutBinder(getContext());
// builder.appendSection(R.string.mi_player);
// builder.appendRow2(R.string.mi_player, MediaPlayerCompat.getName(mMediaPlayer));
// builder.appendSection(R.string.mi_media);
// builder.appendRow2(R.string.mi_resolution, buildResolution(mVideoWidth, mVideoHeight, mVideoSarNum, mVideoSarDen));
// builder.appendRow2(R.string.mi_length, buildTimeMilli(mMediaPlayer.getDuration()));
//
// ITrackInfo trackInfos[] = mMediaPlayer.getTrackInfo();
// if (trackInfos != null) {
// int index = -1;
// for (ITrackInfo trackInfo : trackInfos) {
// index++;
//
// int trackType = trackInfo.getTrackType();
// if (index == selectedVideoTrack) {
// builder.appendSection(getContext().getString(R.string.mi_stream_fmt1, index) + " " + getContext().getString(R.string.mi__selected_video_track));
// } else if (index == selectedAudioTrack) {
// builder.appendSection(getContext().getString(R.string.mi_stream_fmt1, index) + " " + getContext().getString(R.string.mi__selected_audio_track));
// } else if (index == selectedSubtitleTrack) {
// builder.appendSection(getContext().getString(R.string.mi_stream_fmt1, index) + " " + getContext().getString(R.string.mi__selected_subtitle_track));
// } else {
// builder.appendSection(getContext().getString(R.string.mi_stream_fmt1, index));
// }
// builder.appendRow2(R.string.mi_type, buildTrackType(trackType));
// builder.appendRow2(R.string.mi_language, buildLanguage(trackInfo.getLanguage()));
//
// IMediaFormat mediaFormat = trackInfo.getFormat();
// if (mediaFormat == null) {
// } else if (mediaFormat instanceof IjkMediaFormat) {
// switch (trackType) {
// case ITrackInfo.MEDIA_TRACK_TYPE_VIDEO:
// builder.appendRow2(R.string.mi_codec, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CODEC_LONG_NAME_UI));
// builder.appendRow2(R.string.mi_profile_level, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CODEC_PROFILE_LEVEL_UI));
// builder.appendRow2(R.string.mi_pixel_format, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CODEC_PIXEL_FORMAT_UI));
// builder.appendRow2(R.string.mi_resolution, mediaFormat.getString(IjkMediaFormat.KEY_IJK_RESOLUTION_UI));
// builder.appendRow2(R.string.mi_frame_rate, mediaFormat.getString(IjkMediaFormat.KEY_IJK_FRAME_RATE_UI));
// builder.appendRow2(R.string.mi_bit_rate, mediaFormat.getString(IjkMediaFormat.KEY_IJK_BIT_RATE_UI));
// break;
// case ITrackInfo.MEDIA_TRACK_TYPE_AUDIO:
// builder.appendRow2(R.string.mi_codec, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CODEC_LONG_NAME_UI));
// builder.appendRow2(R.string.mi_profile_level, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CODEC_PROFILE_LEVEL_UI));
// builder.appendRow2(R.string.mi_sample_rate, mediaFormat.getString(IjkMediaFormat.KEY_IJK_SAMPLE_RATE_UI));
// builder.appendRow2(R.string.mi_channels, mediaFormat.getString(IjkMediaFormat.KEY_IJK_CHANNEL_UI));
// builder.appendRow2(R.string.mi_bit_rate, mediaFormat.getString(IjkMediaFormat.KEY_IJK_BIT_RATE_UI));
// break;
// default:
// break;
// }
// }
// }
// }
//
// AlertDialog.Builder adBuilder = builder.buildAlertDialogBuilder();
// adBuilder.setTitle(R.string.media_information);
// adBuilder.setNegativeButton(R.string.close, null);
// adBuilder.show();
// }
private String buildResolution(int width, int height, int sarNum, int sarDen) {
StringBuilder sb = new StringBuilder();
sb.append(width);
sb.append(" x ");
sb.append(height);
if (sarNum > 1 || sarDen > 1) {
sb.append("[");
sb.append(sarNum);
sb.append(":");
sb.append(sarDen);
sb.append("]");
}
return sb.toString();
}
private String buildTimeMilli(long duration) {
long total_seconds = duration / 1000;
long hours = total_seconds / 3600;
long minutes = (total_seconds % 3600) / 60;
long seconds = total_seconds % 60;
if (duration <= 0) {
return "--:--";
}
if (hours >= 100) {
return String.format(Locale.US, "%d:%02d:%02d", hours, minutes, seconds);
} else if (hours > 0) {
return String.format(Locale.US, "%02d:%02d:%02d", hours, minutes, seconds);
} else {
return String.format(Locale.US, "%02d:%02d", minutes, seconds);
}
}
private String buildTrackType(int type) {
// Context context = getContext();
// switch (type) {
// case ITrackInfo.MEDIA_TRACK_TYPE_VIDEO:
// return context.getString(R.string.TrackType_video);
// case ITrackInfo.MEDIA_TRACK_TYPE_AUDIO:
// return context.getString(R.string.TrackType_audio);
// case ITrackInfo.MEDIA_TRACK_TYPE_SUBTITLE:
// return context.getString(R.string.TrackType_subtitle);
// case ITrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT:
// return context.getString(R.string.TrackType_timedtext);
// case ITrackInfo.MEDIA_TRACK_TYPE_METADATA:
// return context.getString(R.string.TrackType_metadata);
// case ITrackInfo.MEDIA_TRACK_TYPE_UNKNOWN:
// default:
// return context.getString(R.string.TrackType_unknown);
// }
return "buildTrackType";
}
private String buildLanguage(String language) {
if (TextUtils.isEmpty(language))
return "und";
return language;
}
public ITrackInfo[] getTrackInfo() {
if (mMediaPlayer == null)
return null;
return mMediaPlayer.getTrackInfo();
}
public void selectTrack(int stream) {
MediaPlayerCompat.selectTrack(mMediaPlayer, stream);
}
public void deselectTrack(int stream) {
MediaPlayerCompat.deselectTrack(mMediaPlayer, stream);
}
public int getSelectedTrack(int trackType) {
return MediaPlayerCompat.getSelectedTrack(mMediaPlayer, trackType);
}
} }

Loading…
Cancel
Save