mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-29 09:29:29 +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
|
let serviceCreated = false
|
||||||
const createService = async () => {
|
const createService = async () => {
|
||||||
useStore.subscribe(
|
useStore.subscribe(
|
||||||
@ -112,6 +118,15 @@ const createService = async () => {
|
|||||||
await TrackPlayer.seekTo(data.position)
|
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 () {
|
module.exports = async function () {
|
||||||
|
|||||||
@ -64,7 +64,7 @@ export type TrackPlayerSlice = {
|
|||||||
netState: 'mobile' | 'wifi'
|
netState: 'mobile' | 'wifi'
|
||||||
setNetState: (netState: 'mobile' | 'wifi') => Promise<void>
|
setNetState: (netState: 'mobile' | 'wifi') => Promise<void>
|
||||||
|
|
||||||
rebuildQueue: () => Promise<void>
|
rebuildQueue: (forcePlay?: boolean) => Promise<void>
|
||||||
buildStreamUri: (id: string) => string
|
buildStreamUri: (id: string) => string
|
||||||
resetTrackPlayerState: () => void
|
resetTrackPlayerState: () => void
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
|
|||||||
get().rebuildQueue()
|
get().rebuildQueue()
|
||||||
},
|
},
|
||||||
|
|
||||||
rebuildQueue: async () => {
|
rebuildQueue: async forcePlay => {
|
||||||
return trackPlayerCommands.enqueue(async () => {
|
return trackPlayerCommands.enqueue(async () => {
|
||||||
const queue = await getQueue()
|
const queue = await getQueue()
|
||||||
if (!queue.length) {
|
if (!queue.length) {
|
||||||
@ -326,7 +326,7 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
|
|||||||
|
|
||||||
await TrackPlayer.seekTo(position)
|
await TrackPlayer.seekTo(position)
|
||||||
|
|
||||||
if (state === State.Playing) {
|
if (state === State.Playing || forcePlay) {
|
||||||
await TrackPlayer.play()
|
await TrackPlayer.play()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user