peertube-plugin-ffmpeg-vaapi 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Théo Le Calvar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # Hardware h264 encoding using vaapi
2
+
3
+ ### Original Project Description
4
+ This plugin is designed to enable hardware-accelerated transcoding profiles using VAAPI (Video Acceleration API) on Linux systems. It's important to note that this is an experimental test project , and significant tinkering will likely be necessary to get it working properly with your specific hardware configuration.
5
+
6
+ For more information on vaapi and hardware acceleration:
7
+
8
+ - https://jellyfin.org/docs/general/administration/hardware-acceleration.html#enabling-hardware-acceleration
9
+ - https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Comparison_tables
10
+
11
+ ## Running the Docker image
12
+
13
+ Official PeerTube Docker images do **not** ship with the required libraries for hardware transcoding.
14
+ To enable VAAPI hardware acceleration, you must use the **custom image** provided by this repository.
15
+
16
+ ### Image selection
17
+
18
+ - **Intel Gen 8 and newer** → use the `ihd` image tag
19
+ - **Intel Gen 7 and older** → use the `i965` image tag
20
+
21
+ Replace `chocobozzz/peertube:production-trixie` with `ghcr.io/althafvly/peertube-vaapi:production-trixie-ihd` or `ghcr.io/althafvly/peertube-vaapi:production-trixie-i965`
22
+
23
+ ### Render group ID
24
+
25
+ The container must be added to the host `render` group.
26
+ You need to provide the **numeric ID** of this group.
27
+
28
+ You can retrieve it with the following command:
29
+
30
+ ```bash
31
+ grep "$(ls -l /dev/dri/renderD128 | awk '{print($4)}')" /etc/group | cut -d':' -f3
32
+ ```
33
+
34
+ ```yaml
35
+ # usual peertube configuration
36
+ # ...
37
+
38
+ # add these keys
39
+ group_add:
40
+ - <replace with the id of the render group>
41
+ devices:
42
+ # VAAPI Devices
43
+ - /dev/dri:/dev/dri
44
+ ```
package/dist/main.js ADDED
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unregister = exports.register = void 0;
4
+ let logger;
5
+ let transcodingManager;
6
+ const DEFAULT_HARDWARE_DECODE = false;
7
+ const DEFAULT_QUALITY = -1;
8
+ const DEFAULT_BITRATES = new Map([
9
+ [0, 64 * 1000],
10
+ [144, 320 * 1000],
11
+ [360, 780 * 1000],
12
+ [480, 1500 * 1000],
13
+ [720, 2800 * 1000],
14
+ [1080, 5200 * 1000],
15
+ [1440, 10000 * 1000],
16
+ [2160, 22000 * 1000]
17
+ ]);
18
+ let pluginSettings = {
19
+ hardwareDecode: DEFAULT_HARDWARE_DECODE,
20
+ quality: DEFAULT_QUALITY,
21
+ baseBitrate: new Map(DEFAULT_BITRATES)
22
+ };
23
+ let latestStreamNum = 9999;
24
+ async function register({ settingsManager, peertubeHelpers, transcodingManager: transcode, registerSetting }) {
25
+ logger = peertubeHelpers.logger;
26
+ transcodingManager = transcode;
27
+ logger.info("Registering peertube-plugin-hardware-encode");
28
+ const encoder = 'h264_vaapi';
29
+ const profileName = 'vaapi';
30
+ transcodingManager.addVODProfile(encoder, profileName, vodBuilder);
31
+ transcodingManager.addVODEncoderPriority('video', encoder, 1000);
32
+ transcodingManager.addLiveProfile(encoder, profileName, liveBuilder);
33
+ transcodingManager.addLiveEncoderPriority('video', encoder, 1000);
34
+ await loadSettings(settingsManager);
35
+ registerSetting({
36
+ name: 'hardware-decode',
37
+ label: 'Hardware decode',
38
+ type: 'input-checkbox',
39
+ descriptionHTML: 'Use hardware video decoder instead of software decoder. This will slightly improve performance but may cause some issues with some videos. If you encounter issues, disable this option and restart failed jobs.',
40
+ default: DEFAULT_HARDWARE_DECODE,
41
+ private: false
42
+ });
43
+ registerSetting({
44
+ name: 'quality',
45
+ label: 'Quality',
46
+ type: 'select',
47
+ options: [
48
+ { label: 'Automatic', value: '-1' },
49
+ { label: '1', value: '1' },
50
+ { label: '2', value: '2' },
51
+ { label: '3', value: '3' },
52
+ { label: '4', value: '4' },
53
+ { label: '5', value: '5' },
54
+ { label: '6', value: '6' },
55
+ { label: '7', value: '7' }
56
+ ],
57
+ descriptionHTML: 'This parameter controls the speed / quality tradeoff. Lower values mean better quality but slower encoding. Higher values mean faster encoding but lower quality. This setting is hardware dependent, you may need to experiment to find the best value for your hardware. Some hardware may have less than 7 levels of compression.',
58
+ default: DEFAULT_QUALITY.toString(),
59
+ private: false
60
+ });
61
+ registerSetting({
62
+ name: 'base-bitrate-description',
63
+ label: 'Base bitrate',
64
+ type: 'html',
65
+ html: '',
66
+ descriptionHTML: `The base bitrate for video in bits. We take the min bitrate between the bitrate setting and video bitrate.<br/>This is the bitrate used when the video is transcoded at 30 FPS. The bitrate will be scaled linearly between this value and the maximum bitrate when the video is transcoded at 60 FPS. Wrong values are replaced by default values.`,
67
+ private: true,
68
+ });
69
+ for (const [resolution, bitrate] of pluginSettings.baseBitrate) {
70
+ logger.info("registering bitrate setting: " + bitrate.toString());
71
+ registerSetting({
72
+ name: `base-bitrate-${resolution}`,
73
+ label: `Base bitrate for ${printResolution(resolution)}`,
74
+ type: 'input',
75
+ default: DEFAULT_BITRATES.get(resolution)?.toString(),
76
+ descriptionHTML: `Default value: ${DEFAULT_BITRATES.get(resolution)}`,
77
+ private: false
78
+ });
79
+ }
80
+ settingsManager.onSettingsChange(async (settings) => {
81
+ loadSettings(settingsManager);
82
+ });
83
+ }
84
+ exports.register = register;
85
+ async function unregister() {
86
+ logger.info("Unregistering peertube-plugin-hardware-encode");
87
+ transcodingManager.removeAllProfilesAndEncoderPriorities();
88
+ return true;
89
+ }
90
+ exports.unregister = unregister;
91
+ async function loadSettings(settingsManager) {
92
+ pluginSettings.hardwareDecode = await settingsManager.getSetting('hardware-decode') == "true";
93
+ pluginSettings.quality = parseInt(await settingsManager.getSetting('quality')) || DEFAULT_QUALITY;
94
+ for (const [resolution, bitrate] of DEFAULT_BITRATES) {
95
+ const key = `base-bitrate-${resolution}`;
96
+ const storedValue = await settingsManager.getSetting(key);
97
+ pluginSettings.baseBitrate.set(resolution, parseInt(storedValue) || bitrate);
98
+ logger.info(`Bitrate ${printResolution(resolution)}: ${pluginSettings.baseBitrate.get(resolution)}`);
99
+ }
100
+ logger.info(`Hardware decode: ${pluginSettings.hardwareDecode}`);
101
+ logger.info(`Quality: ${pluginSettings.quality}`);
102
+ }
103
+ function printResolution(resolution) {
104
+ switch (resolution) {
105
+ case 0: return 'audio only';
106
+ case 144:
107
+ case 360:
108
+ case 480:
109
+ case 720:
110
+ case 1080:
111
+ case 1440:
112
+ return `${resolution}p`;
113
+ case 2160: return '4K';
114
+ default: return 'Unknown';
115
+ }
116
+ }
117
+ function buildInitOptions() {
118
+ if (pluginSettings.hardwareDecode) {
119
+ return [
120
+ '-hwaccel vaapi',
121
+ '-vaapi_device /dev/dri/renderD128',
122
+ '-hwaccel_output_format vaapi',
123
+ ];
124
+ }
125
+ else {
126
+ return [
127
+ '-vaapi_device /dev/dri/renderD128'
128
+ ];
129
+ }
130
+ }
131
+ async function vodBuilder(params) {
132
+ const { resolution, fps, streamNum, inputBitrate } = params;
133
+ const streamSuffix = streamNum == undefined ? '' : `:${streamNum}`;
134
+ let targetBitrate = getTargetBitrate(resolution, fps);
135
+ let shouldInitVaapi = (streamNum == undefined || streamNum <= latestStreamNum);
136
+ if (targetBitrate > inputBitrate) {
137
+ targetBitrate = inputBitrate;
138
+ }
139
+ logger.info(`Building encoder options, received ${JSON.stringify(params)}`);
140
+ if (shouldInitVaapi && streamNum != undefined) {
141
+ latestStreamNum = streamNum;
142
+ }
143
+ let options = {
144
+ scaleFilter: {
145
+ name: pluginSettings.hardwareDecode ? 'scale_vaapi' : 'format=nv12,hwupload,scale_vaapi'
146
+ },
147
+ inputOptions: shouldInitVaapi ? buildInitOptions() : [],
148
+ outputOptions: [
149
+ `-quality ${pluginSettings.quality}`,
150
+ `-b:v${streamSuffix} ${targetBitrate}`,
151
+ `-bufsize ${targetBitrate * 2}`
152
+ ]
153
+ };
154
+ logger.info(`EncoderOptions: ${JSON.stringify(options)}`);
155
+ return options;
156
+ }
157
+ async function liveBuilder(params) {
158
+ const { resolution, fps, streamNum, inputBitrate } = params;
159
+ const streamSuffix = streamNum == undefined ? '' : `:${streamNum}`;
160
+ let targetBitrate = getTargetBitrate(resolution, fps);
161
+ let shouldInitVaapi = (streamNum == undefined || streamNum <= latestStreamNum);
162
+ if (targetBitrate > inputBitrate) {
163
+ targetBitrate = inputBitrate;
164
+ }
165
+ logger.info(`Building encoder options, received ${JSON.stringify(params)}`);
166
+ if (shouldInitVaapi && streamNum != undefined) {
167
+ latestStreamNum = streamNum;
168
+ }
169
+ const options = {
170
+ scaleFilter: {
171
+ name: pluginSettings.hardwareDecode ? 'scale_vaapi' : 'format=nv12,hwupload,scale_vaapi'
172
+ },
173
+ inputOptions: shouldInitVaapi ? buildInitOptions() : [],
174
+ outputOptions: [
175
+ `-quality ${pluginSettings.quality}`,
176
+ `-r:v${streamSuffix} ${fps}`,
177
+ `-profile:v${streamSuffix} high`,
178
+ `-level:v${streamSuffix} 3.1`,
179
+ `-g:v${streamSuffix} ${fps * 2}`,
180
+ `-b:v${streamSuffix} ${targetBitrate}`,
181
+ `-bufsize ${targetBitrate * 2}`
182
+ ]
183
+ };
184
+ logger.info(`EncoderOptions: ${JSON.stringify(options)}`);
185
+ return options;
186
+ }
187
+ function getTargetBitrate(resolution, fps) {
188
+ const baseBitrate = pluginSettings.baseBitrate.get(resolution) || 0;
189
+ const maxBitrate = baseBitrate * 1.4;
190
+ const maxBitrateDifference = maxBitrate - baseBitrate;
191
+ const maxFpsDifference = 60 - 30;
192
+ return Math.floor(baseBitrate + (fps - 30) * (maxBitrateDifference / maxFpsDifference));
193
+ }
194
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "peertube-plugin-ffmpeg-vaapi",
3
+ "version": "0.3.0",
4
+ "license": "MIT",
5
+ "description": "Plugin that adds transcode profiles which use vaapi for hardware acceleration",
6
+ "engine": {
7
+ "peertube": ">=5.1.0"
8
+ },
9
+ "keywords": [
10
+ "peertube",
11
+ "plugin"
12
+ ],
13
+ "homepage": "https://github.com/althafvly/peertube-vaapi",
14
+ "author": "althafvly (based on original work by gdsn)",
15
+ "bugs": "https://github.com/althafvly/peertube-vaapi/issues",
16
+ "library": "./dist/main.js",
17
+ "files": [
18
+ "/dist"
19
+ ],
20
+ "staticDirs": {},
21
+ "css": [],
22
+ "clientScripts": [],
23
+ "translations": {},
24
+ "scripts": {
25
+ "clean": "rm -rf dist/*",
26
+ "prepare": "npm run build",
27
+ "build": "npx tsc --build src/tsconfig.json",
28
+ "watch": "npx tsc --build src/tsconfig.json --watch"
29
+ },
30
+ "devDependencies": {
31
+ "@peertube/peertube-types": "^5.1.0",
32
+ "@tsconfig/node16": "^1.0.3",
33
+ "typescript": "^5.0.4"
34
+ }
35
+ }