fix player crashing at the end of transcoded track

This commit is contained in:
austinried 2021-08-25 10:24:42 +09:00
parent 75da5d16ac
commit 3db1d795dc
2 changed files with 18 additions and 3 deletions

View File

@ -28,6 +28,12 @@ const setNetState = (netState: 'mobile' | 'wifi') => {
})
}
const rebuildQueue = () => {
unstable_batchedUpdates(() => {
useStore.getState().rebuildQueue(useStore.getState().playerState === State.Playing)
})
}
let serviceCreated = false
const createService = async () => {
useStore.subscribe(
@ -112,6 +118,15 @@ const createService = async () => {
await TrackPlayer.seekTo(data.position)
})
})
TrackPlayer.addEventListener(Event.PlaybackError, data => {
const { code, message } = data as Record<string, string>
// fix for ExoPlayer aborting playback while esimating content length
if (code === 'playback-source' && message.includes('416')) {
rebuildQueue()
}
})
}
module.exports = async function () {

View File

@ -64,7 +64,7 @@ export type TrackPlayerSlice = {
netState: 'mobile' | 'wifi'
setNetState: (netState: 'mobile' | 'wifi') => Promise<void>
rebuildQueue: () => Promise<void>
rebuildQueue: (forcePlay?: boolean) => Promise<void>
buildStreamUri: (id: string) => string
resetTrackPlayerState: () => void
@ -284,7 +284,7 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
get().rebuildQueue()
},
rebuildQueue: async () => {
rebuildQueue: async forcePlay => {
return trackPlayerCommands.enqueue(async () => {
const queue = await getQueue()
if (!queue.length) {
@ -326,7 +326,7 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
await TrackPlayer.seekTo(position)
if (state === State.Playing) {
if (state === State.Playing || forcePlay) {
await TrackPlayer.play()
}
})