android - Exoplayer View 无法找到 player.prepare() 函数

标签 android kotlin android-mediaplayer exoplayer exoplayer2.x

目前我遇到了新版 Exoplayer 的问题。下面是用于播放器启动的代码。在 getPlayerStart() 我正在传递 url 链接。在 initExoPlayer() 中,我正在初始化我的 Exoplayer 但在 Exoplayer 的早期版本中我遇到了这个问题:

mExoPlayerView!!.player.prepare(mVideoSource):

以上功能显示不可用

private fun getPlayerStart(urlLink: String) {
        if (playerMode) {
            val userAgent = Util.getUserAgent(context, context!!.getApplicationInfo().packageName)
            val httpDataSourceFactory = DefaultHttpDataSourceFactory(userAgent, null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true)
            val dataSourceFactory = DefaultDataSourceFactory(context, null, httpDataSourceFactory)
            Log.i("Video",urlLink)
            val daUri = Uri.parse(urlLink)
            val extractorsFactory = DefaultExtractorsFactory()
            mVideoSource = ExtractorMediaSource(daUri, dataSourceFactory,
                    extractorsFactory, null, null) as MediaSource?
        }
        initExoPlayer()

    }


 private fun initExoPlayer() {
        val bandwidthMeter = DefaultBandwidthMeter()
        val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
        val trackSelector = DefaultTrackSelector(videoTrackSelectionFactory)
        val loadControl = DefaultLoadControl()
        player = ExoPlayerFactory.newSimpleInstance(DefaultRenderersFactory(context), trackSelector, loadControl)
        mExoPlayerView!!.player= this.player
        player!!.addListener(this)

        mExoPlayerView!!.player.prepare(mVideoSource)
        mExoPlayerView!!.getPlayer().playWhenReady = true
    }

最佳答案

prepare() 方法是 ExoPlayer 接口(interface)的一部分,它扩展了 Player 接口(interface)。

PlayerView 只暴露了Player 接口(interface),没有prepare 方法。这就是为什么你不能执行 mExoPlayerView!!.player.prepare(mVideoSource) 的原因。

但是,您正在使用的 ExoPlayerFactory 会返回一个 SimpleExoPlayer 实例,该实例确实实现了 ExoPlayer 接口(interface):

SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(context), trackSelector, loadControl);
player.prepare(mediaSource);

下面是ExoPlayerPlayer接口(interface)的类引用,还有SimpleExoPlayer:

https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ExoPlayer.html https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html

关于android - Exoplayer View 无法找到 player.prepare() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50342675/

相关文章:

android - 当启动严格模式并将 `android:persistent`设置为 `true`时会出错。我该如何解决这个错误?

kotlin - Arrow的filterOrElse和filterOrOther有什么区别?

android - mp.pause();使应用程序崩溃

Android 的 MediaPlayer setSurface 在暂停状态下

Android MediaPlayer 信息/警告 (703, 0) 信息/警告 (701, 0) wifi 或数据连接速度慢

java - 上传图片在服务器上损坏

android - 在 sqlite 数据库中插入行的最快方法是什么

android - smackx 无法登录到 ejabberd socketexception 发送失败管道损坏

java - Android Studio 显示不可读语言

java - 从 Android 存储访问框架中选取时文件是只读的