From fe4bcbe2d8c24e7bd26837c567485c3b3bc5f96a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 3 Nov 2021 18:33:34 +0800 Subject: [PATCH] opt videoplayer --- .../hmi/ui/notice/NoticeCheckDialog.kt | 150 ++++++++---- .../hmi/ui/notice/NoticeTrafficDialog.java | 8 +- .../notice_dialog_check_with_accessory.xml | 38 +++- .../layout/notice_dialog_traffic_police.xml | 2 +- .../media/video/NoticeSimpleVideoPlayer.kt | 213 ++++++++++++++++++ .../notice_player_ic_circle_nor.png | Bin 0 -> 2382 bytes .../res/drawable-xhdpi/notice_video_pause.png | Bin 0 -> 315 bytes .../res/drawable-xhdpi/notice_video_play.png | Bin 0 -> 7096 bytes .../main/res/drawable/notice_video_pause.png | Bin 0 -> 6164 bytes .../main/res/drawable/notice_video_play.png | Bin 0 -> 7096 bytes .../src/main/res/drawable/seekbar_style.xml | 27 +++ .../src/main/res/layout/item_notice_video.xml | 112 +++++++++ .../utilcode/util/TimeTransformUtils.java | 30 +++ 13 files changed, 524 insertions(+), 56 deletions(-) create mode 100644 core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/NoticeSimpleVideoPlayer.kt create mode 100644 core/mogo-core-res/src/main/res/drawable-xhdpi/notice_player_ic_circle_nor.png create mode 100644 core/mogo-core-res/src/main/res/drawable-xhdpi/notice_video_pause.png create mode 100644 core/mogo-core-res/src/main/res/drawable-xhdpi/notice_video_play.png create mode 100644 core/mogo-core-res/src/main/res/drawable/notice_video_pause.png create mode 100644 core/mogo-core-res/src/main/res/drawable/notice_video_play.png create mode 100644 core/mogo-core-res/src/main/res/drawable/seekbar_style.xml create mode 100644 core/mogo-core-res/src/main/res/layout/item_notice_video.xml create mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/TimeTransformUtils.java diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt index 41165b2633..f8eb5d491c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt @@ -1,32 +1,28 @@ package com.mogo.eagle.core.function.hmi.ui.notice import android.content.Context +import android.graphics.Bitmap import android.text.TextUtils +import android.util.Log import android.view.View import android.widget.ImageView import android.widget.TextView import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer +import com.mogo.eagle.core.widget.media.video.NoticeSimpleVideoPlayer import com.mogo.module.common.dialog.BaseFloatDialog +import com.mogo.utils.BitmapHelper import com.mogo.utils.glide.GlideApp import com.mogo.utils.logger.Logger import com.shuyu.gsyvideoplayer.GSYVideoManager import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.cache.CacheFactory -import com.shuyu.gsyvideoplayer.cache.ProxyCacheManager -import com.shuyu.gsyvideoplayer.listener.GSYMediaPlayerListener -import com.shuyu.gsyvideoplayer.model.VideoOptionModel -import com.shuyu.gsyvideoplayer.player.IjkPlayerManager -import com.shuyu.gsyvideoplayer.player.PlayerFactory -import com.shuyu.gsyvideoplayer.utils.GSYVideoType -import tv.danmaku.ijk.media.player.IjkMediaPlayer -import java.util.* +import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack +import com.shuyu.gsyvideoplayer.video.base.GSYVideoView /** - * 点击查看对话框,需要做接口的请求 - * + * @brief 点击查看对话框 + * @author lixiaopeng */ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { @@ -35,9 +31,11 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { private var pushCheckTitle: TextView? = null private var pushCheckContent: TextView? = null private var pushImageView: ImageView? = null - private var pushVideo: SimpleVideoPlayer? = null + private var pushVideo: NoticeSimpleVideoPlayer? = null private val gsyVideoOptionBuilder = GSYVideoOptionBuilder() -// private var mLoading: ProgressBar? = null + private var playImageView: ImageView? = null + private var thumbnailImageView: ImageView? = null + private var mVideoUrl: String = "" init { setContentView(R.layout.notice_dialog_check_with_accessory) @@ -47,19 +45,28 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { pushCheckContent = findViewById(R.id.module_push_dialog_bottom_title) pushImageView = findViewById(R.id.notice_image) pushVideo = findViewById(R.id.notice_video_layout) -// mLoading = findViewById(R.id.loading) -// mLoading!!.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.notice_video_progressbar_loading_color), PorterDuff.Mode.MULTIPLY) + playImageView = findViewById(R.id.notice_video_play) + thumbnailImageView = findViewById(R.id.thumbnail_image) pushCheckClose?.setOnClickListener { + stopLive() dismiss() } + + playImageView!!.setOnClickListener { + if (pushVideo!!.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { /*播放中*/ + resume() + } else { + pause() + } + } + } /** * 展示详情页面 */ fun showCheckDialog(noticeNormal: NoticeNormalData) { - Logger.d("liyz", "------1--------") if (isShowing || noticeNormal == null) { return } @@ -72,18 +79,17 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { pushCheckContent?.text = noticeNormal.content if (!TextUtils.isEmpty(noticeNormal.imageUrl) && noticeNormal.fileType == 1) { - Logger.d("liyz", "------2--------") pushVideo?.visibility = View.GONE pushImageView?.visibility = View.VISIBLE pushImageView?.let { GlideApp.with(context!!).load(noticeNormal.imageUrl).into(it) } } if (!TextUtils.isEmpty(noticeNormal.videoUrl) && noticeNormal.fileType == 2) { - Logger.d("liyz", "------3--------") pushImageView?.visibility = View.GONE pushVideo?.visibility = View.VISIBLE //加载视频播放 - playLiveVideo(noticeNormal.videoUrl) + playVideo(noticeNormal.videoUrl) + mVideoUrl = noticeNormal.videoUrl } show() @@ -91,26 +97,19 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { /** - * 播放直播流,且开始心跳 + * 播放视频 */ - private fun playLiveVideo(videoUrl: String) { -// pushVideo?.setPlayListener(object : PlayListener { -// override fun onPlayEvent(event: Int) { -// Logger.d("liyz", "event ----- $event") -// if (event == SimpleVideoPlayer.PLAY_EVT_PLAY_LOADING) { -//// mLoading!!.visibility = View.VISIBLE -// } else if (event == SimpleVideoPlayer.PLAY_EVT_PLAY_BEGIN) { -//// mLoading!!.visibility = View.GONE -// } else if (event < 0) { -// stopLive() -//// mLoading!!.visibility = View.GONE -// } -// } -// }) - - gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG) - .build(pushVideo) - pushVideo!!.startButton.performClick() + private fun playVideo(videoUrl: String) { + try { + gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG) + .build(pushVideo) + pushVideo!!.startButton.performClick() + playImageView!!.visibility = View.GONE + thumbnailImageView!!.visibility = View.GONE + startVideoCallBack(videoUrl) + } catch (e: Exception) { + e.printStackTrace() + } } fun stopLive() { @@ -121,7 +120,78 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { } } - //播放完成的回调 TODO + /** + * 暂停 + */ + private fun pause() { + playImageView!!.visibility = View.VISIBLE + playImageView!!.setImageResource(R.drawable.notice_video_play) + thumbnailImageView!!.visibility = View.GONE + } + + /** + * 继续 + */ + private fun resume() { + playImageView!!.visibility = View.VISIBLE + playImageView!!.setImageResource(R.drawable.notice_video_pause) + thumbnailImageView!!.visibility = View.GONE + } + + /** + * 播放结束后 + */ + private fun complete(firstbitmap: Bitmap, path: String) { + thumbnailImageView!!.visibility = View.VISIBLE + thumbnailImageView!!.setImageBitmap(firstbitmap) + playImageView!!.setImageResource(R.drawable.notice_video_play) + playImageView!!.visibility = View.VISIBLE + } + + private fun startVideoCallBack(path: String) { + Thread(Runnable { + val firstBitmap = BitmapHelper.getVideoThumbnail(path) /*获取第一帧图*/ + pushVideo!!.setVideoAllCallBack(object : VideoAllCallBack { + override fun onAutoComplete(url: String, vararg objects: Any) { + complete(firstBitmap, path) + } + + override fun onClickResume(url: String, vararg objects: Any) { + thumbnailImageView!!.visibility = View.GONE + playImageView!!.visibility = View.GONE + } + + override fun onClickStop(url: String, vararg objects: Any) { + Log.d(TAG, "onClickStop") + } + + override fun onStartPrepared(url: String, vararg objects: Any) { + Log.d(TAG, "onStartPrepared") + } + + override fun onPrepared(url: String, vararg objects: Any) {} + override fun onClickStartIcon(url: String, vararg objects: Any) {} + override fun onClickStartError(url: String, vararg objects: Any) {} + override fun onClickStopFullscreen(url: String, vararg objects: Any) {} + override fun onClickResumeFullscreen(url: String, vararg objects: Any) {} + override fun onClickSeekbar(url: String, vararg objects: Any) {} + override fun onClickSeekbarFullscreen(url: String, vararg objects: Any) {} + override fun onEnterFullscreen(url: String, vararg objects: Any) {} + override fun onQuitFullscreen(url: String, vararg objects: Any) {} + override fun onQuitSmallWidget(url: String, vararg objects: Any) {} + override fun onEnterSmallWidget(url: String, vararg objects: Any) {} + override fun onTouchScreenSeekVolume(url: String, vararg objects: Any) {} + override fun onTouchScreenSeekPosition(url: String, vararg objects: Any) {} + override fun onTouchScreenSeekLight(url: String, vararg objects: Any) {} + override fun onPlayError(url: String, vararg objects: Any) {} + override fun onClickStartThumb(url: String, vararg objects: Any) {} + override fun onClickBlank(url: String, vararg objects: Any) {} + override fun onClickBlankFullscreen(url: String, vararg objects: Any) { + Log.d(TAG, "onClickBlankFullscreen") + } + }) + }).start() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java index 91a1e701c0..aeb413d3f1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java @@ -14,15 +14,11 @@ import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData; import com.mogo.eagle.core.function.hmi.R; import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer; import com.mogo.module.common.dialog.BaseFloatDialog; -import com.mogo.module.common.view.SpacesItemDecoration; import com.mogo.utils.BitmapHelper; -import com.mogo.utils.ResourcesHelper; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack; import com.shuyu.gsyvideoplayer.video.base.GSYVideoView; -import java.util.List; - /** * @author liujing * @description 描述 @@ -109,7 +105,7 @@ public class NoticeTrafficDialog extends BaseFloatDialog { * 继续 */ private void resume() { - playImageView.setImageResource(R.drawable.video_pause); + playImageView.setImageResource(R.drawable.notice_video_pause); playImageView.setVisibility(View.GONE); thumbnailImage.setVisibility(View.GONE); } @@ -120,7 +116,7 @@ public class NoticeTrafficDialog extends BaseFloatDialog { private void complete(Bitmap firstbitmap, String path) { thumbnailImage.setVisibility(View.VISIBLE); thumbnailImage.setImageBitmap(firstbitmap); - playImageView.setImageResource(R.drawable.video_play); + playImageView.setImageResource(R.drawable.notice_video_play); playImageView.setVisibility(View.VISIBLE); playImageView.setOnClickListener(v -> { startLive(); diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml index 4e1d752dc2..53afa2df29 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml @@ -38,6 +38,7 @@ android:layout_marginLeft="@dimen/dp_150" android:layout_marginRight="@dimen/dp_150" android:layout_marginBottom="@dimen/dp_56" + android:layout_marginTop="@dimen/dp_6" android:ellipsize="end" android:gravity="left" android:maxLines="2" @@ -63,7 +64,7 @@ app:layout_constraintTop_toBottomOf="@+id/module_push_dialog_acc_title" /> - - + + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + + android:src="@drawable/video_play" + android:visibility="gone" /> + start.setImageResource(R.drawable.notice_video_pause) + GSYVideoView.CURRENT_STATE_ERROR -> + start.setImageResource(R.drawable.notice_video_pause) + else -> start.setImageResource(R.drawable.notice_video_play) + } + } + + override fun setProgressAndTime( + progress: Int, + secProgress: Int, + currentTime: Int, + totalTime: Int, + forceChange: Boolean + ) { + super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange) + mBottomContainer?.visibility = View.VISIBLE + mProgressBar?.visibility = View.VISIBLE + start?.visibility = View.VISIBLE + fullscreen?.visibility = View.GONE + //时间显示 + currentTimeTextView?.text = TimeTransformUtils.stringForTime(currentTime) + totalTimeTextView?.text = TimeTransformUtils.stringForTime(totalTime) + + if (progress != 0) { + mProgressBar?.progress = progress + } + } + + fun setPlayListener(listener: PlayListener) { + this.playListener = listener + } + + override fun changeUiToCompleteShow() { + super.changeUiToCompleteShow() + Log.d("liyz", "changeUiToCompleteShow ------> ") + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun hideAllWidget() { + super.hideAllWidget() + Log.d("liyz", "hideAllWidget ------> ") + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToPrepareingClear() { + super.changeUiToPrepareingClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToPlayingBufferingClear() { + super.changeUiToPlayingBufferingClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + + } + + override fun changeUiToClear() { + super.changeUiToClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToCompleteClear() { + super.changeUiToCompleteClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun onAutoCompletion() { + super.onAutoCompletion() + mProgressBar?.progress = 0 + } + + override fun showWifiDialog() { + //直接播放,不显示WIFI对话框 + startPlayLogic() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + mProgressBar?.progress = 0 + mFullPauseBitmap = null + } + + override fun onClick(v: View?) { + super.onClick(v) + } + + override fun onCompletion() { + isPostBufferUpdate = false + } + + override fun onSurfaceUpdated(surface: Surface) { + super.onSurfaceUpdated(surface) + if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) { + mThumbImageViewLayout.visibility = View.INVISIBLE + } + } + + override fun onPrepared() { + super.onPrepared() + playListener?.onPlayEvent(PLAY_EVT_PLAY_LOADING) + } + + private var isPostBufferUpdate = false + + override fun onBufferingUpdate(percent: Int) { + super.onBufferingUpdate(percent) + if (!isPostBufferUpdate && percent == 0) { + isPostBufferUpdate = true + playListener?.onPlayEvent(PLAY_EVT_PLAY_BEGIN) + } + } + + override fun onError(what: Int, extra: Int) { + super.onError(what, extra) + playListener?.onPlayEvent(PLAY_EVT_PLAY_ERROR) + isPostBufferUpdate = false + } + + override fun setViewShowState(view: View?, visibility: Int) { + if (view === mThumbImageViewLayout && visibility != View.VISIBLE) { + return + } + super.setViewShowState(view, visibility) + } + + override fun onSurfaceAvailable(surface: Surface) { + super.onSurfaceAvailable(surface) + mProgressBar?.visibility = View.GONE + if (GSYVideoType.getRenderType() != GSYVideoType.TEXTURE) { + if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) { + mThumbImageViewLayout.visibility = View.INVISIBLE + } + } + } +} \ No newline at end of file diff --git a/core/mogo-core-res/src/main/res/drawable-xhdpi/notice_player_ic_circle_nor.png b/core/mogo-core-res/src/main/res/drawable-xhdpi/notice_player_ic_circle_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..e34e824da69ea003db4d712302d16d536a6e1925 GIT binary patch literal 2382 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 A!TVmf7v<+!aVUksU(M v5ypzEdG-n=ab~NfOkEi6q?35Ig*Zd_=TviK{4$*w4RW}rtDnm{r-UW|_QYbi literal 0 HcmV?d00001 diff --git a/core/mogo-core-res/src/main/res/drawable-xhdpi/notice_video_play.png b/core/mogo-core-res/src/main/res/drawable-xhdpi/notice_video_play.png new file mode 100644 index 0000000000000000000000000000000000000000..4c733621b615f90a4e67a98d998d88cf1c5e72b6 GIT binary patch literal 7096 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 F{sV=E);|CM literal 0 HcmV?d00001 diff --git a/core/mogo-core-res/src/main/res/drawable/notice_video_play.png b/core/mogo-core-res/src/main/res/drawable/notice_video_play.png new file mode 100644 index 0000000000000000000000000000000000000000..4c733621b615f90a4e67a98d998d88cf1c5e72b6 GIT binary patch literal 7096 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 S5Bu-0nX;m~LZuum + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-res/src/main/res/layout/item_notice_video.xml b/core/mogo-core-res/src/main/res/layout/item_notice_video.xml new file mode 100644 index 0000000000..41b1cf8ec9 --- /dev/null +++ b/core/mogo-core-res/src/main/res/layout/item_notice_video.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/TimeTransformUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/TimeTransformUtils.java new file mode 100644 index 0000000000..6c2848c71a --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/TimeTransformUtils.java @@ -0,0 +1,30 @@ +package com.mogo.eagle.core.utilcode.util; + +import java.util.Formatter; +import java.util.Locale; + +/** + * author: lixiaopeng + * desc : 时间转换 + */ +public final class TimeTransformUtils { + + public static String stringForTime(int timeMs) { + if (timeMs <= 0 || timeMs >= 24 * 60 * 60 * 1000) { + return "00:00"; + } + int totalSeconds = timeMs / 1000; + int seconds = totalSeconds % 60; + int minutes = (totalSeconds / 60) % 60; + int hours = totalSeconds / 3600; + StringBuilder stringBuilder = new StringBuilder(); + Formatter mFormatter = new Formatter(stringBuilder, Locale.getDefault()); + if (hours > 0) { + return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString(); + } else { + return mFormatter.format("%02d:%02d", minutes, seconds).toString(); + } + } + + +}