mirror of https://github.com/Chocobozzz/PeerTube
Fix plugin api guide transcoding section
parent
fbd51e69f2
commit
7aca6b249a
|
@ -14,6 +14,7 @@
|
||||||
- [Update video constants](#update-video-constants)
|
- [Update video constants](#update-video-constants)
|
||||||
- [Add custom routes](#add-custom-routes)
|
- [Add custom routes](#add-custom-routes)
|
||||||
- [Add external auth methods](#add-external-auth-methods)
|
- [Add external auth methods](#add-external-auth-methods)
|
||||||
|
- [Add new transcoding profiles](#add-new-transcoding-profiles)
|
||||||
- [Client helpers (themes & plugins)](#client-helpers-themes--plugins)
|
- [Client helpers (themes & plugins)](#client-helpers-themes--plugins)
|
||||||
- [Plugin static route](#plugin-static-route)
|
- [Plugin static route](#plugin-static-route)
|
||||||
- [Notifier](#notifier)
|
- [Notifier](#notifier)
|
||||||
|
@ -22,7 +23,6 @@
|
||||||
- [Translate](#translate)
|
- [Translate](#translate)
|
||||||
- [Get public settings](#get-public-settings)
|
- [Get public settings](#get-public-settings)
|
||||||
- [Add custom fields to video form](#add-custom-fields-to-video-form)
|
- [Add custom fields to video form](#add-custom-fields-to-video-form)
|
||||||
- [Add new transcoding profiles](#add-new-transcoding-profiles)
|
|
||||||
- [Publishing](#publishing)
|
- [Publishing](#publishing)
|
||||||
- [Write a plugin/theme](#write-a-plugintheme)
|
- [Write a plugin/theme](#write-a-plugintheme)
|
||||||
- [Clone the quickstart repository](#clone-the-quickstart-repository)
|
- [Clone the quickstart repository](#clone-the-quickstart-repository)
|
||||||
|
@ -304,6 +304,94 @@ router.use('/external-auth-callback', (req, res) => {
|
||||||
unregisterExternalAuth('my-auth-method)
|
unregisterExternalAuth('my-auth-method)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 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 (these codecs could be incompatible with the player)
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Client helpers (themes & plugins)
|
### Client helpers (themes & plugins)
|
||||||
|
|
||||||
#### Plugin static route
|
#### Plugin static route
|
||||||
|
@ -442,96 +530,6 @@ 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 (these codecs could be incompatible with the player)
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Publishing
|
### Publishing
|
||||||
|
|
||||||
PeerTube plugins and themes should be published on [NPM](https://www.npmjs.com/) so that PeerTube indexes
|
PeerTube plugins and themes should be published on [NPM](https://www.npmjs.com/) so that PeerTube indexes
|
||||||
|
|
Loading…
Reference in New Issue