mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 00:59:28 +01:00
fix player crashing at the end of transcoded track
This commit is contained in:
parent
75da5d16ac
commit
3db1d795dc
@ -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 () {
|
||||
|
||||
@ -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()
|
||||
}
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user