【发布时间】:2020-10-27 15:45:38
【问题描述】:
我有一个提供视频 URI 和(预加载!)第一帧 URI 的 API。如何使用已经可用的第一帧初始化 ExoPlayer?
@Singleton
class MediaPlayer @Inject constructor(private val context: Context) {
companion object {
var exoPlayer: SimpleExoPlayer? = null
var pauseItem = false
}
fun initializeExoplayer(uri: Uri): SimpleExoPlayer {
if (exoPlayer != null) {
resetPlayer()
}
val trackSelector = DefaultTrackSelector()
trackSelector.setParameters(
DefaultTrackSelector.ParametersBuilder()
.setForceLowestBitrate(true)
.setMaxAudioBitrate(128_000)
)
exoPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector)
val mediaSource = createMediaSource(uri)
val loopingSource = LoopingMediaSource(mediaSource)
exoPlayer?.prepare(loopingSource)
exoPlayer?.volume = 1f
return exoPlayer!!
}
fun resetPlayer() {
exoPlayer?.playWhenReady = false
exoPlayer?.stop()
exoPlayer?.release()
exoPlayer = null
}
private fun createMediaSource(uri: Uri): MediaSource {
val userAgent = Util.getUserAgent(context, "ExoPlayerIntro")
val dataSourceFactory = DefaultDataSourceFactory(context, userAgent)
val mediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory, DefaultExtractorsFactory())
.createMediaSource(uri)
return Objects.requireNonNull(mediaSource, "MediaSource cannot be null")
}
}
我还询问了 Google 团队: https://github.com/google/ExoPlayer/issues/8139
【问题讨论】: