Update MPEG-TS detection to use HLS.js transmuxing
Changed MPEG-TS (IPTV) stream detection to use HLS.js for transmuxing instead of native playback, as browsers do not natively support MPEG-TS. Updated related tests and marked 'needsSpecialPlayer' as true. Also configured Vite to treat 'hls.js' and 'flv.js' as external dependencies.
This commit is contained in:
@@ -5,16 +5,16 @@ describe('videoProtocol', () => {
|
|||||||
describe('detectVideoProtocol', () => {
|
describe('detectVideoProtocol', () => {
|
||||||
it('should detect MPEG-TS IPTV streams', () => {
|
it('should detect MPEG-TS IPTV streams', () => {
|
||||||
const result = detectVideoProtocol('http://favoritv65.xyz:8080/live/Apollon45/HpjWrDa6gWWd/98925.ts')
|
const result = detectVideoProtocol('http://favoritv65.xyz:8080/live/Apollon45/HpjWrDa6gWWd/98925.ts')
|
||||||
expect(result.protocol).toBe('native')
|
expect(result.protocol).toBe('hls')
|
||||||
expect(result.isLive).toBe(true)
|
expect(result.isLive).toBe(true)
|
||||||
expect(result.needsSpecialPlayer).toBe(false)
|
expect(result.needsSpecialPlayer).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should detect .ts files with query parameters', () => {
|
it('should detect .ts files with query parameters', () => {
|
||||||
const result = detectVideoProtocol('http://example.com/stream/video.ts?token=abc123')
|
const result = detectVideoProtocol('http://example.com/stream/video.ts?token=abc123')
|
||||||
expect(result.protocol).toBe('native')
|
expect(result.protocol).toBe('hls')
|
||||||
expect(result.isLive).toBe(true)
|
expect(result.isLive).toBe(true)
|
||||||
expect(result.needsSpecialPlayer).toBe(false)
|
expect(result.needsSpecialPlayer).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should detect HLS streams', () => {
|
it('should detect HLS streams', () => {
|
||||||
@@ -75,8 +75,8 @@ describe('videoProtocol', () => {
|
|||||||
expect(isHlsStream('http://example.com/stream.m3u8')).toBe(true)
|
expect(isHlsStream('http://example.com/stream.m3u8')).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return false for IPTV .ts streams (they are native, not HLS)', () => {
|
it('should return true for IPTV .ts streams (they use HLS.js for transmuxing)', () => {
|
||||||
expect(isHlsStream('http://favoritv65.xyz:8080/live/user/pass/98925.ts')).toBe(false)
|
expect(isHlsStream('http://favoritv65.xyz:8080/live/user/pass/98925.ts')).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return false for non-HLS streams', () => {
|
it('should return false for non-HLS streams', () => {
|
||||||
|
|||||||
@@ -73,12 +73,13 @@ export const detectVideoProtocol = (src: string): ProtocolDetectionResult => {
|
|||||||
|
|
||||||
// MPEG-TS (IPTV) detection
|
// MPEG-TS (IPTV) detection
|
||||||
// Check for .ts extension (Transport Stream used in IPTV)
|
// Check for .ts extension (Transport Stream used in IPTV)
|
||||||
// Note: These are direct TS streams, not HLS playlists, so we use native playback
|
// Note: These are direct TS streams, not HLS playlists
|
||||||
|
// We use HLS.js to transmux them as browsers don't support MPEG-TS natively
|
||||||
if (lowerSrc.includes('.ts') || lowerSrc.match(/\.ts(\?|$)/)) {
|
if (lowerSrc.includes('.ts') || lowerSrc.match(/\.ts(\?|$)/)) {
|
||||||
return {
|
return {
|
||||||
protocol: 'native', // Use native video element for direct TS streams
|
protocol: 'hls', // Use HLS.js which can handle MPEG-TS transmuxing
|
||||||
isLive: true, // IPTV streams are typically live
|
isLive: true, // IPTV streams are typically live
|
||||||
needsSpecialPlayer: false, // Modern browsers can handle MPEG-TS directly
|
needsSpecialPlayer: true, // Requires HLS.js for MPEG-TS transmuxing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,4 +11,9 @@ export default defineConfig({
|
|||||||
'@': path.resolve(__dirname, './src'),
|
'@': path.resolve(__dirname, './src'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
build: {
|
||||||
|
rollupOptions: {
|
||||||
|
external: ['hls.js', 'flv.js'],
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user