播放回调状态不对
jp0533 opened this issue · 2 comments
你好,我在使用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中的说明如下:
/**- The player is able to immediately play from its current position. The player will be playing if
- {@link #getPlayWhenReady()} is true, and paused otherwise.
*/
int STATE_READY = 3;
`
此处应该是如果playbackState为3时要区分playWhenReady,如果playWhenReady为true时应该会立即播放,playWhenReady为false的话播放器应该会暂停, 然后我追踪代码到PlaybackManager类中第110行updatePlaybackState方法,此处因为对框架代码不熟悉,有点看不懂调用关系,我看框架没有提供自定义IPlaybackManager的功能,不知道这里如果要调试修改的话应该怎么处理,或者这里框架内部已经处理了上述的不同情况。
如方便的话可否指点下应该怎么修改代码,或者框架的处理逻辑是对的,我哪里没有配置对么?盼回复,谢谢。
PS:使用的框架版本号是2.4.4
好,不久后会更新一个版本,到时候通知
请用2.4.5版本,有问题欢迎进行反馈