diff --git a/package-lock.json b/package-lock.json index 0af01715e..858de1294 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,6 @@ "artplayer": "5.3.0", "axios": "1.12.2", "date-fns": "2.29.3", - "dplayer": "1.27.1", "epg-parser": "0.1.6", "hls.js": "1.6.13", "iptv-playlist-parser": "github:4gray/iptv-playlist-parser", @@ -85,7 +84,6 @@ "@semantic-release/git": "10.0.1", "@semantic-release/npm": "12.0.1", "@tauri-apps/cli": "2.3.1", - "@types/dplayer": "1.25.5", "@types/jest": "29.5.14", "@types/mocha": "9.0.0", "@types/node": "20.10.0", @@ -115,7 +113,7 @@ "wait-on": "6.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=20.8.1" } }, "node_modules/@algolia/abtesting": { @@ -8374,12 +8372,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/dplayer": { - "version": "1.25.5", - "resolved": "https://registry.npmjs.org/@types/dplayer/-/dplayer-1.25.5.tgz", - "integrity": "sha512-p/7O94dHDo0Irn2KWIqFE+fBCA4DS7QL3jfCOjCUPBAOgppyyTjmNZjKEfiJa1M3n1oVQqG7xnPwhiIuCqOzkQ==", - "dev": true - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -9786,11 +9778,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/balloon-css": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/balloon-css/-/balloon-css-1.2.0.tgz", - "integrity": "sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==" - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -11973,26 +11960,6 @@ "node": ">=8" } }, - "node_modules/dplayer": { - "version": "1.27.1", - "resolved": "https://registry.npmjs.org/dplayer/-/dplayer-1.27.1.tgz", - "integrity": "sha512-2laBMXs5V1B9zPwJ7eAIw/OBo+Xjvy03i4GHTk3Cg+IWbrq8rKMFO0fFr6ClAYotYOCcFGOvaJDkOZcgKllsCA==", - "dependencies": { - "axios": "1.2.3", - "balloon-css": "^1.0.3", - "promise-polyfill": "8.3.0" - } - }, - "node_modules/dplayer/node_modules/axios": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.3.tgz", - "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -23420,11 +23387,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", diff --git a/package.json b/package.json index a0fe42872..e76581aad 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "artplayer": "5.3.0", "axios": "1.12.2", "date-fns": "2.29.3", - "dplayer": "1.27.1", "epg-parser": "0.1.6", "hls.js": "1.6.13", "iptv-playlist-parser": "github:4gray/iptv-playlist-parser", @@ -112,7 +111,6 @@ "@semantic-release/git": "10.0.1", "@semantic-release/npm": "12.0.1", "@tauri-apps/cli": "2.3.1", - "@types/dplayer": "1.25.5", "@types/jest": "29.5.14", "@types/mocha": "9.0.0", "@types/node": "20.10.0", diff --git a/src/app/player/components/d-player/d-player.component.ts b/src/app/player/components/d-player/d-player.component.ts deleted file mode 100644 index c5cb91ef1..000000000 --- a/src/app/player/components/d-player/d-player.component.ts +++ /dev/null @@ -1,88 +0,0 @@ - -import { - Component, - ElementRef, - Input, - OnChanges, - OnDestroy, - OnInit, - SimpleChanges, -} from '@angular/core'; -import DPlayer from 'dplayer'; -import { Channel } from '../../../../../shared/channel.interface'; - -@Component({ - selector: 'app-d-player', - imports: [], - template: `
`, - styles: [ - ` - .dplayer-container { - width: 100%; - height: calc(100vh - 64px); - } - `, - ] -}) -export class DPlayerComponent implements OnInit, OnDestroy, OnChanges { - @Input() channel: Channel; - @Input() volume = 1; - @Input() showCaptions = false; - - private player: any; - - constructor(private elementRef: ElementRef) {} - - ngOnInit(): void { - this.initPlayer(); - } - - ngOnDestroy(): void { - if (this.player) { - this.player.destroy(); - } - } - - ngOnChanges(changes: SimpleChanges): void { - if (changes['channel'] && !changes['channel'].firstChange) { - // Destroy existing player - if (this.player) { - this.player.destroy(); - } - // Reinitialize with new channel - this.initPlayer(); - } - } - - private initPlayer(): void { - const el = - this.elementRef.nativeElement.querySelector('.dplayer-container'); - const isLive = this.channel.url.toLowerCase().includes('m3u8'); - - this.player = new DPlayer({ - container: el, - live: isLive, - volume: this.volume, - autoplay: true, - video: { - url: this.channel.url + (this.channel.epgParams || ''), - type: this.getVideoType(this.channel.url), - }, - logo: this.channel.tvg?.logo, - }); - } - - private getVideoType(url: string): string { - const extension = url.split('.').pop()?.toLowerCase(); - switch (extension) { - case 'mkv': - return 'video/matroska'; - case 'm3u8': - return 'hls'; - case 'mp4': - return 'auto'; - default: - return 'auto'; - } - } -} diff --git a/src/app/portals/web-player-view/web-player-view.component.html b/src/app/portals/web-player-view/web-player-view.component.html index d639e3b9a..91b2d19cd 100644 --- a/src/app/portals/web-player-view/web-player-view.component.html +++ b/src/app/portals/web-player-view/web-player-view.component.html @@ -1,11 +1,9 @@ @if (player === 'videojs') { -