fix
This commit is contained in:
@@ -8,3 +8,7 @@ CHANNELS=4df4756104a54e28e967bff6dc08e319:KBS2,8ecd602c251f30fd7f09463e9f55609f:
|
|||||||
# To get these, log in to Chzzk/Naver in your browser, open Developer Tools -> Application -> Cookies.
|
# To get these, log in to Chzzk/Naver in your browser, open Developer Tools -> Application -> Cookies.
|
||||||
# NID_AUT=
|
# NID_AUT=
|
||||||
# NID_SES=
|
# NID_SES=
|
||||||
|
|
||||||
|
# Optional: Limit maximum quality (e.g. 720p or 1080p).
|
||||||
|
# Useful if 1080p causes transcoding lag or errors on Jellyfin.
|
||||||
|
MAX_QUALITY=720p
|
||||||
|
|||||||
@@ -264,9 +264,34 @@ const filterMasterPlaylist = async (m3u8Data, m3u8Url) => {
|
|||||||
|
|
||||||
if (variants.length === 0) return m3u8Data;
|
if (variants.length === 0) return m3u8Data;
|
||||||
|
|
||||||
|
// Filter variants based on MAX_QUALITY env variable if specified
|
||||||
|
let filteredVariants = variants;
|
||||||
|
const maxQualityStr = process.env.MAX_QUALITY;
|
||||||
|
if (maxQualityStr) {
|
||||||
|
const maxQuality = parseInt(maxQualityStr, 10);
|
||||||
|
if (!isNaN(maxQuality)) {
|
||||||
|
filteredVariants = variants.filter(v => {
|
||||||
|
const streamInf = v.headers.find(h => h.startsWith('#EXT-X-STREAM-INF'));
|
||||||
|
let height = 0;
|
||||||
|
if (streamInf) {
|
||||||
|
const match = streamInf.match(/RESOLUTION=\d+x(\d+)/);
|
||||||
|
if (match) height = parseInt(match[1], 10);
|
||||||
|
}
|
||||||
|
if (!height) {
|
||||||
|
const uriMatch = v.uri.match(/\/(\d+)p\//);
|
||||||
|
if (uriMatch) height = parseInt(uriMatch[1], 10);
|
||||||
|
}
|
||||||
|
return !height || height <= maxQuality;
|
||||||
|
});
|
||||||
|
if (filteredVariants.length === 0) {
|
||||||
|
filteredVariants = variants;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Test playability of each variant in parallel
|
// Test playability of each variant in parallel
|
||||||
const checkedVariants = await Promise.all(
|
const checkedVariants = await Promise.all(
|
||||||
variants.map(async (v) => {
|
filteredVariants.map(async (v) => {
|
||||||
try {
|
try {
|
||||||
await axios.get(v.uri, {
|
await axios.get(v.uri, {
|
||||||
headers: buildHeaders(),
|
headers: buildHeaders(),
|
||||||
@@ -282,7 +307,7 @@ const filterMasterPlaylist = async (m3u8Data, m3u8Url) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const playableVariants = checkedVariants.filter(v => v.playable);
|
const playableVariants = checkedVariants.filter(v => v.playable);
|
||||||
const finalVariants = playableVariants.length > 0 ? playableVariants : variants;
|
const finalVariants = playableVariants.length > 0 ? playableVariants : filteredVariants;
|
||||||
|
|
||||||
let output = '#EXTM3U\n#EXT-X-VERSION:7\n#EXT-X-INDEPENDENT-SEGMENTS\n';
|
let output = '#EXTM3U\n#EXT-X-VERSION:7\n#EXT-X-INDEPENDENT-SEGMENTS\n';
|
||||||
finalVariants.forEach(v => {
|
finalVariants.forEach(v => {
|
||||||
|
|||||||
Reference in New Issue
Block a user