Я тестирую mpd файл в My Exoplayer. Я искал несколько тестовых URL-адресов и нашел сайт тестовых URL-адресов github. Когда я пробую некоторые URL-адреса в примере guthub, моя позиция exoplayer go назад на 5 секунд периодически. позиция продвигается вперед до 3 секунд, и внезапно go назад до 0 секунд. Если я остановлю exoplayer, позиция go будет меньше - 10:00. Я не понимаю этого ... дайте мне знать, что происходит ...
URL здесь, https://github.com/Dash-Industry-Forum/dash-live-source-simulator/wiki/Test-URLs
и вот мой код экзоплеера Мой Exoplayer
class MyExoPlayer(val context: Context,val binding:PlayerView
,val listener : Player.EventListener, val url :String,val volume:Float,val type:String) {
val mediaReceiver = MediaReceiver()
lateinit var defaultDataSourceFactory : DefaultHttpDataSourceFactory
lateinit var mediaSourceFactory : AdsMediaSource.MediaSourceFactory
private var player: SimpleExoPlayer? = null
private var playWhenReady = true
private var currentWindow = 0
private var playbackPosition: Long = 0
fun initializePlayer() {
if (player == null) {
val trackSelector = DefaultTrackSelector()
trackSelector.setParameters(
trackSelector.buildUponParameters().setMaxVideoSizeSd().setMaxAudioChannelCount(8)
)
player = ExoPlayerFactory.newSimpleInstance(context,trackSelector)
player!!.volume = volume
val playBackParameters = PlaybackParameters(1f,1f)
player!!.playbackParameters = playBackParameters
binding.player = player
binding.useController=true
binding.background = context.getDrawable(R.color.colorTransparent)//context.getColor(R.color.colorAccent)
defaultDataSourceFactory = DefaultHttpDataSourceFactory(context.getString(R.string.app_name))
mediaSourceFactory = ProgressiveMediaSource.Factory(defaultDataSourceFactory)
var mediaSource :MediaSource ?= null
if(type=="DASH"){
mediaSource =buildMediaSource(Uri.parse(url))!!
}else{
mediaSource = mediaSourceFactory.createMediaSource(Uri.parse(url))
}
player!!.prepare(mediaSource,false,false)
player!!.seekTo(currentWindow, playbackPosition)
player!!.playWhenReady = playWhenReady
setAudioFocus()
player!!.addListener(listener)
}
}
private fun releasePlayer() {
player?.let {
playbackPosition = it.currentPosition
currentWindow = it.currentWindowIndex
playWhenReady = it.playWhenReady
it.release()
player = null
}
}
inner class MediaReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY == intent.action) {
player?.playWhenReady = false
}
}
}
fun setPlaybackParams(speed:Float,pitch:Float){
player!!.playbackParameters = PlaybackParameters(speed,pitch)
}
private fun buildMediaSource(uri: Uri): MediaSource? {
val dataSourceFactory: DataSource.Factory =
DefaultDataSourceFactory(context, "ua")
return DashMediaSource.Factory(dataSourceFactory)
.createMediaSource(uri)
}
fun setPlayWhenReady(){
player!!.playWhenReady = !player!!.playWhenReady
}
}