1
0
Fork 0

Try to support other codecs

This commit is contained in:
Chocobozzz 2021-01-29 13:57:17 +01:00
parent e25f83ce21
commit 789951460b
No known key found for this signature in database
GPG key ID: 583A612D890159BE
3 changed files with 29 additions and 9 deletions

View file

@ -91,18 +91,35 @@ async function getVideoStreamCodec (path: string) {
const videoCodec = videoStream.codec_tag_string const videoCodec = videoStream.codec_tag_string
if (videoCodec === 'vp09') return 'vp09.00.50.08'
const baseProfileMatrix = { const baseProfileMatrix = {
High: '6400', avc1: {
Main: '4D40', High: '6400',
Baseline: '42E0' Main: '4D40',
Baseline: '42E0'
},
av01: {
High: '1',
Main: '0',
Professional: '2'
}
} }
let baseProfile = baseProfileMatrix[videoStream.profile] let baseProfile = baseProfileMatrix[videoCodec][videoStream.profile]
if (!baseProfile) { if (!baseProfile) {
logger.warn('Cannot get video profile codec of %s.', path, { videoStream }) logger.warn('Cannot get video profile codec of %s.', path, { videoStream })
baseProfile = baseProfileMatrix['High'] // Fallback baseProfile = baseProfileMatrix[videoCodec]['High'] // Fallback
} }
if (videoCodec === 'av01') {
const level = videoStream.level
// Guess the tier indicator and bit depth
return `${videoCodec}.${baseProfile}.${level}M.08`
}
// Default, h264 codec
let level = videoStream.level.toString(16) let level = videoStream.level.toString(16)
if (level.length === 1) level = `0${level}` if (level.length === 1) level = `0${level}`
@ -114,8 +131,11 @@ async function getAudioStreamCodec (path: string, existingProbe?: ffmpeg.Ffprobe
if (!audioStream) return '' if (!audioStream) return ''
const audioCodec = audioStream.codec_name const audioCodecName = audioStream.codec_name
if (audioCodec === 'aac') return 'mp4a.40.2'
if (audioCodecName === 'opus') return 'opus'
if (audioCodecName === 'vorbis') return 'vorbis'
if (audioCodecName === 'aac') return 'mp4a.40.2'
logger.warn('Cannot get audio codec of %s.', path, { audioStream }) logger.warn('Cannot get audio codec of %s.', path, { audioStream })

View file

@ -9,5 +9,5 @@ export interface PluginTranscodingManager {
addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void
removeAllProfilesAndEncoderPriorities() removeAllProfilesAndEncoderPriorities(): void
} }

View file

@ -516,7 +516,7 @@ async function register ({
} }
} }
// Support libopus and libvpx-vp9 encoders, just for the example (PeerTube player is only compatible with h264/aac) // Support libopus and libvpx-vp9 encoders (these codecs could be incompatible with the player)
transcodingManager.addVODProfile('libopus', 'test-vod-profile', builder) transcodingManager.addVODProfile('libopus', 'test-vod-profile', builder)
// Default priorities are ~100 // Default priorities are ~100