diff --git a/open/ffm3u8_open.js b/open/ffm3u8_open.js index f19f444..d83d80b 100644 --- a/open/ffm3u8_open.js +++ b/open/ffm3u8_open.js @@ -94,38 +94,37 @@ async function proxy(segments, headers, reqHeaders) { let what = segments[0]; let segs = decodeURIComponent(segments[1]); if (what == 'hls') { + function hlsHeader(data, hls) { + let hlsHeaders = {}; + if (data.headers['content-length']) { + Object.assign(hlsHeaders, data.headers, { 'content-length': hls.length.toString() }); + } else { + Object.assign(hlsHeaders, data.headers); + } + delete hlsHeaders['transfer-encoding']; + if (hlsHeaders['content-encoding'] == 'gzip') { + delete hlsHeaders['content-encoding']; + } + return hlsHeaders; + } const hlsData = await hlsCache(segs, headers); if (hlsData.variants) { // variants -> variants -> .... ignore const hls = HLS.stringify(hlsData.plist); - let hlsHeaders = {}; - if (hlsData.headers['content-length']) { - Object.assign(hlsHeaders, hlsData.headers, { 'content-length': hls.length.toString() }); - } else { - Object.assign(hlsHeaders, hlsData.headers); - } - const result = { + return { code: hlsData.code, content: hls, - headers: hlsHeaders, + headers: hlsHeader(hlsData, hls), }; - return result; } else { const hls = HLS.stringify(hlsData.plist, (segment) => { return js2Proxy(false, siteType, siteKey, 'ts/' + encodeURIComponent(hlsData.key + '/' + segment.mediaSequenceNumber.toString()), headers); }); - let hlsHeaders = {}; - if (hlsData.headers['content-length']) { - Object.assign(hlsHeaders, hlsData.headers, { 'content-length': hls.length.toString() }); - } else { - Object.assign(hlsHeaders, hlsData.headers); - } - const result = { + return { code: hlsData.code, content: hls, - headers: hlsHeaders, + headers: hlsHeader(hlsData, hls), }; - return result; } } else if (what == 'ts') { const info = segs.split('/');