mirror of https://github.com/Chocobozzz/PeerTube
Try to support other codecs
parent
e25f83ce21
commit
789951460b
|
@ -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 })
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue