ChandimaPrabath commited on
Commit
d0c3311
1 Parent(s): e787e40

player test

Browse files
frontend/package-lock.json CHANGED
@@ -17,7 +17,8 @@
17
  "next": "14.2.5",
18
  "react": "^18",
19
  "react-dom": "^18",
20
- "sharp": "^0.33.5"
 
21
  },
22
  "devDependencies": {
23
  "eslint": "^8",
@@ -38,6 +39,17 @@
38
  "url": "https://github.com/sponsors/sindresorhus"
39
  }
40
  },
 
 
 
 
 
 
 
 
 
 
 
41
  "node_modules/@emnapi/runtime": {
42
  "version": "1.2.0",
43
  "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
@@ -986,6 +998,85 @@
986
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
987
  "dev": true
988
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
989
  "node_modules/acorn": {
990
  "version": "8.12.1",
991
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
@@ -1007,6 +1098,30 @@
1007
  "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1008
  }
1009
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1010
  "node_modules/ajv": {
1011
  "version": "6.12.6",
1012
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1751,6 +1866,11 @@
1751
  "node": ">=6.0.0"
1752
  }
1753
  },
 
 
 
 
 
1754
  "node_modules/eastasianwidth": {
1755
  "version": "0.2.0",
1756
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2712,6 +2832,15 @@
2712
  "url": "https://github.com/sponsors/isaacs"
2713
  }
2714
  },
 
 
 
 
 
 
 
 
 
2715
  "node_modules/globals": {
2716
  "version": "13.24.0",
2717
  "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -3111,6 +3240,11 @@
3111
  "node": ">=8"
3112
  }
3113
  },
 
 
 
 
 
3114
  "node_modules/is-generator-function": {
3115
  "version": "1.0.10",
3116
  "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
@@ -3530,6 +3664,29 @@
3530
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3531
  "dev": true
3532
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3533
  "node_modules/merge2": {
3534
  "version": "1.4.1",
3535
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3571,6 +3728,14 @@
3571
  "node": ">= 0.6"
3572
  }
3573
  },
 
 
 
 
 
 
 
 
3574
  "node_modules/minimatch": {
3575
  "version": "3.1.2",
3576
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3601,12 +3766,42 @@
3601
  "node": ">=16 || 14 >=14.17"
3602
  }
3603
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3604
  "node_modules/ms": {
3605
  "version": "2.1.2",
3606
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3607
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
3608
  "dev": true
3609
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3610
  "node_modules/mz": {
3611
  "version": "2.7.0",
3612
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -4022,6 +4217,17 @@
4022
  "node": ">= 6"
4023
  }
4024
  },
 
 
 
 
 
 
 
 
 
 
 
4025
  "node_modules/possible-typed-array-names": {
4026
  "version": "1.0.0",
4027
  "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -4195,6 +4401,14 @@
4195
  "node": ">= 0.8.0"
4196
  }
4197
  },
 
 
 
 
 
 
 
 
4198
  "node_modules/prop-types": {
4199
  "version": "15.8.1",
4200
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -4309,6 +4523,11 @@
4309
  "url": "https://github.com/sponsors/ljharb"
4310
  }
4311
  },
 
 
 
 
 
4312
  "node_modules/regexp.prototype.flags": {
4313
  "version": "1.5.2",
4314
  "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
@@ -5181,12 +5400,64 @@
5181
  "punycode": "^2.1.0"
5182
  }
5183
  },
 
 
 
 
 
5184
  "node_modules/util-deprecate": {
5185
  "version": "1.0.2",
5186
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5187
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
5188
  "dev": true
5189
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5190
  "node_modules/which": {
5191
  "version": "2.0.2",
5192
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
 
17
  "next": "14.2.5",
18
  "react": "^18",
19
  "react-dom": "^18",
20
+ "sharp": "^0.33.5",
21
+ "video.js": "^8.17.4"
22
  },
23
  "devDependencies": {
24
  "eslint": "^8",
 
39
  "url": "https://github.com/sponsors/sindresorhus"
40
  }
41
  },
