aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src
diff options
context:
space:
mode:
authorfrankdelange <yetangitu-f@unternet.org>2019-11-01 02:06:19 +0100
committerChocobozzz <me@florianbigard.com>2019-11-25 10:59:47 +0100
commit5c7d650827cc471a03e7fa18362bcbcbe5d30838 (patch)
tree41c96e3c9e2dcd4f15166e4f13b427ef116ea4f1 /client/src
parentdee6fe1e4f5c024fd387e8c2b306c174b24aa8b3 (diff)
downloadPeerTube-5c7d650827cc471a03e7fa18362bcbcbe5d30838.tar.gz
PeerTube-5c7d650827cc471a03e7fa18362bcbcbe5d30838.tar.zst
PeerTube-5c7d650827cc471a03e7fa18362bcbcbe5d30838.zip
Add audio-only option to transcoders and player
This patch adds an audio-only option to PeerTube by means of a new transcoding configuration which creates mp4 files which only contain an audio stream. This new transcoder has a resolution of '0' and is presented in the preferences and in the player resolution menu as 'Audio-only' (localised). When playing such streams the player shows the file thumbnail as background and disables controls autohide. Audio-only files can be shared and streamed just like any other file. They can be downloaded as well, the resulting file will be an mp4 container with a single audio stream. This patch is a proof of concept to show the feasibility of 'true' audio-only support. There are better ways of doing this which also enable multiple audio streams for a given video stream (e.g. DASH) but as this would entail a fundamental change in the way PeerTube works it is a bridge too far for a simple proof of concept.
Diffstat (limited to 'client/src')
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts4
-rw-r--r--client/src/assets/player/videojs-components/resolution-menu-button.ts2
-rw-r--r--client/src/assets/player/webtorrent/webtorrent-plugin.ts16
3 files changed, 18 insertions, 4 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
index 8411c4f4f..5f23c80a2 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
@@ -36,6 +36,10 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
36 super() 36 super()
37 37
38 this.resolutions = [ 38 this.resolutions = [
39 {
40 id: '0p',
41 label: this.i18n('Audio-only')
42 },
39 { 43 {
40 id: '240p', 44 id: '240p',
41 label: this.i18n('240p') 45 label: this.i18n('240p')
diff --git a/client/src/assets/player/videojs-components/resolution-menu-button.ts b/client/src/assets/player/videojs-components/resolution-menu-button.ts
index aeb48888f..445b14b2b 100644
--- a/client/src/assets/player/videojs-components/resolution-menu-button.ts
+++ b/client/src/assets/player/videojs-components/resolution-menu-button.ts
@@ -79,7 +79,7 @@ class ResolutionMenuButton extends MenuButton {
79 this.player_, 79 this.player_,
80 { 80 {
81 id: d.id, 81 id: d.id,
82 label: d.label, 82 label: d.id == 0 ? this.player .localize('Audio-only') : d.label,
83 selected: d.selected, 83 selected: d.selected,
84 callback: data.qualitySwitchCallback 84 callback: data.qualitySwitchCallback
85 }) 85 })
diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
index 4a0b38703..007fc58cc 100644
--- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts
+++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
@@ -181,20 +181,29 @@ class WebTorrentPlugin extends Plugin {
181 const currentTime = this.player.currentTime() 181 const currentTime = this.player.currentTime()
182 const isPaused = this.player.paused() 182 const isPaused = this.player.paused()
183 183
184 // Remove poster to have black background
185 this.playerElement.poster = ''
186
187 // Hide bigPlayButton 184 // Hide bigPlayButton
188 if (!isPaused) { 185 if (!isPaused) {
189 this.player.bigPlayButton.hide() 186 this.player.bigPlayButton.hide()
190 } 187 }
191 188
189 // Audio-only (resolutionId == 0) gets special treatment
190 if (resolutionId > 0) {
191 // Hide poster to have black background
192 this.player.removeClass('vjs-playing-audio-only-content')
193 this.player.posterImage.hide()
194 } else {
195 // Audio-only: show poster, do not auto-hide controls
196 this.player.addClass('vjs-playing-audio-only-content')
197 this.player.posterImage.show()
198 }
199
192 const newVideoFile = this.videoFiles.find(f => f.resolution.id === resolutionId) 200 const newVideoFile = this.videoFiles.find(f => f.resolution.id === resolutionId)
193 const options = { 201 const options = {
194 forcePlay: false, 202 forcePlay: false,
195 delay, 203 delay,
196 seek: currentTime + (delay / 1000) 204 seek: currentTime + (delay / 1000)
197 } 205 }
206
198 this.updateVideoFile(newVideoFile, options) 207 this.updateVideoFile(newVideoFile, options)
199 } 208 }
200 209
@@ -327,6 +336,7 @@ class WebTorrentPlugin extends Plugin {
327 this.player.posterImage.show() 336 this.player.posterImage.show()
328 this.player.removeClass('vjs-has-autoplay') 337 this.player.removeClass('vjs-has-autoplay')
329 this.player.removeClass('vjs-has-big-play-button-clicked') 338 this.player.removeClass('vjs-has-big-play-button-clicked')
339 this.player.removeClass('vjs-playing-audio-only-content')
330 340
331 return done() 341 return done()
332 }) 342 })