package com.yidianling.course.coursePlay import android.annotation.SuppressLint import android.content.Context import android.os.Handler import android.os.PowerManager import android.view.View import android.widget.RelativeLayout import com.dou361.ijkplayer.widget.PlayStateParams import com.dou361.ijkplayer.widget.PlayerView import com.ydl.media.audio.utils.PlayProgressUtil import com.ydl.media.view.PlayTypeEnum import com.ydl.media.view.PlayerFloatHelper import com.ydl.ydl_image.module.GlideApp import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.view.dialog.CommonDialog import com.yidianling.course.R import com.yidianling.course.bean.CourseExtraBean import com.yidianling.course.bean.CourseMediaBean import tv.danmaku.ijk.media.player.IMediaPlayer import java.text.SimpleDateFormat import java.util.* /** * 课程播放器的item * Created by harvie on 2017/6/26 0026. */ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface { //播放列表 private var playList: ArrayList<CourseMediaBean> = ArrayList() private var courseExtra: CourseExtraBean? = null var activity: CoursePlayActivity? = null var videoUrl: String? = null //播放模式 var playMoudle = 0 //默认为0 音频播放 1视频播放 var timer = Timer() var index = 0 private var isVideoPlaying = true private var mHandler = Handler() var hasEnsureNetStatus = false private val formatter = SimpleDateFormat("mm:ss", Locale.getDefault()) private var wakeLock: PowerManager.WakeLock? = null companion object { fun create(activity: CoursePlayActivity, playType: Int): CoursePlayItemViewVideo { return CoursePlayItemViewVideo(activity, playType) } } @SuppressLint("InvalidWakeLockTag") private constructor(context: CoursePlayActivity, playMoudle: Int) : super(context) { this.playMoudle = playMoudle View.inflate(context, R.layout.course_view_course_play_item, this) activity = context initView() wakeLock = (activity!!.getSystemService(Context.POWER_SERVICE) as PowerManager) .newWakeLock( PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.ON_AFTER_RELEASE, "CoursePlayItemViewVideo" ) } override fun onNewIntent() { } fun initView() { findViewById<View>(R.id.simple_player_settings_container).visibility = View.GONE findViewById<View>(R.id.app_video_center_box).visibility = View.GONE // setListener() //开启定时器实时记录播放位置 startTimer() } private fun startTimer() { timer?.schedule(object : TimerTask() { override fun run() { if (isVideoPlaying) { var time = activity?.videoView?.currentPosition ?: 0 if (time < 3000) return PlayProgressUtil.saveProgress(context, videoUrl, time) } } }, 1000, 1000) } //设置监听事件 private fun setListener() { } private fun playNext() { // var size: Int = playList.size // if ((size - 1) > bean?.attachmentIndex ?: 0) { // //这里请勿给index先赋值,判断可播放后会自动赋值 // val index = bean?.attachmentIndex ?: 0 // play(index!! + 1, true) // UtilH.saveProgress(activity, playList[index].playUrl, 0); // } } override fun onResume() { if (wakeLock != null) { wakeLock!!.acquire() } activity?.videoView?.onResume() var hisTime1 = PlayProgressUtil.getProgress(context, videoUrl) activity?.videoView?.seekTo(hisTime1) } override fun onPause() { if (wakeLock != null) { if (wakeLock!!.isHeld) { wakeLock!!.release() } } } /** * 播放音频 * index 播放下标 */ fun play(index: Int) { this.index = index var canPlay = false //判断当前课程是否试听 if (playList[index].isDemo) { canPlay = true } else { //非试听 if (courseExtra!!.isBuy) { //已购买 canPlay = true } else { //未购买,判断是否是试听课程 //即未购买,也不是试听,弹窗提示 CommonDialog(activity) .setMessage("\n购买课程,获取完整课程内容\n") .setLeftOnclick("放弃") { } .setRightClick("购买") { //跳转支付页 activity?.addCourseOrder() } .setCancelAble(false) .show() } } if (canPlay) { PlayerFloatHelper.playingType = PlayTypeEnum.PLAY_TYPE_COURSE var url = playList[index].url // url = url.replace("https", "http") videoUrl = url var hisTime = PlayProgressUtil.getProgress(context, url) try { activity?.videoView = PlayerView(activity) .setScaleType(PlayStateParams.fitparent) .hideMenu(true) .hideRotation(true) .setNetWorkTypeTie(!hasEnsureNetStatus) .hideBack(true) .hideSteam(true) .setAutoReConnect(true, 3) .forbidTouch(false) .setOnInfoListener(object : IMediaPlayer.OnInfoListener { override fun onInfo(mp: IMediaPlayer, what: Int, extra: Int): Boolean { LogUtil.e("课程播放--状态-$what") if (what == PlayStateParams.MEDIA_INFO_VIDEO_INTERRUPT) { activity?.videoView?.startPlay() } if (what == PlayStateParams.STATE_PAUSED) { this@CoursePlayItemViewVideo.findViewById<View>(R.id.rl_play_pause_layout) .visibility = View.VISIBLE } else { this@CoursePlayItemViewVideo.findViewById<View>(R.id.rl_play_pause_layout) .visibility = View.GONE } if (what == PlayStateParams.STATE_PLAYING) { this@CoursePlayItemViewVideo.findViewById<View>(R.id.app_video_loading) .visibility = View.GONE } if (what == PlayStateParams.MEDIA_INFO_BUFFERING_END || what == PlayStateParams.MEDIA_INFO_AUDIO_RENDERING_START || what == PlayStateParams.MEDIA_INFO_VIDEO_RENDERING_START || what == PlayStateParams.STATE_PLAYING || what == IMediaPlayer.MEDIA_INFO_VIDEO_SEEK_RENDERING_START ) { activity?.isVideoPlay = true this@CoursePlayItemViewVideo.findViewById<View>(R.id.ll_bg) .visibility = View.GONE this@CoursePlayItemViewVideo.findViewById<View>(R.id.ll_loading) .visibility = View.GONE this@CoursePlayItemViewVideo.findViewById<View>(R.id.app_video_loading) .visibility = View.GONE } if (what == PlayStateParams.STATE_COMPLETED) { isVideoPlaying = false PlayProgressUtil.saveProgress( this@CoursePlayItemViewVideo.activity, videoUrl, 0 ) if (playList.size - 1 > this@CoursePlayItemViewVideo.index) { //播放下一曲 // play(this@CoursePlayItemViewVideo.index + 1) this@CoursePlayItemViewVideo.index = this@CoursePlayItemViewVideo.index + 1 activity!!.updatePlayingListStatus(this@CoursePlayItemViewVideo.index) this@CoursePlayItemViewVideo.findViewById<View>(R.id.ll_loading) .visibility = View.VISIBLE this@CoursePlayItemViewVideo.findViewById<View>(R.id.app_video_loading) .visibility = View.VISIBLE } } else { isVideoPlaying = true } return true } }) .showThumbnail { ivThumbnail -> run { ivThumbnail.alpha = 0.5f GlideApp.with(context) .load(courseExtra!!.pic) .into(ivThumbnail) } } .setPlaySource(url) .startPlay() .seekTo(hisTime) // try { // var videoViewField = // activity?.videoView.run { javaClass.getDeclaredField("videoView") } // videoViewField.isAccessible = true // // var ijkVideoView = videoViewField.get(activity?.videoView) as IjkVideoView // var mMediaPlayerField = ijkVideoView.javaClass.getDeclaredField("mMediaPlayer") // // var mMediaPlayerObject = mMediaPlayerField.get(ijkVideoView) // if (mMediaPlayerObject is IjkMediaPlayer) { // mMediaPlayerObject.setOption( // IjkMediaPlayer.OPT_CATEGORY_FORMAT, // "dns_cache_clear", // 1 // ) // } // } catch (e: java.lang.Exception) { // // } // // activity?.videoView?.startPlay()?.seekTo(hisTime) val layout = activity?.window?.attributes layout?.screenBrightness = -1f activity?.window?.attributes = layout } catch (e: Exception) { e.printStackTrace() } } } /** * 设置显示数据 */ override fun setData( index: Int, list: ArrayList<CourseMediaBean>, courseExtra: CourseExtraBean, from: Int, isAutoPlay: Boolean ) { if (list.isEmpty()) return playList.clear() playList.addAll(list) this.courseExtra = courseExtra if (isAutoPlay) { play(index) } } override fun onDestroy() { timer.cancel() } }