From 5c7d650827cc471a03e7fa18362bcbcbe5d30838 Mon Sep 17 00:00:00 2001 From: frankdelange Date: Fri, 1 Nov 2019 02:06:19 +0100 Subject: 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. --- client/src/assets/player/webtorrent/webtorrent-plugin.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'client/src/assets/player/webtorrent') 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 { const currentTime = this.player.currentTime() const isPaused = this.player.paused() - // Remove poster to have black background - this.playerElement.poster = '' - // Hide bigPlayButton if (!isPaused) { this.player.bigPlayButton.hide() } + // Audio-only (resolutionId == 0) gets special treatment + if (resolutionId > 0) { + // Hide poster to have black background + this.player.removeClass('vjs-playing-audio-only-content') + this.player.posterImage.hide() + } else { + // Audio-only: show poster, do not auto-hide controls + this.player.addClass('vjs-playing-audio-only-content') + this.player.posterImage.show() + } + const newVideoFile = this.videoFiles.find(f => f.resolution.id === resolutionId) const options = { forcePlay: false, delay, seek: currentTime + (delay / 1000) } + this.updateVideoFile(newVideoFile, options) } @@ -327,6 +336,7 @@ class WebTorrentPlugin extends Plugin { this.player.posterImage.show() this.player.removeClass('vjs-has-autoplay') this.player.removeClass('vjs-has-big-play-button-clicked') + this.player.removeClass('vjs-playing-audio-only-content') return done() }) -- cgit v1.2.3