mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-07-23 12:16:10 +02:00
Change:Audio stream buffer times #63
This commit is contained in:
parent
0fcec4b861
commit
1a7f90c93b
3 changed files with 25 additions and 1 deletions
|
@ -82,8 +82,10 @@ class MyNativeAudio : Plugin() {
|
||||||
fun getCurrentTime(call: PluginCall) {
|
fun getCurrentTime(call: PluginCall) {
|
||||||
Handler(Looper.getMainLooper()).post() {
|
Handler(Looper.getMainLooper()).post() {
|
||||||
var currentTime = playerNotificationService.getCurrentTime()
|
var currentTime = playerNotificationService.getCurrentTime()
|
||||||
|
var bufferedTime = playerNotificationService.getBufferedTime()
|
||||||
val ret = JSObject()
|
val ret = JSObject()
|
||||||
ret.put("value", currentTime)
|
ret.put("value", currentTime)
|
||||||
|
ret.put("bufferedTime", bufferedTime)
|
||||||
call.resolve(ret)
|
call.resolve(ret)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,7 +243,15 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||||
ctx = this
|
ctx = this
|
||||||
|
|
||||||
// Initialize player
|
// Initialize player
|
||||||
|
var customLoadControl:LoadControl = DefaultLoadControl.Builder().setBufferDurationsMs(
|
||||||
|
1000 * 20, // 20s min buffer
|
||||||
|
1000 * 45, // 45s max buffer
|
||||||
|
1000 * 5, // 5s playback start
|
||||||
|
1000 * 20 // 20s playback rebuffer
|
||||||
|
).build()
|
||||||
|
|
||||||
var simpleExoPlayerBuilder = SimpleExoPlayer.Builder(this)
|
var simpleExoPlayerBuilder = SimpleExoPlayer.Builder(this)
|
||||||
|
simpleExoPlayerBuilder.setLoadControl(customLoadControl)
|
||||||
simpleExoPlayerBuilder.setSeekBackIncrementMs(10000)
|
simpleExoPlayerBuilder.setSeekBackIncrementMs(10000)
|
||||||
simpleExoPlayerBuilder.setSeekForwardIncrementMs(10000)
|
simpleExoPlayerBuilder.setSeekForwardIncrementMs(10000)
|
||||||
mPlayer = simpleExoPlayerBuilder.build()
|
mPlayer = simpleExoPlayerBuilder.build()
|
||||||
|
@ -694,6 +702,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||||
return currentPlayer.currentPosition
|
return currentPlayer.currentPosition
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getBufferedTime() : Long {
|
||||||
|
return currentPlayer.bufferedPosition
|
||||||
|
}
|
||||||
|
|
||||||
fun getTheLastPauseTime() : Long {
|
fun getTheLastPauseTime() : Long {
|
||||||
return lastPauseTime
|
return lastPauseTime
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<div class="h-1 w-full bg-gray-500 bg-opacity-50 relative">
|
<div class="h-1 w-full bg-gray-500 bg-opacity-50 relative">
|
||||||
<div ref="totalReadyTrack" class="h-full bg-gray-600 absolute top-0 left-0 pointer-events-none" />
|
<div ref="totalReadyTrack" class="h-full bg-gray-600 absolute top-0 left-0 pointer-events-none" />
|
||||||
|
<div ref="totalBufferedTrack" class="h-full bg-gray-500 absolute top-0 left-0 pointer-events-none" />
|
||||||
<div ref="totalPlayedTrack" class="h-full bg-gray-200 absolute top-0 left-0 pointer-events-none" />
|
<div ref="totalPlayedTrack" class="h-full bg-gray-200 absolute top-0 left-0 pointer-events-none" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
<div id="playerTrack" class="absolute bottom-0 left-0 w-full px-3">
|
<div id="playerTrack" class="absolute bottom-0 left-0 w-full px-3">
|
||||||
<div ref="track" class="h-2 w-full bg-gray-500 bg-opacity-50 relative" :class="loading ? 'animate-pulse' : ''" @click="clickTrack">
|
<div ref="track" class="h-2 w-full bg-gray-500 bg-opacity-50 relative" :class="loading ? 'animate-pulse' : ''" @click="clickTrack">
|
||||||
<div ref="readyTrack" class="h-full bg-gray-600 absolute top-0 left-0 pointer-events-none" />
|
<div ref="readyTrack" class="h-full bg-gray-600 absolute top-0 left-0 pointer-events-none" />
|
||||||
|
<div ref="bufferedTrack" class="h-full bg-gray-500 absolute top-0 left-0 pointer-events-none" />
|
||||||
<div ref="playedTrack" class="h-full bg-gray-200 absolute top-0 left-0 pointer-events-none" />
|
<div ref="playedTrack" class="h-full bg-gray-200 absolute top-0 left-0 pointer-events-none" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex pt-0.5">
|
<div class="flex pt-0.5">
|
||||||
|
@ -114,6 +116,7 @@ export default {
|
||||||
totalDuration: 0,
|
totalDuration: 0,
|
||||||
currentPlaybackRate: 1,
|
currentPlaybackRate: 1,
|
||||||
currentTime: 0,
|
currentTime: 0,
|
||||||
|
bufferedTime: 0,
|
||||||
isResetting: false,
|
isResetting: false,
|
||||||
initObject: null,
|
initObject: null,
|
||||||
streamId: null,
|
streamId: null,
|
||||||
|
@ -430,19 +433,25 @@ export default {
|
||||||
updateTrack() {
|
updateTrack() {
|
||||||
var percentDone = this.currentTime / this.totalDuration
|
var percentDone = this.currentTime / this.totalDuration
|
||||||
var totalPercentDone = percentDone
|
var totalPercentDone = percentDone
|
||||||
|
var bufferedPercent = this.bufferedTime / this.totalDuration
|
||||||
|
var totalBufferedPercent = bufferedPercent
|
||||||
|
|
||||||
if (this.useChapterTrack && this.currentChapter) {
|
if (this.useChapterTrack && this.currentChapter) {
|
||||||
var currChapTime = this.currentTime - this.currentChapter.start
|
var currChapTime = this.currentTime - this.currentChapter.start
|
||||||
percentDone = currChapTime / this.currentChapterDuration
|
percentDone = currChapTime / this.currentChapterDuration
|
||||||
|
bufferedPercent = (this.bufferedTime - this.currentChapter.start) / this.currentChapterDuration
|
||||||
}
|
}
|
||||||
var ptWidth = Math.round(percentDone * this.trackWidth)
|
var ptWidth = Math.round(percentDone * this.trackWidth)
|
||||||
if (this.playedTrackWidth === ptWidth) {
|
if (this.playedTrackWidth === ptWidth) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.$refs.playedTrack.style.width = ptWidth + 'px'
|
this.$refs.playedTrack.style.width = ptWidth + 'px'
|
||||||
|
this.$refs.bufferedTrack.style.width = Math.round(bufferedPercent * this.trackWidth) + 'px'
|
||||||
this.playedTrackWidth = ptWidth
|
this.playedTrackWidth = ptWidth
|
||||||
|
|
||||||
if (this.useChapterTrack) {
|
if (this.useChapterTrack) {
|
||||||
this.$refs.totalPlayedTrack.style.width = Math.round(totalPercentDone * this.trackWidth) + 'px'
|
this.$refs.totalPlayedTrack.style.width = Math.round(totalPercentDone * this.trackWidth) + 'px'
|
||||||
|
this.$refs.totalBufferedTrack.style.width = Math.round(totalBufferedPercent * this.trackWidth) + 'px'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
seek(time) {
|
seek(time) {
|
||||||
|
@ -511,6 +520,7 @@ export default {
|
||||||
},
|
},
|
||||||
async set(audiobookStreamData, stream, fromAppDestroy) {
|
async set(audiobookStreamData, stream, fromAppDestroy) {
|
||||||
this.isResetting = false
|
this.isResetting = false
|
||||||
|
this.bufferedTime = 0
|
||||||
this.streamId = stream ? stream.id : null
|
this.streamId = stream ? stream.id : null
|
||||||
this.audiobookId = audiobookStreamData.audiobookId
|
this.audiobookId = audiobookStreamData.audiobookId
|
||||||
this.initObject = { ...audiobookStreamData }
|
this.initObject = { ...audiobookStreamData }
|
||||||
|
@ -601,7 +611,7 @@ export default {
|
||||||
this.playInterval = setInterval(async () => {
|
this.playInterval = setInterval(async () => {
|
||||||
var data = await MyNativeAudio.getCurrentTime()
|
var data = await MyNativeAudio.getCurrentTime()
|
||||||
this.currentTime = Number((data.value / 1000).toFixed(2))
|
this.currentTime = Number((data.value / 1000).toFixed(2))
|
||||||
|
this.bufferedTime = Number((data.bufferedTime / 1000).toFixed(2))
|
||||||
this.timeupdate()
|
this.timeupdate()
|
||||||
}, 1000)
|
}, 1000)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue