Add "Play at 128kbps on mobile" setting

This commit is contained in:
An Phan 2017-03-26 17:02:03 +08:00
parent 52cc7ea884
commit 96e5c62ce0
No known key found for this signature in database
GPG key ID: 05536BB4BCDC02A2
7 changed files with 21 additions and 4 deletions

View file

@ -39,6 +39,7 @@ class DataController extends Controller
'useYouTube' => YouTube::enabled(),
'useiTunes' => iTunes::used(),
'allowDownload' => config('koel.download.allow'),
'supportsTranscoding' => config('koel.streaming.ffmpeg_path') && is_executable(config('koel.streaming.ffmpeg_path')),
'cdnUrl' => app()->staticUrl(),
'currentVersion' => Application::KOEL_VERSION,
'latestVersion' => auth()->user()->is_admin ? app()->getLatestVersion() : Application::KOEL_VERSION,

View file

@ -32,7 +32,7 @@ class TranscodingStreamer extends Streamer implements StreamerInterface
*/
public function stream()
{
$ffmpeg = config('koel.streaming.transcoding');
$ffmpeg = config('koel.streaming.ffmpeg_path');
abort_unless(is_executable($ffmpeg), 500, 'Transcoding requires valid ffmpeg settings.');
$bitRate = filter_var($this->bitRate, FILTER_SANITIZE_NUMBER_INT);

View file

@ -44,7 +44,7 @@ return [
'streaming' => [
'bitrate' => env('OUTPUT_BIT_RATE', 128),
'method' => env('STREAMING_METHOD'),
'transcoding' => env('FFMPEG_PATH', '/usr/local/bin/ffmpeg'),
'ffmpeg_path' => env('FFMPEG_PATH'),
],
/*

View file

@ -51,6 +51,12 @@
Confirm before closing Koel
</label>
</div>
<div class="form-row">
<label>
<input type="checkbox" name="transcodeOnMobile" v-model="prefs.transcodeOnMobile" @change="savePreference">
Convert and play media at 128kbps on mobile
</label>
</div>
</div>
<section class="lastfm" >

View file

@ -1,6 +1,7 @@
import { shuffle, orderBy } from 'lodash'
import plyr from 'plyr'
import Vue from 'vue'
import isMobile from 'ismobilejs'
import { event } from '../utils'
import { queueStore, sharedStore, userStore, songStore, preferenceStore as preferences } from '../stores'
@ -55,7 +56,11 @@ export const playback = {
*/
document.querySelector('.plyr').addEventListener('canplaythrough', e => {
const nextSong = queueStore.next
if (!nextSong || nextSong.preloaded) {
if (!nextSong || nextSong.preloaded || (isMobile.any && preferences.transcodeOnMobile)) {
// Don't preload if
// - there's no next song
// - next song has already been preloaded
// - we're on mobile and "transcode" option is check, because it will break the functionality
return
}

View file

@ -18,7 +18,8 @@ export const preferenceStore = {
},
artistsViewMode: null,
albumsViewMode: null,
selectedPreset: -1
selectedPreset: -1,
transcodeOnMobile: false
},
/**

View file

@ -1,6 +1,7 @@
import Vue from 'vue'
import slugify from 'slugify'
import { without, map, take, remove, orderBy, each, union, compact } from 'lodash'
import isMobile from 'ismobilejs'
import { secondsToHis, alerts, pluralize } from '../utils'
import { http, ls } from '../services'
@ -338,6 +339,9 @@ export const songStore = {
* @return {string} The source URL, with JWT token appended.
*/
getSourceUrl (song) {
if (isMobile.any && preferenceStore.transcodeOnMobile) {
return `${sharedStore.state.cdnUrl}api/${song.id}/play/1/128?jwt-token=${ls.get('jwt-token')}`
}
return `${sharedStore.state.cdnUrl}api/${song.id}/play?jwt-token=${ls.get('jwt-token')}`
},