42
+ "node_modules/@babel/runtime": {
43
+ "version": "7.25.6",
44
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
45
+ "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
46
+ "dependencies": {
47
+ "regenerator-runtime": "^0.14.0"
48
+ },
49
+ "engines": {
50
+ "node": ">=6.9.0"
51
+ }
52
+ },
53
  "node_modules/@emnapi/runtime": {
54
  "version": "1.2.0",
55
  "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
 
998
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
999
  "dev": true
1000
  },
1001
+ "node_modules/@videojs/http-streaming": {
1002
+ "version": "3.13.3",
1003
+ "resolved": "https://registry.npmjs.org/@videojs/http-streaming/-/http-streaming-3.13.3.tgz",
1004
+ "integrity": "sha512-L7H+iTeqHeZ5PylzOx+pT3CVyzn4TALWYTJKkIc1pDaV/cTVfNGtG+9/vXPAydD+wR/xH1M9/t2JH8tn/DCT4w==",
1005
+ "dependencies": {
1006
+ "@babel/runtime": "^7.12.5",
1007
+ "@videojs/vhs-utils": "4.0.0",
1008
+ "aes-decrypter": "4.0.1",
1009
+ "global": "^4.4.0",
1010
+ "m3u8-parser": "^7.1.0",
1011
+ "mpd-parser": "^1.3.0",
1012
+ "mux.js": "7.0.3",
1013
+ "video.js": "^7 || ^8"
1014
+ },
1015
+ "engines": {
1016
+ "node": ">=8",
1017
+ "npm": ">=5"
1018
+ },
1019
+ "peerDependencies": {
1020
+ "video.js": "^8.14.0"
1021
+ }
1022
+ },
1023
+ "node_modules/@videojs/http-streaming/node_modules/aes-decrypter": {
1024
+ "version": "4.0.1",
1025
+ "resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-4.0.1.tgz",
1026
+ "integrity": "sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg==",
1027
+ "dependencies": {
1028
+ "@babel/runtime": "^7.12.5",
1029
+ "@videojs/vhs-utils": "^3.0.5",
1030
+ "global": "^4.4.0",
1031
+ "pkcs7": "^1.0.4"
1032
+ }
1033
+ },
1034
+ "node_modules/@videojs/http-streaming/node_modules/aes-decrypter/node_modules/@videojs/vhs-utils": {
1035
+ "version": "3.0.5",
1036
+ "resolved": "https://registry.npmjs.org/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz",
1037
+ "integrity": "sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==",
1038
+ "dependencies": {
1039
+ "@babel/runtime": "^7.12.5",
1040
+ "global": "^4.4.0",
1041
+ "url-toolkit": "^2.2.1"
1042
+ },
1043
+ "engines": {
1044
+ "node": ">=8",
1045
+ "npm": ">=5"
1046
+ }
1047
+ },
1048
+ "node_modules/@videojs/vhs-utils": {
1049
+ "version": "4.0.0",
1050
+ "resolved": "https://registry.npmjs.org/@videojs/vhs-utils/-/vhs-utils-4.0.0.tgz",
1051
+ "integrity": "sha512-xJp7Yd4jMLwje2vHCUmi8MOUU76nxiwII3z4Eg3Ucb+6rrkFVGosrXlMgGnaLjq724j3wzNElRZ71D/CKrTtxg==",
1052
+ "dependencies": {
1053
+ "@babel/runtime": "^7.12.5",
1054
+ "global": "^4.4.0",
1055
+ "url-toolkit": "^2.2.1"
1056
+ },
1057
+ "engines": {
1058
+ "node": ">=8",
1059
+ "npm": ">=5"
1060
+ }
1061
+ },
1062
+ "node_modules/@videojs/xhr": {
1063
+ "version": "2.7.0",
1064
+ "resolved": "https://registry.npmjs.org/@videojs/xhr/-/xhr-2.7.0.tgz",
1065
+ "integrity": "sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==",
1066
+ "dependencies": {
1067
+ "@babel/runtime": "^7.5.5",
1068
+ "global": "~4.4.0",
1069
+ "is-function": "^1.0.1"
1070
+ }
1071
+ },
1072
+ "node_modules/@xmldom/xmldom": {
1073
+ "version": "0.8.10",
1074
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
1075
+ "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
1076
+ "engines": {
1077
+ "node": ">=10.0.0"
1078
+ }
1079
+ },
1080
  "node_modules/acorn": {
1081
  "version": "8.12.1",
1082
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
 
1098
  "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1099
  }
