123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- package com.edufound.video.presenter;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_IO;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_MALFORMED;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_SERVER_DIED;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_TIMED_OUT;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_UNKNOWN;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_ERROR_UNSUPPORTED;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_INFO_BUFFERING_END;
- import static tv.danmaku.ijk.media.player.IMediaPlayer.MEDIA_INFO_BUFFERING_START;
- import android.net.Uri;
- import android.os.Message;
- import android.view.GestureDetector;
- import android.view.KeyEvent;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.widget.FrameLayout;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.SeekBar;
- import android.widget.TextView;
- import androidx.annotation.NonNull;
- import com.edufound.base.BasePresenter;
- import com.edufound.base.util.EfunboxUtil;
- import com.edufound.base.util.GlideUtils;
- import com.edufound.base.util.Logger;
- import com.edufound.video.R;
- import com.edufound.video.bean.VideoData;
- import com.edufound.video.listener.MobileVideoOnGestureListener;
- import com.edufound.video.model.VideoModel;
- import com.edufound.video.util.VideoConsts;
- import com.edufound.video.view.VideoActivityView;
- import com.hjq.toast.Toaster;
- import tv.danmaku.ijk.media.player.IMediaPlayer;
- public class VideoPresenter extends BasePresenter<VideoModel, VideoActivityView> {
- VideoData mVideoData;
- FrameLayout videoController;
- ImageView mControllerTopBack;
- FrameLayout mControllerCenter;
- LinearLayout mControllerTop;
- LinearLayout mControllerBottom;
- ImageView mPosterImage;
- TextView mTextTitle;
- TextView mTextTime;
- SeekBar mSeekBar;
- ImageView mStatusBtnImg;
- ImageView mVideoLoading;
- boolean controllerShow = true;
- GestureDetector mGestureDetector;
- MobileVideoOnGestureListener mMobileGesListener;
- @Override
- protected void onViewDestroy() {
- getView().getRootView().removeAllViews();
- removeHandler();
- videoHandler = null;
- videoController = null;
- }
- public void getVideoData() {
- mVideoData = getView().getBundle().getParcelable("video_data");
- mVideoData.toString();
- // mVideoData = new VideoData();
- // mVideoData.setVideoName("22222222222222222");
- // mVideoData.setVideoImg("https://yfklxt-image.ai160.com/reader/20210630/1625033515503602.jpg");
- // mVideoData.setVideoUrl("https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218114723HDu3hhxqIT.mp4");
- setVideoController();
- }
- private void setVideoController() {
- LayoutInflater layoutInflater = LayoutInflater.from(getView().getBaseActivity());
- videoController = (FrameLayout) layoutInflater.inflate(R.layout.video_controller, null);
- mControllerTop = videoController.findViewById(R.id.video_controller_top);
- mControllerTopBack = videoController.findViewById(R.id.video_controller_top_back);
- mControllerCenter = videoController.findViewById(R.id.video_controller_center);
- mControllerBottom = videoController.findViewById(R.id.video_controller_bottom);
- mPosterImage = videoController.findViewById(R.id.video_controller_poster);
- mTextTitle = videoController.findViewById(R.id.video_controller_title);
- mTextTime = videoController.findViewById(R.id.video_controller_time);
- mSeekBar = videoController.findViewById(R.id.video_controller_seekbar);
- mStatusBtnImg = videoController.findViewById(R.id.video_controller_status_image_btn);
- mVideoLoading = videoController.findViewById(R.id.video_controller_loading);
- getView().getRootView().addView(videoController);
- GlideUtils.loadImageSizeKipMemoryCache(getView().getBaseActivity(), mVideoData.getVideoImg(), mPosterImage);
- mTextTitle.setText(mVideoData.getVideoName());
- getView().getVideoView().setVideoURI(Uri.parse(mVideoData.getVideoUrl()));
- getView().getVideoView().start();
- initListener();
- }
- private void initListener() {
- mControllerTopBack.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- getView().getBaseActivity().finish();
- }
- });
- mStatusBtnImg.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- playAndPause();
- }
- });
- mMobileGesListener = new MobileVideoOnGestureListener(getView(), new MobileVideoOnGestureListener.ListenerCallBack() {
- @Override
- public boolean onDoubleTap(MotionEvent e) {
- playAndPause();
- return true;
- }
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- if (controllerShow) {
- hideController();
- } else {
- showController();
- }
- return true;
- }
- @Override
- public void changeVolume(int volume) {
- Toaster.showShort("音量:" + volume);
- }
- @Override
- public void changeBrightness(float brightness) {
- Toaster.showShort("亮度:" + brightness);
- }
- });
- mGestureDetector = new GestureDetector(getView().getBaseActivity(), mMobileGesListener);
- mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
- mTextTime.setText(EfunboxUtil.getTime(mSeekBar.getProgress()) + "/" + EfunboxUtil.getTime(mSeekBar.getMax()));
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- videoHandler.removeMessages(VideoConsts.VIDEO_SET_SEEKBAR_INFO);
- videoHandler.removeMessages(VideoConsts.VIDEO_CONTROLLER_HIDE);
- }
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- seekBarChangeOver();
- showController();
- }
- });
- }
- //处理TV端按键
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- return true;
- }
- return false;
- }
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- removeHandler();
- getView().getBaseActivity().finish();
- return true;
- }
- return false;
- }
- public void onCompletion(IMediaPlayer iMediaPlayer) {
- playerCompletion();
- }
- public boolean onError(IMediaPlayer iMediaPlayer, int what, int extra) {
- switch (what) {
- case MEDIA_ERROR_UNKNOWN:
- Logger.e("MEDIA_ERROR_UNKNOWN");
- break;
- case MEDIA_ERROR_SERVER_DIED:
- Logger.e("MEDIA_ERROR_SERVER_DIED");
- break;
- case MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
- Logger.e("MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK");
- break;
- case MEDIA_ERROR_IO:
- Logger.e("MEDIA_ERROR_IO");
- break;
- case MEDIA_ERROR_MALFORMED:
- Logger.e("MEDIA_ERROR_MALFORMED");
- break;
- case MEDIA_ERROR_UNSUPPORTED:
- Logger.e("MEDIA_ERROR_UNSUPPORTED");
- break;
- case MEDIA_ERROR_TIMED_OUT:
- Logger.e("MEDIA_ERROR_TIMED_OUT");
- break;
- }
- return true;
- }
- public boolean onInfo(IMediaPlayer iMediaPlayer, int what, int extra) {
- switch (what) {
- case MEDIA_INFO_BUFFERING_START:
- mVideoLoading.setVisibility(View.VISIBLE);
- break;
- case MEDIA_INFO_BUFFERING_END:
- mVideoLoading.postDelayed(new Runnable() {
- @Override
- public void run() {
- mVideoLoading.setVisibility(View.GONE);
- }
- }, 500);
- break;
- }
- return false;
- }
- public void onSeekComplete(IMediaPlayer iMediaPlayer) {
- showController();
- videoHandler.sendEmptyMessage(VideoConsts.VIDEO_SET_SEEKBAR_INFO);
- getView().getVideoView().start();
- }
- public void onPrepared(IMediaPlayer iMediaPlayer) {
- mSeekBar.setMax((int) iMediaPlayer.getDuration());
- mTextTime.setText(EfunboxUtil.getTime(mSeekBar.getProgress()) + "/" + EfunboxUtil.getTime(mSeekBar.getMax()));
- mPosterImage.postDelayed(new Runnable() {
- @Override
- public void run() {
- mPosterImage.setVisibility(View.GONE);
- }
- }, 500);
- videoHandler.sendEmptyMessage(VideoConsts.VIDEO_SET_SEEKBAR_INFO);
- showController();
- }
- android.os.Handler videoHandler = new android.os.Handler(new android.os.Handler.Callback() {
- @Override
- public boolean handleMessage(@NonNull Message message) {
- switch (message.what) {
- case VideoConsts.VIDEO_SET_SEEKBAR_INFO:
- mSeekBar.setMax(getView().getVideoView().getDuration());
- mSeekBar.setProgress(getView().getVideoView().getCurrentPosition());
- mTextTime.setText(EfunboxUtil.getTime(getView().getVideoView().getCurrentPosition()) + "/" + EfunboxUtil.getTime(mSeekBar.getMax()));
- videoHandler.sendEmptyMessageDelayed(VideoConsts.VIDEO_SET_SEEKBAR_INFO, 1000);
- break;
- case VideoConsts.VIDEO_CONTROLLER_SHOW:
- showController();
- break;
- case VideoConsts.VIDEO_CONTROLLER_HIDE:
- hideController();
- break;
- }
- return false;
- }
- });
- private void removeHandler() {
- videoHandler.removeMessages(VideoConsts.VIDEO_SET_SEEKBAR_INFO);
- videoHandler.removeMessages(VideoConsts.VIDEO_CONTROLLER_SHOW);
- videoHandler.removeMessages(VideoConsts.VIDEO_CONTROLLER_HIDE);
- }
- private void hideController() {
- controllerShow = false;
- mControllerTop.setVisibility(View.GONE);
- mControllerBottom.setVisibility(View.GONE);
- }
- private void showController() {
- controllerShow = true;
- mControllerTop.setVisibility(View.VISIBLE);
- mControllerBottom.setVisibility(View.VISIBLE);
- videoHandler.removeMessages(VideoConsts.VIDEO_CONTROLLER_HIDE);
- videoHandler.sendEmptyMessageDelayed(VideoConsts.VIDEO_CONTROLLER_HIDE, 5000);
- }
- private void playAndPause() {
- if (getView().getVideoView().isPlaying()) {
- getView().getVideoView().pause();
- mVideoLoading.setVisibility(View.GONE);
- mStatusBtnImg.setBackgroundResource(R.drawable.player_little_icon_play);
- } else {
- getView().getVideoView().start();
- mStatusBtnImg.setBackgroundResource(R.drawable.player_little_icon_pause);
- }
- showController();
- }
- void seekBarChangeOver() {
- getView().getVideoView().pause();
- if (mSeekBar.getProgress() > mSeekBar.getMax() - 2000) {
- playerCompletion();
- return;
- }
- if (mSeekBar.getProgress() <= 0) {
- getView().getVideoView().seekTo(0);
- } else {
- getView().getVideoView().seekTo(mSeekBar.getProgress());
- }
- }
- private void playerCompletion() {
- //播放完成之后处理方法
- removeHandler();
- getView().getBaseActivity().finish();
- }
- public boolean onTouchEvent(MotionEvent event) {
- mGestureDetector.onTouchEvent(event);
- return true;
- }
- }
|