@@ -24,6 +24,10 @@ import java.io.File
2424import java.lang.Long.min
2525import java.net.HttpURLConnection
2626import java.net.URL
27+ import androidx.media3.common.Player
28+ import androidx.media3.exoplayer.DefaultLoadControl
29+ import androidx.media3.common.PlaybackException
30+ import androidx.media3.exoplayer.rtsp.RtspMediaSource
2731
2832object AppPreferences {
2933 private const val PREFS_NAME = " AppPreferences"
@@ -192,16 +196,55 @@ class MainActivity : AppCompatActivity() {
192196 }
193197
194198 private fun initPlayer (playerView : PlayerView , url : String ) {
195- player = ExoPlayer .Builder (this ).build()
199+ val loadControl = DefaultLoadControl .Builder ()
200+ .setBufferDurationsMs(
201+ 1000 ,
202+ 5000 ,
203+ 500 ,
204+ 500
205+ )
206+ .build()
196207
197- playerView.player = player
208+ val newPlayer = ExoPlayer .Builder (this )
209+ .setLoadControl(loadControl)
210+ .build()
198211
199- val mediaItem = MediaItem .fromUri(url)
200- player.setMediaItem(mediaItem)
212+ playerView.player?.release()
213+ playerView.player = null
214+ playerView.player = newPlayer
201215
202- player.prepare()
203- player.playWhenReady = true
204- player.volume = 0f
216+ if (url.lowercase().startsWith(" rtsp" )){
217+ var mediaItem = RtspMediaSource
218+ .Factory ()
219+ .setForceUseRtpTcp(true )
220+ .createMediaSource(MediaItem .fromUri(url))
221+ newPlayer.setMediaSource(mediaItem)
222+
223+ }else {
224+ val liveConfig = MediaItem .LiveConfiguration .Builder ()
225+ .setTargetOffsetMs(2000 )
226+ .setMinPlaybackSpeed(1.0f )
227+ .setMaxPlaybackSpeed(1.1f )
228+ .build()
229+
230+ val mediaItem: MediaItem = MediaItem .Builder ()
231+ .setUri(url)
232+ .setLiveConfiguration(liveConfig)
233+ .build()
234+ newPlayer.setMediaItem(mediaItem)
235+ }
236+
237+ newPlayer.addListener(object : Player .Listener {
238+ override fun onPlayerError (error : PlaybackException ) {
239+ Log .e(" ExoPlayer" , " Ошибка плеера: ${error.message} " )
240+ newPlayer.prepare() // Переподготовка при ошибке
241+ newPlayer.play()
242+ }
243+ })
244+
245+ newPlayer.prepare()
246+ newPlayer.playWhenReady = true
247+ newPlayer.volume = 0f
205248 }
206249 fun openSettings (view : View ) {
207250 Log .d(" MainActivity" , " open Settings" )
0 commit comments