diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 1e08c50..4dd0436 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -21,4 +21,8 @@ jobs:
- name: Install FFmpeg
run: sudo apt-get update && sudo apt-get install -y ffmpeg
- run: npm ci
+ - name: Install browser for subtitle regression tests
+ run: npx playwright install --with-deps chromium
- run: npm test
+ env:
+ NODECAST_BROWSER_TESTS: '1'
diff --git a/package-lock.json b/package-lock.json
index 3113d49..5744bb5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "nodecast-tv",
- "version": "2.1.4",
+ "version": "2.2.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "nodecast-tv",
- "version": "2.1.4",
+ "version": "2.2.1",
"license": "GPL-3.0-only",
"dependencies": {
"@ffprobe-installer/ffprobe": "^2.1.2",
@@ -23,6 +23,10 @@
"sax": "^1.4.3",
"xml2js": "^0.6.2"
},
+ "devDependencies": {
+ "hls.js": "1.5.7",
+ "playwright": "1.62.1"
+ },
"engines": {
"node": ">=18.0.0"
},
@@ -780,6 +784,21 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
"license": "MIT"
},
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -868,6 +887,13 @@
"node": ">= 0.4"
}
},
+ "node_modules/hls.js": {
+ "version": "1.5.7",
+ "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.7.tgz",
+ "integrity": "sha512-Hnyf7ojTBtXHeOW1/t6wCBJSiK1WpoKF9yg7juxldDx8u3iswrkPt2wbOA/1NiwU4j27DSIVoIEJRAhcdMef/A==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
@@ -1348,6 +1374,38 @@
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
},
+ "node_modules/playwright": {
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz",
+ "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.62.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz",
+ "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/prebuild-install": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
diff --git a/package.json b/package.json
index 504f49c..7b22d0c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "nodecast-tv",
- "version": "2.1.4",
+ "version": "2.2.1",
"description": "Modern IPTV Player",
"license": "GPL-3.0-only",
"main": "server/index.js",
@@ -29,5 +29,9 @@
},
"engines": {
"node": ">=18.0.0"
+ },
+ "devDependencies": {
+ "hls.js": "1.5.7",
+ "playwright": "1.62.1"
}
}
diff --git a/public/index.html b/public/index.html
index b8864fa..4f05822 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1099,7 +1099,8 @@
-
+
+
@@ -1109,7 +1110,7 @@
-
+