Android Exoplayer-如何下载带有ts块的简单m3u8文件

Android Exoplayer-如何下载带有ts块的简单m3u8文件,android,kotlin,exoplayer2.x,Android,Kotlin,Exoplayer2.x,嗨,我正在尝试使用ExoPlayer和下载服务从给定的URL下载一个简单的m3u8视频 URL返回 #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:16 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:13.733333, q1080_0.ts #EXTINF:8.333333, q1080_1.ts #EXTINF:8.333333, q1080_2.ts #EXTINF:15.533333, q1080_3.ts #EXT-X-E

嗨,我正在尝试使用ExoPlayer和下载服务从给定的URL下载一个简单的m3u8视频

URL返回

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:16
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:13.733333,
q1080_0.ts
#EXTINF:8.333333,
q1080_1.ts
#EXTINF:8.333333,
q1080_2.ts
#EXTINF:15.533333,
q1080_3.ts
#EXT-X-ENDLIST
我试着像这样使用
downloadheloper

val downloadheloper:downloadheloper=downloadheloper.forMediaItem(
活动,
MediaItem.fromUri(Uri.parse(url)),
DefaultRendersFactory(活动),
DefaultHttpDataSourceFactory())
准备(对象:downloadheloper.Callback{
重写已准备好的(帮助程序:DownloadHelper){}
重写fun onPrepareError(帮助程序:DownloadHelper,e:IOException){}
})
val缓冲区=字节数组(1204)
val request=downloadHelper.getDownloadRequest(缓冲区)//
2021-05-22 18:50:37.816 28929-28929/app.meedu.app E/MethodChannel#app.meedu.app/video-downloader: Failed to handle method call
    java.lang.IllegalStateException
        at com.google.android.exoplayer2.util.Assertions.checkState(Assertions.java:84)
        at com.google.android.exoplayer2.offline.DownloadHelper.assertPreparedWithMedia(DownloadHelper.java:827)
        at com.google.android.exoplayer2.offline.DownloadHelper.getDownloadRequest(DownloadHelper.java:753)
        at app.meedu.app.platform_channels.VideoDownloader.onMethodCall(VideoDownloader.kt:53)
        at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
        at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
        at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loop(Looper.java:183)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-05-22 18:50:41.570 28929-29125/app.meedu.app E/VideoFrameReleaseHelper: Failed to call Surface.setFrameRate
      java.lang.IllegalStateException: Surface has already been released.
        at android.view.Surface.checkNotReleasedLocked(Surface.java:696)
        at android.view.Surface.setFrameRate(Surface.java:905)
        at com.google.android.exoplayer2.video.VideoFrameReleaseHelper.setSurfaceFrameRateV30(VideoFrameReleaseHelper.java:389)
        at com.google.android.exoplayer2.video.VideoFrameReleaseHelper.clearSurfaceFrameRate(VideoFrameReleaseHelper.java:379)
        at com.google.android.exoplayer2.video.VideoFrameReleaseHelper.onStopped(VideoFrameReleaseHelper.java:232)
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onStopped(MediaCodecVideoRenderer.java:471)
        at com.google.android.exoplayer2.BaseRenderer.stop(BaseRenderer.java:165)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.ensureStopped(ExoPlayerImplInternal.java:1599)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:1608)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:1351)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:1314)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:494)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)