@@ -3,6 +3,8 @@ package com.lizongying.mytv
33import  android.os.Bundle 
44import  android.util.Log 
55import  android.view.LayoutInflater 
6+ import  android.view.SurfaceHolder 
7+ import  android.view.SurfaceView 
68import  android.view.View 
79import  android.view.ViewGroup 
810import  android.view.ViewTreeObserver 
@@ -15,24 +17,39 @@ import androidx.media3.common.VideoSize
1517import  androidx.media3.common.util.UnstableApi 
1618import  androidx.media3.exoplayer.ExoPlayer 
1719import  androidx.media3.ui.PlayerView 
20+ import  com.google.android.exoplayer2.SimpleExoPlayer 
1821import  com.lizongying.mytv.databinding.PlayerBinding 
1922import  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}
0 commit comments