From 1a7f90c93bb0d4a9955bb08457dfb84a98149968 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 19 Dec 2021 12:40:52 -0600 Subject: [PATCH] Change:Audio stream buffer times #63 --- .../java/com/audiobookshelf/app/MyNativeAudio.kt | 2 ++ .../audiobookshelf/app/PlayerNotificationService.kt | 12 ++++++++++++ components/app/AudioPlayer.vue | 12 +++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt b/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt index 0266ef89..8fdc01ea 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt @@ -82,8 +82,10 @@ class MyNativeAudio : Plugin() { fun getCurrentTime(call: PluginCall) { Handler(Looper.getMainLooper()).post() { var currentTime = playerNotificationService.getCurrentTime() + var bufferedTime = playerNotificationService.getBufferedTime() val ret = JSObject() ret.put("value", currentTime) + ret.put("bufferedTime", bufferedTime) call.resolve(ret) } } diff --git a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt index e1983873..62e4461a 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt @@ -243,7 +243,15 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { ctx = this // 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) + simpleExoPlayerBuilder.setLoadControl(customLoadControl) simpleExoPlayerBuilder.setSeekBackIncrementMs(10000) simpleExoPlayerBuilder.setSeekForwardIncrementMs(10000) mPlayer = simpleExoPlayerBuilder.build() @@ -694,6 +702,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { return currentPlayer.currentPosition } + fun getBufferedTime() : Long { + return currentPlayer.bufferedPosition + } + fun getTheLastPauseTime() : Long { return lastPauseTime } diff --git a/components/app/AudioPlayer.vue b/components/app/AudioPlayer.vue index ec1940e5..237e10d6 100644 --- a/components/app/AudioPlayer.vue +++ b/components/app/AudioPlayer.vue @@ -23,6 +23,7 @@
+
@@ -71,6 +72,7 @@
+
@@ -114,6 +116,7 @@ export default { totalDuration: 0, currentPlaybackRate: 1, currentTime: 0, + bufferedTime: 0, isResetting: false, initObject: null, streamId: null, @@ -430,19 +433,25 @@ export default { updateTrack() { var percentDone = this.currentTime / this.totalDuration var totalPercentDone = percentDone + var bufferedPercent = this.bufferedTime / this.totalDuration + var totalBufferedPercent = bufferedPercent + if (this.useChapterTrack && this.currentChapter) { var currChapTime = this.currentTime - this.currentChapter.start percentDone = currChapTime / this.currentChapterDuration + bufferedPercent = (this.bufferedTime - this.currentChapter.start) / this.currentChapterDuration } var ptWidth = Math.round(percentDone * this.trackWidth) if (this.playedTrackWidth === ptWidth) { return } this.$refs.playedTrack.style.width = ptWidth + 'px' + this.$refs.bufferedTrack.style.width = Math.round(bufferedPercent * this.trackWidth) + 'px' this.playedTrackWidth = ptWidth if (this.useChapterTrack) { this.$refs.totalPlayedTrack.style.width = Math.round(totalPercentDone * this.trackWidth) + 'px' + this.$refs.totalBufferedTrack.style.width = Math.round(totalBufferedPercent * this.trackWidth) + 'px' } }, seek(time) { @@ -511,6 +520,7 @@ export default { }, async set(audiobookStreamData, stream, fromAppDestroy) { this.isResetting = false + this.bufferedTime = 0 this.streamId = stream ? stream.id : null this.audiobookId = audiobookStreamData.audiobookId this.initObject = { ...audiobookStreamData } @@ -601,7 +611,7 @@ export default { this.playInterval = setInterval(async () => { var data = await MyNativeAudio.getCurrentTime() this.currentTime = Number((data.value / 1000).toFixed(2)) - + this.bufferedTime = Number((data.bufferedTime / 1000).toFixed(2)) this.timeupdate() }, 1000) },