From 1896bca09e088b0da9d5e845407ecebae330618c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 28 Jan 2021 15:52:44 +0100 Subject: Support transcoding options/encoders by plugins --- shared/models/plugins/index.ts | 1 + .../plugins/plugin-transcoding-manager.model.ts | 11 +++++ shared/models/server/custom-config.model.ts | 4 ++ shared/models/server/server-config.model.ts | 6 +++ shared/models/videos/index.ts | 1 + shared/models/videos/video-transcoding.model.ts | 48 ++++++++++++++++++++++ 6 files changed, 71 insertions(+) create mode 100644 shared/models/plugins/plugin-transcoding-manager.model.ts create mode 100644 shared/models/videos/video-transcoding.model.ts (limited to 'shared/models') diff --git a/shared/models/plugins/index.ts b/shared/models/plugins/index.ts index 83ed6f583..96621460a 100644 --- a/shared/models/plugins/index.ts +++ b/shared/models/plugins/index.ts @@ -11,6 +11,7 @@ export * from './plugin-package-json.model' export * from './plugin-playlist-privacy-manager.model' export * from './plugin-settings-manager.model' export * from './plugin-storage-manager.model' +export * from './plugin-transcoding-manager.model' export * from './plugin-translation.model' export * from './plugin-video-category-manager.model' export * from './plugin-video-language-manager.model' diff --git a/shared/models/plugins/plugin-transcoding-manager.model.ts b/shared/models/plugins/plugin-transcoding-manager.model.ts new file mode 100644 index 000000000..ff89687e9 --- /dev/null +++ b/shared/models/plugins/plugin-transcoding-manager.model.ts @@ -0,0 +1,11 @@ +import { EncoderOptionsBuilder } from '../videos/video-transcoding.model' + +export interface PluginTranscodingManager { + addLiveProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addVODProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addLiveEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void + + addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void +} diff --git a/shared/models/server/custom-config.model.ts b/shared/models/server/custom-config.model.ts index a57237414..d23b8abef 100644 --- a/shared/models/server/custom-config.model.ts +++ b/shared/models/server/custom-config.model.ts @@ -87,6 +87,9 @@ export interface CustomConfig { allowAudioFiles: boolean threads: number + + profile: string + resolutions: ConfigResolutions & { '0p': boolean } webtorrent: { @@ -110,6 +113,7 @@ export interface CustomConfig { transcoding: { enabled: boolean threads: number + profile: string resolutions: ConfigResolutions } } diff --git a/shared/models/server/server-config.model.ts b/shared/models/server/server-config.model.ts index 47d0e623b..efde4ad9d 100644 --- a/shared/models/server/server-config.model.ts +++ b/shared/models/server/server-config.model.ts @@ -96,6 +96,9 @@ export interface ServerConfig { } enabledResolutions: number[] + + profile: string + availableProfiles: string[] } live: { @@ -110,6 +113,9 @@ export interface ServerConfig { enabled: boolean enabledResolutions: number[] + + profile: string + availableProfiles: string[] } rtmp: { diff --git a/shared/models/videos/index.ts b/shared/models/videos/index.ts index abf144f23..fac3e0b2f 100644 --- a/shared/models/videos/index.ts +++ b/shared/models/videos/index.ts @@ -34,6 +34,7 @@ export * from './video-state.enum' export * from './video-streaming-playlist.model' export * from './video-streaming-playlist.type' +export * from './video-transcoding.model' export * from './video-transcoding-fps.model' export * from './video-update.model' diff --git a/shared/models/videos/video-transcoding.model.ts b/shared/models/videos/video-transcoding.model.ts new file mode 100644 index 000000000..06b555c16 --- /dev/null +++ b/shared/models/videos/video-transcoding.model.ts @@ -0,0 +1,48 @@ +import { VideoResolution } from './video-resolution.enum' + +// Types used by plugins and ffmpeg-utils + +export type EncoderOptionsBuilder = (params: { + input: string + resolution: VideoResolution + fps?: number + streamNum?: number +}) => Promise | EncoderOptions + +export interface EncoderOptions { + copy?: boolean // Copy stream? Default to false + + outputOptions: string[] +} + +// All our encoders + +export interface EncoderProfile { + [ profile: string ]: T + + default: T +} + +export type AvailableEncoders = { + available: { + live: { + [ encoder: string ]: EncoderProfile + } + + vod: { + [ encoder: string ]: EncoderProfile + } + } + + encodersToTry: { + vod: { + video: string[] + audio: string[] + } + + live: { + video: string[] + audio: string[] + } + } +} -- cgit v1.2.3