Skip to content

Commit 83a7029

Browse files
committed
fix tianmao-mohe
1 parent 872f668 commit 83a7029

File tree

4 files changed

+59
-5
lines changed

4 files changed

+59
-5
lines changed

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,8 @@ dependencies {
113113
implementation 'com.github.bumptech.glide:glide:4.11.0'
114114
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"
115115
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0-RC")
116+
117+
implementation 'com.google.android.exoplayer:exoplayer-ui:2.13.3'
118+
implementation 'com.google.android.exoplayer:exoplayer-core:2.13.3'
119+
implementation 'com.google.android.exoplayer:exoplayer-hls:2.13.3'
116120
}

app/src/main/java/com/lizongying/mytv/PlayerFragment.kt

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.lizongying.mytv
33
import android.os.Bundle
44
import android.util.Log
55
import android.view.LayoutInflater
6+
import android.view.SurfaceHolder
7+
import android.view.SurfaceView
68
import android.view.View
79
import android.view.ViewGroup
810
import android.view.ViewTreeObserver
@@ -15,24 +17,39 @@ import androidx.media3.common.VideoSize
1517
import androidx.media3.common.util.UnstableApi
1618
import androidx.media3.exoplayer.ExoPlayer
1719
import androidx.media3.ui.PlayerView
20+
import com.google.android.exoplayer2.SimpleExoPlayer
1821
import com.lizongying.mytv.databinding.PlayerBinding
1922
import com.lizongying.mytv.models.TVViewModel
2023

2124

22-
class PlayerFragment : Fragment() {
25+
class PlayerFragment : Fragment(), SurfaceHolder.Callback {
2326

2427
private var _binding: PlayerBinding? = null
2528
private var playerView: PlayerView? = null
2629
private var tvViewModel: TVViewModel? = null
2730
private val aspectRatio = 16f / 9f
2831

32+
33+
private lateinit var surfaceView: SurfaceView
34+
private lateinit var surfaceHolder: SurfaceHolder
35+
private var exoPlayer: SimpleExoPlayer? = null
36+
2937
override fun onCreateView(
3038
inflater: LayoutInflater, container: ViewGroup?,
3139
savedInstanceState: Bundle?
3240
): View {
3341
_binding = PlayerBinding.inflate(inflater, container, false)
34-
playerView = _binding!!.playerView
35-
(activity as MainActivity).playerFragment = this
42+
43+
if (Utils.isTmallDevice()) {
44+
_binding!!.playerView.visibility = View.GONE
45+
surfaceView = _binding!!.surfaceView
46+
surfaceHolder = surfaceView.holder
47+
surfaceHolder.addCallback(this)
48+
} else {
49+
_binding!!.surfaceView.visibility = View.GONE
50+
playerView = _binding!!.playerView
51+
}
52+
3653
playerView?.viewTreeObserver?.addOnGlobalLayoutListener(object :
3754
ViewTreeObserver.OnGlobalLayoutListener {
3855
override fun onGlobalLayout() {
@@ -78,6 +95,10 @@ class PlayerFragment : Fragment() {
7895
setMediaItem(MediaItem.fromUri(tvViewModel.getVideoUrlCurrent()))
7996
prepare()
8097
}
98+
exoPlayer?.run {
99+
setMediaItem(com.google.android.exoplayer2.MediaItem.fromUri(tvViewModel.getVideoUrlCurrent()))
100+
prepare()
101+
}
81102
}
82103

83104
override fun onStart() {
@@ -86,8 +107,10 @@ class PlayerFragment : Fragment() {
86107
if (playerView != null && playerView!!.player?.isPlaying == false) {
87108
Log.i(TAG, "replay")
88109
playerView!!.player?.prepare()
89-
} else {
90-
Log.i(TAG, "playing")
110+
}
111+
if (exoPlayer?.isPlaying == false) {
112+
Log.i(TAG, "replay")
113+
exoPlayer?.prepare()
91114
}
92115
}
93116

@@ -101,13 +124,17 @@ class PlayerFragment : Fragment() {
101124
if (playerView != null && playerView!!.player?.isPlaying == true) {
102125
playerView!!.player?.stop()
103126
}
127+
if (exoPlayer?.isPlaying == true) {
128+
exoPlayer?.stop()
129+
}
104130
}
105131

106132
override fun onDestroy() {
107133
super.onDestroy()
108134
if (playerView != null) {
109135
playerView!!.player?.release()
110136
}
137+
exoPlayer?.release()
111138
}
112139

113140
override fun onDestroyView() {
@@ -118,4 +145,16 @@ class PlayerFragment : Fragment() {
118145
companion object {
119146
private const val TAG = "PlaybackVideoFragment"
120147
}
148+
149+
override fun surfaceCreated(holder: SurfaceHolder) {
150+
exoPlayer = SimpleExoPlayer.Builder(requireContext()).build()
151+
exoPlayer?.setVideoSurfaceHolder(surfaceHolder)
152+
exoPlayer?.playWhenReady = true
153+
}
154+
155+
override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
156+
}
157+
158+
override fun surfaceDestroyed(holder: SurfaceHolder) {
159+
}
121160
}

app/src/main/java/com/lizongying/mytv/Utils.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.lizongying.mytv
22

33
import android.content.res.Resources
4+
import android.os.Build
45
import android.util.TypedValue
56
import com.google.gson.Gson
67
import com.lizongying.mytv.api.TimeResponse
@@ -71,4 +72,6 @@ object Utils {
7172
TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), Resources.getSystem().displayMetrics
7273
).toInt()
7374
}
75+
76+
fun isTmallDevice() = Build.MANUFACTURER.equals("Tmall", ignoreCase = true)
7477
}

app/src/main/res/layout/player.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
android:background="@color/black"
88
android:keepScreenOn="true">
99

10+
<SurfaceView
11+
android:id="@+id/surface_view"
12+
android:layout_width="match_parent"
13+
android:layout_height="match_parent"
14+
android:layout_gravity="center"
15+
app:resize_mode="fill"
16+
app:use_controller="false" />
17+
1018
<androidx.media3.ui.PlayerView
1119
android:id="@+id/player_view"
1220
android:layout_width="match_parent"

0 commit comments

Comments
 (0)