]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add plugin transcoding profile guide
authorChocobozzz <me@florianbigard.com>
Fri, 29 Jan 2021 09:23:33 +0000 (10:23 +0100)
committerChocobozzz <me@florianbigard.com>
Fri, 29 Jan 2021 13:05:41 +0000 (14:05 +0100)
server/lib/plugins/register-helpers.ts
shared/models/plugins/plugin-transcoding-manager.model.ts
support/doc/plugins/guide.md

index 3a38a4835626070519ef1ba03a8b3b87b2f40f8b..1f2a88c274d54119e521bc80c8a22d64e4438d75 100644 (file)
@@ -438,6 +438,10 @@ export class RegisterHelpers {
 
       addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number) {
         return addEncoderPriority('vod', streamType, encoder, priority)
+      },
+
+      removeAllProfilesAndEncoderPriorities () {
+        return self.reinitTranscodingProfilesAndEncoders(self.npmName)
       }
     }
   }
index ff89687e950dfe01adbb4d3187f535751ad1e243..7dfb51ddf6653e5f4affe54f0f2786f0a6e2f256 100644 (file)
@@ -8,4 +8,6 @@ export interface PluginTranscodingManager {
   addLiveEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void
 
   addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void
+
+  removeAllProfilesAndEncoderPriorities()
 }
index 0d35820e583a947ae086c70752e92f0179f37e3b..9739d117a95ebceff007fa4a64f08796a71ffc72 100644 (file)
@@ -22,6 +22,7 @@
     - [Translate](#translate)
     - [Get public settings](#get-public-settings)
     - [Add custom fields to video form](#add-custom-fields-to-video-form)
+    - [Add new transcoding profiles](#add-new-transcoding-profiles)
   - [Publishing](#publishing)
 - [Write a plugin/theme](#write-a-plugintheme)
   - [Clone the quickstart repository](#clone-the-quickstart-repository)
@@ -440,7 +441,94 @@ async function register ({
     }
   })
 }
+```
+
+#### Add new transcoding profiles
+
+Adding transcoding profiles allow admins to change ffmpeg encoding parameters and/or encoders.
+A transcoding profile has to be chosen by the admin of the instance using the admin configuration.
 
+```js
+async function register ({
+  transcodingManager
+}) {
+
+  // Adapt bitrate when using libx264 encoder
+  {
+    const builder = (options) => {
+      const { input, resolution, fps, streamNum } = options
+
+      const streamString = streamNum ? ':' + streamNum : ''
+
+      // You can also return a promise
+      return {
+        outputOptions: [
+        // Use a custom bitrate
+          '-b' + streamString + ' 10K'
+        ]
+      }
+    }
+
+    const encoder = 'libx264'
+    const profileName = 'low-quality'
+
+    // Support this profile for VOD transcoding
+    transcodingManager.addVODProfile(encoder, profileName, builder)
+
+    // And/Or support this profile for live transcoding
+    transcodingManager.addLiveProfile(encoder, profileName, builder)
+  }
+
+  {
+    const builder = (options) => {
+      const { streamNum } = options
+
+      const streamString = streamNum ? ':' + streamNum : ''
+
+      // Always copy stream when PeerTube use libfdk_aac or aac encoders
+      return {
+        copy: true
+      }
+    }
+
+    const profileName = 'copy-audio'
+
+    for (const encoder of [ 'libfdk_aac', 'aac' ]) {
+      transcodingManager.addVODProfile(encoder, profileName, builder)
+    }
+  }
+```
+
+PeerTube will try different encoders depending on their priority.
+If the encoder is not available in the current transcoding profile or in ffmpeg, it tries the next one.
+Plugins can change the order of these encoders and add their custom encoders:
+
+```js
+async function register ({
+  transcodingManager
+}) {
+
+  // Adapt bitrate when using libx264 encoder
+  {
+    const builder = () => {
+      return {
+        outputOptions: []
+      }
+    }
+
+    // Support libopus and libvpx-vp9 encoders, just for the example (PeerTube player is only compatible with h264/aac)
+    transcodingManager.addVODProfile('libopus', 'test-vod-profile', builder)
+
+    // Default priorities are ~100
+    // Lowest priority = 1
+    transcodingManager.addVODEncoderPriority('audio', 'libopus', 1000)
+
+    transcodingManager.addVODProfile('libvpx-vp9', 'test-vod-profile', builder)
+    transcodingManager.addVODEncoderPriority('video', 'libvpx-vp9', 1000)
+
+    transcodingManager.addLiveProfile('libopus', 'test-live-profile', builder)
+    transcodingManager.addLiveEncoderPriority('audio', 'libopus', 1000)
+  }
 ```