1100
  },
1101
+ "node_modules/aes-decrypter": {
1102
+ "version": "4.0.2",
1103
+ "resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-4.0.2.tgz",
1104
+ "integrity": "sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==",
1105
+ "dependencies": {
1106
+ "@babel/runtime": "^7.12.5",
1107
+ "@videojs/vhs-utils": "^4.1.1",
1108
+ "global": "^4.4.0",
1109
+ "pkcs7": "^1.0.4"
1110
+ }
1111
+ },
1112
+ "node_modules/aes-decrypter/node_modules/@videojs/vhs-utils": {
1113
+ "version": "4.1.1",
1114
+ "resolved": "https://registry.npmjs.org/@videojs/vhs-utils/-/vhs-utils-4.1.1.tgz",
1115
+ "integrity": "sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==",
1116
+ "dependencies": {
1117
+ "@babel/runtime": "^7.12.5",
1118
+ "global": "^4.4.0"
1119
+ },
1120
+ "engines": {
1121
+ "node": ">=8",
1122
+ "npm": ">=5"
1123
+ }
1124
+ },
1125
  "node_modules/ajv": {
1126
  "version": "6.12.6",
1127
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
 
1866
  "node": ">=6.0.0"
1867
  }
1868
  },
1869
+ "node_modules/dom-walk": {
1870
+ "version": "0.1.2",
1871
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
1872
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
1873
+ },
1874
  "node_modules/eastasianwidth": {
1875
  "version": "0.2.0",
1876
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
 
2832
  "url": "https://github.com/sponsors/isaacs"
2833
  }
2834
  },
2835
+ "node_modules/global": {
2836
+ "version": "4.4.0",
2837
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
2838
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
2839
+ "dependencies": {
2840
+ "min-document": "^2.19.0",
2841
+ "process": "^0.11.10"
2842
+ }
2843
+ },
2844
  "node_modules/globals": {
2845
  "version": "13.24.0",
2846
  "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
 
3240
  "node": ">=8"
3241
  }
3242
  },
3243
+ "node_modules/is-function": {
3244
+ "version": "1.0.2",
3245
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
3246
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
3247
+ },
3248
  "node_modules/is-generator-function": {
3249
  "version": "1.0.10",
3250
  "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
 
3664
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3665
  "dev": true
3666
  },
3667
+ "node_modules/m3u8-parser": {
3668
+ "version": "7.2.0",
3669
+ "resolved": "https://registry.npmjs.org/m3u8-parser/-/m3u8-parser-7.2.0.tgz",
3670
+ "integrity": "sha512-CRatFqpjVtMiMaKXxNvuI3I++vUumIXVVT/JpCpdU/FynV/ceVw1qpPyyBNindL+JlPMSesx+WX1QJaZEJSaMQ==",
3671
+ "dependencies": {
3672
+ "@babel/runtime": "^7.12.5",
3673
+ "@videojs/vhs-utils": "^4.1.1",
3674
+ "global": "^4.4.0"
3675
+ }
3676
+ },
3677
+ "node_modules/m3u8-parser/node_modules/@videojs/vhs-utils": {
3678
+ "version": "4.1.1",
3679
+ "resolved": "https://registry.npmjs.org/@videojs/vhs-utils/-/vhs-utils-4.1.1.tgz",
3680
+ "integrity": "sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==",
3681
+ "dependencies": {
3682
+ "@babel/runtime": "^7.12.5",
3683
+ "global": "^4.4.0"
3684
+ },
3685
+ "engines": {
3686
+ "node": ">=8",
3687
+ "npm": ">=5"
3688
+ }
3689
+ },
3690
  "node_modules/merge2": {
3691
  "version": "1.4.1",
3692
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
 
3728
  "node": ">= 0.6"
3729
  }
3730
  },
3731
+ "node_modules/min-document": {
3732
+ "version": "2.19.0",
3733
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
3734
+ "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
3735
+ "dependencies": {
3736
+ "dom-walk": "^0.1.0"
3737
+ }
3738
+ },
3739
  "node_modules/minimatch": {
3740
  "version": "3.1.2",
3741
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
 
3766
  "node": ">=16 || 14 >=14.17"
3767
  }
3768
  },
3769
+ "node_modules/mpd-parser": {
3770
+ "version": "1.3.0",
3771
+ "resolved": "https://registry.npmjs.org/mpd-parser/-/mpd-parser-1.3.0.tgz",
3772
+ "integrity": "sha512-WgeIwxAqkmb9uTn4ClicXpEQYCEduDqRKfmUdp4X8vmghKfBNXZLYpREn9eqrDx/Tf5LhzRcJLSpi4ohfV742Q==",
3773
+ "dependencies": {
3774
+ "@babel/runtime": "^7.12.5",
3775
+ "@videojs/vhs-utils": "^4.0.0",
3776
+ "@xmldom/xmldom": "^0.8.3",
3777
+ "global": "^4.4.0"
3778
+ },
3779
+ "bin": {
3780
+ "mpd-to-m3u8-json": "bin/parse.js"
3781
+ }
3782
+ },
3783
  "node_modules/ms": {
3784
  "version": "2.1.2",
3785
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3786
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
3787
  "dev": true
3788
  },
3789
+ "node_modules/mux.js": {
3790
+ "version": "7.0.3",
3791
+ "resolved": "https://registry.npmjs.org/mux.js/-/mux.js-7.0.3.tgz",
3792
+ "integrity": "sha512-gzlzJVEGFYPtl2vvEiJneSWAWD4nfYRHD5XgxmB2gWvXraMPOYk+sxfvexmNfjQUFpmk6hwLR5C6iSFmuwCHdQ==",
3793
+ "dependencies": {
3794
+ "@babel/runtime": "^7.11.2",
3795
+ "global": "^4.4.0"
3796
+ },
3797
+ "bin": {
3798
+ "muxjs-transmux": "bin/transmux.js"
3799
+ },
3800
+ "engines": {
3801
+ "node": ">=8",
3802
+ "npm": ">=5"
3803
+ }
3804
+ },
3805
  "node_modules/mz": {
3806
  "version": "2.7.0",
3807
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
 
4217
  "node": ">= 6"
4218
  }
4219
  },
4220
+ "node_modules/pkcs7": {
4221
+ "version": "1.0.4",
4222
+ "resolved": "https://registry.npmjs.org/pkcs7/-/pkcs7-1.0.4.tgz",
4223
+ "integrity": "sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==",
4224
+ "dependencies": {
4225
+ "@babel/runtime": "^7.5.5"
4226
+ },
4227
+ "bin": {
4228
+ "pkcs7": "bin/cli.js"
4229
+ }
4230
+ },
4231
  "node_modules/possible-typed-array-names": {
4232
  "version": "1.0.0",
4233
  "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
 
4401
  "node": ">= 0.8.0"
4402
  }
4403
  },
4404
+ "node_modules/process": {
4405
+ "version": "0.11.10",
4406
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
4407
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
4408
+ "engines": {
4409
+ "node": ">= 0.6.0"
4410
+ }
4411
+ },
4412
  "node_modules/prop-types": {
4413
  "version": "15.8.1",
4414
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
 
4523
  "url": "https://github.com/sponsors/ljharb"
4524
  }
4525
  },
4526
+ "node_modules/regenerator-runtime": {
4527
+ "version": "0.14.1",
4528
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
4529
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
4530
+ },
4531
  "node_modules/regexp.prototype.flags": {
4532
  "version": "1.5.2",
4533
  "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
 
5400
  "punycode": "^2.1.0"
5401
  }
5402
  },
5403
+ "node_modules/url-toolkit": {
5404
+ "version": "2.2.5",
5405
+ "resolved": "https://registry.npmjs.org/url-toolkit/-/url-toolkit-2.2.5.tgz",
5406
+ "integrity": "sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg=="
5407
+ },
5408
  "node_modules/util-deprecate": {
5409
  "version": "1.0.2",
5410
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5411
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
5412
  "dev": true
5413
  },
5414
+ "node_modules/video.js": {
5415
+ "version": "8.17.4",
5416
+ "resolved": "https://registry.npmjs.org/video.js/-/video.js-8.17.4.tgz",
5417
+ "integrity": "sha512-AECieAxKMKB/QgYK36ci50phfpWys6bFT6+pGMpSafeFYSoZaQ2Vpl83T9Qqcesv4TO7oNtiycnVeaBnrva2oA==",
5418
+ "dependencies": {
5419
+ "@babel/runtime": "^7.12.5",
5420
+ "@videojs/http-streaming": "3.13.3",
5421
+ "@videojs/vhs-utils": "^4.0.0",
5422
+ "@videojs/xhr": "2.7.0",
5423
+ "aes-decrypter": "^4.0.1",
5424
+ "global": "4.4.0",
5425
+ "m3u8-parser": "^7.1.0",
5426
+ "mpd-parser": "^1.2.2",
5427
+ "mux.js": "^7.0.1",
5428
+ "videojs-contrib-quality-levels": "4.1.0",
5429
+ "videojs-font": "4.2.0",
5430
+ "videojs-vtt.js": "0.15.5"
5431
+ }
5432
+ },
5433
+ "node_modules/videojs-contrib-quality-levels": {
5434
+ "version": "4.1.0",
5435
+ "resolved": "https://registry.npmjs.org/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-4.1.0.tgz",
5436
+ "integrity": "sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==",
5437
+ "dependencies": {
5438
+ "global": "^4.4.0"
5439
+ },
5440
+ "engines": {
5441
+ "node": ">=16",
5442
+ "npm": ">=8"
5443
+ },
5444
+ "peerDependencies": {
5445
+ "video.js": "^8"
5446
+ }
5447
+ },
5448
+ "node_modules/videojs-font": {
5449
+ "version": "4.2.0",
5450
+ "resolved": "https://registry.npmjs.org/videojs-font/-/videojs-font-4.2.0.tgz",
5451
+ "integrity": "sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ=="
5452
+ },
5453
+ "node_modules/videojs-vtt.js": {
5454
+ "version": "0.15.5",
5455
+ "resolved": "https://registry.npmjs.org/videojs-vtt.js/-/videojs-vtt.js-0.15.5.tgz",
5456
+ "integrity": "sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==",
5457
+ "dependencies": {
5458
+ "global": "^4.3.1"
5459
+ }
5460
+ },
5461
  "node_modules/which": {
5462
  "version": "2.0.2",
5463
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
frontend/package.json CHANGED
@@ -18,7 +18,8 @@
18
  "next": "14.2.5",
19
  "react": "^18",
20
  "react-dom": "^18",
21
- "sharp": "^0.33.5"
 
22
  },
23
  "devDependencies": {
24
  "eslint": "^8",
 
18
  "next": "14.2.5",
19
  "react": "^18",
20
  "react-dom": "^18",
21
+ "sharp": "^0.33.5",
22
+ "video.js": "^8.17.4"
23
  },
