简体   繁体   English

Exoplayer 构建器在按下并再次打开视频时出错

[英]Exoplayer builder gives error when back pressed and open video again

I am using ExoPlayer to play videos.我正在使用 ExoPlayer 播放视频。 Everything is normal and working until back pressing.I am using recycler view.一切正常,直到回压。我正在使用回收站视图。 User is pressing an item to enter video.But when user back pressed and open another video or same video again, player builder gives the error below.用户按下一个项目以输入视频。但是当用户按下并再次打开另一个视频或同一视频时,播放器构建器会出现以下错误。 I have never seen a solution about this on the net.我从来没有在网上看到过关于这个的解决方案。 And also I need to say that I am using the same builder method on the document.而且我还需要说我在文档上使用相同的构建器方法。

this is the error:这是错误:

Process: com.example.exoplayer, PID: 19208
   java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/exoplayer2/source/ads/AdsMediaSource$MediaSourceFactory;
       at java.lang.Class.classForName(Native Method)
       at java.lang.Class.forName(Class.java:453)
       at java.lang.Class.forName(Class.java:378)
       at com.google.android.exoplayer2.source.DefaultMediaSourceFactory.loadDelegates(DefaultMediaSourceFactory.java:321)
       at com.google.android.exoplayer2.source.DefaultMediaSourceFactory.<init>(DefaultMediaSourceFactory.java:152)
       at com.google.android.exoplayer2.source.DefaultMediaSourceFactory.<init>(DefaultMediaSourceFactory.java:127)
       at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(SimpleExoPlayer.java:195)
       at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(SimpleExoPlayer.java:153)
       at com.example.exoplayer.MainActivity.initializePlayer(MainActivity.kt:193)
       at com.example.exoplayer.MainActivity.onStart(MainActivity.kt:70)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
       at android.app.Activity.performStart(Activity.java:6992)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
       at android.app.ActivityThread.-wrap11(Unknown Source:0)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6541)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.exoplayer2.source.ads.AdsMediaSource$MediaSourceFactory" on path: DexPathList[[zip file "/data/app/com.example.exoplayer-V2UiSJoFtK6lpPhAy-YB-g==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.exoplayer-V2UiSJoFtK6lpPhAy-YB-g==/lib/x86, /system/lib, /vendor/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:379)

This is my initialize and release methods:这是我的初始化和释放方法:

initialize()初始化()

   private fun initializePlayerXml(currentXmlLink: String) {
       if (player == null) {
           val trackSelector = DefaultTrackSelector(this)
           trackSelector.setParameters(
               trackSelector.buildUponParameters().setMaxVideoSizeSd()
           )
           player = SimpleExoPlayer.Builder(this)
               .setTrackSelector(trackSelector)
               .build()

       }
       if (player!!.bufferedPosition == 0L) {
           playButton.setImageResource(R.drawable.ic_pause)
       }

       playButton.setOnClickListener {
           if (player!!.isPlaying) {
               player!!.pause()
               playButton.setImageResource(R.drawable.ic_play)
           } else {
               player!!.play()
               playButton.setImageResource(R.drawable.ic_pause)
           }


       }
       val doubleClickForwardFun = DoubleClick(object : DoubleClickListener {
           override fun onSingleClickEvent(view: View?) {

           }

           override fun onDoubleClickEvent(view: View?) {
               val currentPosition = player!!.currentPosition
               player!!.seekTo(currentPosition + 10000)
           }
       })

       val doubleClickBackwardFun = DoubleClick(object : DoubleClickListener {
           override fun onSingleClickEvent(view: View?) {

           }

           override fun onDoubleClickEvent(view: View?) {
               val currentPosition = player!!.currentPosition
               player!!.seekTo(currentPosition - 10000)
           }
       })


       forwardButton.setOnClickListener {
           val currentPosition = player!!.currentPosition
           player!!.seekTo(currentPosition + 10000)
       }
       backwardButton.setOnClickListener {
           val currentPosition = player!!.currentPosition
           player!!.seekTo(currentPosition - 10000)

       }
       doubleClickBackward.setOnClickListener(doubleClickBackwardFun)
       doubleClickForward.setOnClickListener(doubleClickForwardFun)

       val mediaItem =
           MediaItem.Builder()
               .setUri(currentXmlLink)
               .setMimeType(MimeTypes.APPLICATION_MPD)
               .build()
       player!!.addMediaItem(mediaItem)
       player!!.addMediaItem(mediaItem)

       playerView!!.player = player
       player!!.playWhenReady = playWhenReady
       player!!.seekTo(currentWindow, playbackPosition)
       playbackStateListener.let { player!!.addListener(it) }
       player!!.prepare()
   }

release()释放()


   private fun releasePlayer() {
       if (player != null) {
           player!!.removeListener(playbackStateListener)
           player!!.release()
           player!!.stop()
           player = null
       }
   }

I just found the solution.The problem occurs when different versions of exoplayer used.刚刚找到解决方案。使用不同版本的exoplayer时出现问题。 I am using these to solve the problem.我正在使用这些来解决问题。

    implementation 'com.google.android.exoplayer:exoplayer:2.12.1'
    implementation 'com.google.android.exoplayer:exoplayer-core:2.12.1'
    implementation 'com.google.android.exoplayer:exoplayer-dash:2.12.1'
    implementation 'com.google.android.exoplayer:exoplayer-ui:2.12.1'
    implementation 'com.google.android.exoplayer:exoplayer-hls:2.12.1'

for more information check my issue on Github here .有关更多信息,请在此处查看我在 Github 上的问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM