使用 ConcatenatingMediaSource 时,Exoplayer 在播放列表中有一点差距

Exoplayer a little gap in playlist when using ConcatenatingMediaSource

我正在使用 ConcatenatingMediaSource 为我的 ExoPlayer 制作 hls urls 播放列表。

用本地文件播放媒体源时,没有间隙。

但是,当通过 hls url 播放媒体源时,它在转换时明显显示间隙(第一个视频到第二个视频)

我希望我的媒体源在 ConcatenatingMediaSource 中顺利传输。

我怎样才能做到这一点?

请指导我。

下面是我的初始化代码。

    val playerView = findViewById<PlayerView>(R.id.playerView)
    val concatenatedSource = ConcatenatingMediaSource()

    val trackSelector = DefaultTrackSelector(mContext!!)
    trackSelector.parameters = trackSelector.buildUponParameters().build()

    val dataSourceFactory = DefaultHttpDataSource.Factory()
    val hlsMediaSource: HlsMediaSource = HlsMediaSource.Factory(dataSourceFactory)
        .setAllowChunklessPreparation(true)
        .createMediaSource(MediaItem.fromUri("https://multiplatform-f.akamaihd.net/i/multi/april11/sintel/sintel-hd_,512x288_450_b,640x360_700_b,768x432_1000_b,1024x576_1400_m,.mp4.csmil/master.m3u8"))

    concatenatedSource.addMediaSource(hlsMediaSource)

    val player = ExoPlayer.Builder(mContext)
        .setTrackSelector(trackSelector)
        .build()

    player.setMediaSource(concatenatedSource)
    player.addAnalyticsListener(EventLogger(trackSelector))
    player.addListener(object : Player.Listener {
        override fun onPlayerError(error: PlaybackException) {
            super.onPlayerError(error)
        }
    })

    playerView?.player = player
    playerView?.player?.prepare()
    playerView?.player?.playWhenReady = true

对于遇到此类问题的人,您应该在构建 MediaItem 对象时尝试使用 CacheDataSource。这解决了我的问题。谢谢