24
  "devDependencies": {
25
  "eslint": "^8",
frontend/src/app/player/movie/[title]/page.js CHANGED
@@ -1,6 +1,7 @@
1
  "use client";
2
  import apiClient from "@/api/apiClient";
3
  import { useEffect, useState } from "react";
 
4
 
5
  export default function FilmPlayer({ params }) {
6
  const title = decodeURIComponent(params.title);
@@ -117,12 +118,7 @@ export default function FilmPlayer({ params }) {
117
  </div>
118
  ) : (
119
  videoUrl && (
120
- <div className="video-player">
121
- <video controls>
122
- <source src={videoUrl} type="video/mp4" />
123
- Your browser does not support the video tag.
124
- </video>
125
- </div>
126
  )
127
  )}
128
  <style jsx>{`
 
1
  "use client";
2
  import apiClient from "@/api/apiClient";
3
  import { useEffect, useState } from "react";
4
+ import MoviePlayer from "@/components/moviePlayer";
5
 
6
  export default function FilmPlayer({ params }) {
7
  const title = decodeURIComponent(params.title);
 
118
  </div>
119
  ) : (
120
  videoUrl && (
121
+ <MoviePlayer videoUrl={videoUrl} title={metadata.title}/>
 
 
 
 
 
122
  )
123
  )}
124
  <style jsx>{`
frontend/src/components/MoviePlayer.css ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .video-player-container {
2
+ max-width: 900px;
3
+ margin: auto;
4
+ background: rgba(0, 0, 0, 0.8);
5
+ padding: 20px;
6
+ border-radius: 12px;
7
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
8
+ }
9
+ .video-title {
10
+ color: white;
11
+ margin-bottom: 15px;
12
+ font-size: 24px;
13
+ }
14
+ .controls {
15
+ display: flex;
16
+ justify-content: space-between;
17
+ margin-top: 10px;
18
+ }
19
+ .play-pause-btn, .control-btn {
20
+ padding: 10px 15px;
21
+ cursor: pointer;
22
+ background: #e50914;
23
+ color: white;
24
+ border: none;
25
+ border-radius: 5px;
26
+ font-size: 16px;
27
+ transition: background 0.3s;
28
+ }
29
+ .play-pause-btn:hover, .control-btn:hover {
30
+ background: #f40612;
31
+ }
32
+ .video-element {
33
+ width: 100%;
34
+ height: auto;
35
+ border-radius: 8px;
36
+ outline: none;
37
+ }
frontend/src/components/MoviePlayer.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import './MoviePlayer.css';
4
+
5
+ export default function MoviePlayer({ videoUrl, title }) {
6
+ const videoRef = useRef(null);
7
+ const [isPlaying, setIsPlaying] = useState(false);
8
+
9
+ useEffect(() => {
10
+ const videoElement = videoRef.current;
11
+
12
+ const handlePlay = () => setIsPlaying(true);
13
+ const handlePause = () => setIsPlaying(false);
14
+
15
+ videoElement.addEventListener("play", handlePlay);
16
+ videoElement.addEventListener("pause", handlePause);
17
+
18
+ return () => {
19
+ videoElement.removeEventListener("play", handlePlay);
20
+ videoElement.removeEventListener("pause", handlePause);
21
+ };
22
+ }, []);
23
+
24
+ const handleFastForward = () => {
25
+ if (videoRef.current) {
26
+ videoRef.current.currentTime = Math.min(videoRef.current.duration, videoRef.current.currentTime + 10);
27
+ }
28
+ };
29
+
30
+ const handleRewind = () => {
31
+ if (videoRef.current) {
32
+ videoRef.current.currentTime = Math.max(0, videoRef.current.currentTime - 10);
33
+ }
34
+ };
35
+
36
+ const togglePlayPause = () => {
37
+ if (isPlaying) {
38
+ videoRef.current.pause();
39
+ } else {
40
+ videoRef.current.play();
41
+ }
42
+ };
43
+
44
+ return (
45
+ <div className="video-player-container">
46
+ <h2 className="video-title">{title}</h2>
47
+ <video
48
+ ref={videoRef}
49
+ className="video-element"
50
+ controls={false}
51
+ preload="auto"
52
+ src={videoUrl}
53
+ >
54
+ <track
55
+ kind="subtitles"
56
+ label="English"
57
+ srLang="en"
58
+ src="path/to/your/subtitles.vtt" // Replace with actual subtitles URL
59
+ />
60
+ Your browser does not support the video tag.
61
+ </video>
62
+ <div className="controls">
63
+ <button onClick={togglePlayPause} className="play-pause-btn">
64
+ {isPlaying ? '❚❚ Pause' : '► Play'}
65
+ </button>
66
+ <button onClick={handleRewind} className="control-btn" disabled={!isPlaying}>⏪ 10s</button>
67
+ <button onClick={handleFastForward} className="control-btn" disabled={!isPlaying}>⏩ 10s</button>
68
+ </div>
69
+ </div>
70
+ );
71
+ }