51 lines
2.4 KiB
JavaScript
51 lines
2.4 KiB
JavaScript
"use-strict";
|
|
const { BMiscInfo } = require("./RadioMiscInfo.js")
|
|
const { EDisplayType } = require("./RadioPreview.js")
|
|
|
|
const CODEC_WARNINGS = {
|
|
"video/mp4": [
|
|
[ "warn", "avc1", "vague, however browsers will accept it. See MDN for format details" ],
|
|
[ "error", "mp4a", "too vague; Browsers will not accept it! See MDN for format details" ],
|
|
[ "error", "aac", "invalid! The correct codec is mp4a. See MDN for format details" ]
|
|
]
|
|
}
|
|
|
|
const CODEC_SUGGESTIONS = {
|
|
"video/mp4": 'codecs may be "avc1" with "mp4a.40.2" (AAC-LC)',
|
|
"audio/mp3": 'codec is probably "mp3"'
|
|
}
|
|
|
|
const mediaItemsLint = mediaItems => {
|
|
for (const item of mediaItems) {
|
|
const hasAudioSource = item.sources.some(a => a.type.startsWith("audio/"))
|
|
for (const index in item.sources) {
|
|
const source = item.sources[index]
|
|
|
|
if (!hasAudioSource && source.type.startsWith("video/") && !source.previews.some(item => item.display_type != EDisplayType.NATIVE)) {
|
|
const logType = (item?.misc & BMiscInfo.ALT_MEDIA) ? "warn" : "error"
|
|
console.warn(`${logType[0].toUpperCase()}: [previews] [${item.id}:${index}] No audio fallback preview set!`)
|
|
}
|
|
|
|
if (source.codecs?.length)
|
|
for (const [ logType, codec, reason ] of (Object.hasOwn(CODEC_WARNINGS, source.type) ? CODEC_WARNINGS[source.type] : [])) {
|
|
if (!source.codecs.includes(codec))
|
|
continue
|
|
const msg = `${logType[0].toUpperCase()}: [codecs] [${item.id}:${index}] The declaration "${codec}" is ${reason}`
|
|
console[logType](msg)
|
|
}
|
|
else
|
|
console.warn(`W: [codecs] [${item.id}:${index}] No codec declarations are set!${Object.hasOwn(CODEC_SUGGESTIONS, source.type)?` The ${CODEC_SUGGESTIONS[source.type]}, check with ffprobe.`:''}`)
|
|
|
|
for (const p_index in source.previews) {
|
|
const preview = item.sources[index].previews[p_index]
|
|
if (!preview.type)
|
|
console.warn(`W: [previews] [${item.id}:${index}] No type set for preview ${p_index} source ${index} of ${item.id}`)
|
|
if (!preview.size)
|
|
console.warn(`W: [previews] [${item.id}:${index}] No size set for preview ${p_index} source ${index} of ${item.id}`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = { mediaItemsLint }
|