11package com.tencent.iot.explorer.link.demo.video.playback.localPlayback
22
33import android.graphics.SurfaceTexture
4- import android.media.MediaPlayer
54import android.net.Uri
65import android.text.TextUtils
76import android.util.Log
@@ -17,7 +16,6 @@ import com.tencent.iot.explorer.link.core.log.L
1716import com.tencent.iot.explorer.link.demo.App
1817import com.tencent.iot.explorer.link.demo.R
1918import com.tencent.iot.explorer.link.demo.common.customView.CalendarView
20- import com.tencent.iot.explorer.link.demo.common.customView.timeline.TimeBlockInfo
2119import com.tencent.iot.explorer.link.demo.common.customView.timeline.TimeLineView
2220import com.tencent.iot.explorer.link.demo.common.customView.timeline.TimeLineViewChangeListener
2321import com.tencent.iot.explorer.link.demo.common.util.CommonUtils
@@ -67,7 +65,7 @@ private var keepAliveThreadRuning = true
6765class VideoLocalPlaybackFragment : VideoPlaybackBaseFragment (), TextureView.SurfaceTextureListener, XP2PCallback, CoroutineScope by MainScope() {
6866 private var TAG = VideoLocalPlaybackFragment ::class .java.simpleName
6967 var devInfo: DevInfo ? = null
70- private lateinit var player : IjkMediaPlayer
68+ private var player : IjkMediaPlayer = IjkMediaPlayer ()
7169 private lateinit var surface: Surface
7270 @Volatile
7371 private var currentPostion = - 1L // 小于 0 不需要恢复录像的进度,大于等于 0 需要恢复录像的进度
@@ -83,19 +81,34 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
8381 private var keepEndTime = 0L
8482 private var filePath: String? = null
8583 @Volatile
86- private var connected = false ;
84+ private var connected = false
85+ @Volatile
86+ private var isShowing = false
8787
8888 private fun sendCmd (id : String , cmd : String ):String {
8989 if (connected)
9090 return XP2P .postCommandRequestSync(id, cmd.toByteArray(), cmd.toByteArray().size.toLong(), 2 * 1000 * 1000 )
9191 return " "
9292 }
9393
94+ override fun setUserVisibleHint (isVisibleToUser : Boolean ) {
95+ player?.let {
96+ if (! isVisibleToUser && currentPlayerState) {
97+ Log .d(TAG , " setUserVisibleHint playVideo isVisibleToUser $isVisibleToUser " )
98+ // 滑动该页面时,如果处于播放状态,暂停播放
99+ launch (Dispatchers .Main ) {
100+ iv_start.performClick()
101+ }
102+ }
103+ }
104+ isShowing = isVisibleToUser
105+ Log .d(TAG , " setUserVisibleHint isShowing $isShowing " )
106+ }
107+
94108 override fun startHere (view : View ) {
95109 super .startHere(view)
96110 tv_date.text = dateFormat.format(System .currentTimeMillis())
97111 setListener()
98- player = IjkMediaPlayer ()
99112 launch(Dispatchers .Main ) {
100113 delay(100 ) // 延迟一秒再进行连接,保证存在设备信息
101114 startConnect()
@@ -118,6 +131,7 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
118131 iv_start.setOnClickListener {
119132 devInfo? : let { return @setOnClickListener }
120133 var id = " ${App .data.accessInfo?.productId} /${devInfo?.deviceName} "
134+ Log .d(TAG , " setOnClickListener currentPlayerState $currentPlayerState " )
121135
122136 if (currentPlayerState) {
123137 launch (Dispatchers .IO ) {
@@ -249,7 +263,7 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
249263
250264 launch(Dispatchers .Main ) {
251265 var resp = requestTagDateInfo(it)
252- L .d(TAG , " resp $resp " )
266+ Log .d(TAG , " resp $resp " )
253267 if (TextUtils .isEmpty(resp)) return @launch
254268
255269 try {
@@ -379,7 +393,7 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
379393
380394 var id = " ${App .data.accessInfo?.productId} /${devInfo?.deviceName} "
381395 var timeStr = formateDateParam(dateStr)
382- L .d(TAG , " request timeStr $timeStr " )
396+ Log .d(TAG , " request timeStr $timeStr " )
383397 var command = Command .getMonthDates(devInfo!! .channel, timeStr)
384398 if (TextUtils .isEmpty(command)) return " "
385399 return sendCmd(id, command)
@@ -407,12 +421,16 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
407421 }
408422
409423 private fun playVideo (startTime : Long , endTime : Long , offset : Long ) {
410- L .d(TAG , " startTime $startTime endTime $endTime offset $offset " )
424+ Log .d(TAG , " startTime $startTime endTime $endTime offset $offset " )
411425 keepStartTime = startTime
412426 keepEndTime = endTime
413427 devInfo?.let {
414- setPlayerUrl( Command .getLocalVideoUrl(it.channel, startTime, endTime), offset )
428+ Log .d( TAG , " isShowing $isShowing " )
415429 launch (Dispatchers .Main ) {
430+ delay(1000 )
431+ if (! isShowing) currentPlayerState = false
432+ Log .d(TAG , " playVideo currentPlayerState $currentPlayerState " )
433+ setPlayerUrl(Command .getLocalVideoUrl(it.channel, startTime, endTime), offset)
416434 tv_all_time.text = CommonUtils .formatTime(endTime * 1000 - startTime * 1000 )
417435 video_seekbar.max = (endTime - startTime).toInt()
418436 }
@@ -423,7 +441,7 @@ class VideoLocalPlaybackFragment: VideoPlaybackBaseFragment(), TextureView.Surfa
423441
424442 player?.let {
425443 val url = urlPrefix + suffix
426- L .d(TAG , " setPlayerUrl url $url " )
444+ Log .d(TAG , " setPlayerUrl url $url " )
427445 it.reset()
428446
429447 it.setOption(IjkMediaPlayer .OPT_CATEGORY_FORMAT , " analyzemaxduration" , 100 )
0 commit comments