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. --- shared/extra-utils/server/config.ts | 1 + shared/models/server/custom-config.model.ts | 1 + shared/models/videos/video-resolution.enum.ts | 5 +++++ 3 files changed, 7 insertions(+) (limited to 'shared') diff --git a/shared/extra-utils/server/config.ts b/shared/extra-utils/server/config.ts index ada173313..35b08477f 100644 --- a/shared/extra-utils/server/config.ts +++ b/shared/extra-utils/server/config.ts @@ -111,6 +111,7 @@ function updateCustomSubConfig (url: string, token: string, newConfig: DeepParti allowAudioFiles: true, threads: 1, resolutions: { + '0p': false, '240p': false, '360p': true, '480p': true, diff --git a/shared/models/server/custom-config.model.ts b/shared/models/server/custom-config.model.ts index 97972b759..032b91a29 100644 --- a/shared/models/server/custom-config.model.ts +++ b/shared/models/server/custom-config.model.ts @@ -75,6 +75,7 @@ export interface CustomConfig { threads: number resolutions: { + '0p': boolean '240p': boolean '360p': boolean '480p': boolean diff --git a/shared/models/videos/video-resolution.enum.ts b/shared/models/videos/video-resolution.enum.ts index fa26fc3cc..dc53294f6 100644 --- a/shared/models/videos/video-resolution.enum.ts +++ b/shared/models/videos/video-resolution.enum.ts @@ -1,6 +1,7 @@ import { VideoTranscodingFPS } from './video-transcoding-fps.model' export enum VideoResolution { + H_NOVIDEO = 0, H_240P = 240, H_360P = 360, H_480P = 480, @@ -18,6 +19,10 @@ export enum VideoResolution { */ function getBaseBitrate (resolution: VideoResolution) { switch (resolution) { + case VideoResolution.H_NOVIDEO: + // audio-only + return 64 * 1000 + case VideoResolution.H_240P: // quality according to Google Live Encoder: 300 - 700 Kbps // Quality according to YouTube Video Info: 186 Kbps -- cgit v1.2.3