Closed jp0533 closed 3 years ago
你好,我在使用StarrySky框架加载本地文件的时候使用了拦截器对本地文件进行处理,然后在播放处理后的文件时出现播放正常但StarrySky框架回调不对导致页面未刷新的情况,我的代码如下:
拦截器处理本地文件: ` class MyInfoInterceptor() : StarrySkyInterceptor {
override fun process( songInfo: SongInfo?, mainLooper: MainLooper, callback: InterceptorCallback ) { log { "MusicPlayerDetailActivity --> 处理前的音频文件路径: ${songInfo?.songUrl}" } // 此处对文件进行处理,操作是下载网络文件,具体过程代码忽略,完成后将本地文件路径赋值给SongInfo val filePath = "" log { "MusicPlayerDetailActivity --> 处理后的音频文件路径: ${filePath}" } songInfo?.apply { songUrl = filePath } log { "MusicPlayerDetailActivity --> 文件已下载 ${songInfo?.toJson()}" } callback.onContinue(songInfo) } } `
在ExoPlayback回调中断点调试 ` private inner class ExoPlayerEventListener : Player.EventListener { ... // 未处理的回调 override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { when (playbackState) { Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY -> mCallback?.onPlaybackStatusChanged(currPlayInfo, playbackState) Player.STATE_ENDED -> mCallback?.onPlaybackCompletion() } if (playbackState == Player.STATE_READY) { sourceTypeErrorInfo.clear() } }
override fun onPlayerError(error: ExoPlaybackException) { val what: String = when (error.type) { ExoPlaybackException.TYPE_SOURCE -> error.sourceException.message.toString() ExoPlaybackException.TYPE_RENDERER -> error.rendererException.message.toString() ExoPlaybackException.TYPE_UNEXPECTED -> error.unexpectedException.message.toString() else -> "Unknown: $error" } mCallback?.onPlaybackError(currPlayInfo, "ExoPlayer error $what") if (error.type == ExoPlaybackException.TYPE_SOURCE) { sourceTypeErrorInfo.happenSourceError = true sourceTypeErrorInfo.seekToPositionWhenError = sourceTypeErrorInfo.seekToPosition sourceTypeErrorInfo.currPositionWhenError = currentStreamPosition } } ... // 未处理的回调
} 其中onPlayerStateChanged回调中我看框架代码并没有区别处理,而ExoPlayer中的说明如下: /**
其中onPlayerStateChanged回调中我看框架代码并没有区别处理,而ExoPlayer中的说明如下:
好,不久后会更新一个版本,到时候通知
请用2.4.5版本,有问题欢迎进行反馈
你好,我在使用StarrySky框架加载本地文件的时候使用了拦截器对本地文件进行处理,然后在播放处理后的文件时出现播放正常但StarrySky框架回调不对导致页面未刷新的情况,我的代码如下:
拦截器处理本地文件: ` class MyInfoInterceptor() : StarrySkyInterceptor {
override fun process( songInfo: SongInfo?, mainLooper: MainLooper, callback: InterceptorCallback ) { log { "MusicPlayerDetailActivity --> 处理前的音频文件路径: ${songInfo?.songUrl}" } // 此处对文件进行处理,操作是下载网络文件,具体过程代码忽略,完成后将本地文件路径赋值给SongInfo val filePath = "" log { "MusicPlayerDetailActivity --> 处理后的音频文件路径: ${filePath}" } songInfo?.apply { songUrl = filePath } log { "MusicPlayerDetailActivity --> 文件已下载 ${songInfo?.toJson()}" } callback.onContinue(songInfo) } } `
在ExoPlayback回调中断点调试 ` private inner class ExoPlayerEventListener : Player.EventListener { ... // 未处理的回调 override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { when (playbackState) { Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY -> mCallback?.onPlaybackStatusChanged(currPlayInfo, playbackState) Player.STATE_ENDED -> mCallback?.onPlaybackCompletion() } if (playbackState == Player.STATE_READY) { sourceTypeErrorInfo.clear() } }
}
其中onPlayerStateChanged回调中我看框架代码并没有区别处理,而ExoPlayer中的说明如下:
/**