oblecto 0.2.9 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/Oblecto-Web/dist/web/index.html +24 -3
  2. package/Oblecto-Web/dist/web/static/index-C-JsqHHk.css +1 -0
  3. package/Oblecto-Web/dist/web/static/index-DSZgpOOu.js +576 -0
  4. package/README.md +43 -7
  5. package/dist/bin/oblecto.js +12468 -61
  6. package/dist/index.js +10676 -6
  7. package/package.json +67 -39
  8. package/res/AGENTS.md +8 -0
  9. package/res/config.json +29 -7
  10. package/Oblecto-Web/dist/web/static/css/app.ef5965dbd50e69a7544e200a3f21fbaf.css +0 -1
  11. package/Oblecto-Web/dist/web/static/css/app.ef5965dbd50e69a7544e200a3f21fbaf.css.map +0 -1
  12. package/Oblecto-Web/dist/web/static/js/app.1352bf3c311f0e7ab716.js +0 -7150
  13. package/Oblecto-Web/dist/web/static/js/app.1352bf3c311f0e7ab716.js.map +0 -1
  14. package/Oblecto-Web/dist/web/static/js/manifest.b8404c3e329d75bb51fd.js +0 -154
  15. package/Oblecto-Web/dist/web/static/js/manifest.b8404c3e329d75bb51fd.js.map +0 -1
  16. package/Oblecto-Web/dist/web/static/js/vendor.521641a02e42750ba5a7.js +0 -32455
  17. package/Oblecto-Web/dist/web/static/js/vendor.521641a02e42750ba5a7.js.map +0 -1
  18. package/dist/bin/oblecto.d.ts +0 -2
  19. package/dist/bin/scripts/adduser.d.ts +0 -2
  20. package/dist/bin/scripts/adduser.js +0 -50
  21. package/dist/bin/scripts/changepassword.d.ts +0 -2
  22. package/dist/bin/scripts/changepassword.js +0 -48
  23. package/dist/bin/scripts/deluser.d.ts +0 -2
  24. package/dist/bin/scripts/deluser.js +0 -34
  25. package/dist/bin/scripts/helpers/argumentError.d.ts +0 -2
  26. package/dist/bin/scripts/helpers/argumentError.js +0 -12
  27. package/dist/bin/scripts/helpers/generateAssetDirectories.d.ts +0 -1
  28. package/dist/bin/scripts/helpers/generateAssetDirectories.js +0 -37
  29. package/dist/bin/scripts/init/assets.d.ts +0 -2
  30. package/dist/bin/scripts/init/assets.js +0 -24
  31. package/dist/bin/scripts/init/database.d.ts +0 -2
  32. package/dist/bin/scripts/init/database.js +0 -21
  33. package/dist/bin/scripts/init/general.d.ts +0 -2
  34. package/dist/bin/scripts/init/general.js +0 -54
  35. package/dist/bin/scripts/init/index.d.ts +0 -2
  36. package/dist/bin/scripts/init/index.js +0 -26
  37. package/dist/bin/scripts/removepassword.d.ts +0 -2
  38. package/dist/bin/scripts/removepassword.js +0 -42
  39. package/dist/config.d.ts +0 -7
  40. package/dist/config.js +0 -45
  41. package/dist/core/graphical.d.ts +0 -17
  42. package/dist/core/graphical.js +0 -179
  43. package/dist/core/index.d.ts +0 -9
  44. package/dist/core/index.js +0 -24
  45. package/dist/index.d.ts +0 -1
  46. package/dist/lib/artwork/ArtworkScaler.d.ts +0 -5
  47. package/dist/lib/artwork/ArtworkScaler.js +0 -31
  48. package/dist/lib/artwork/ArtworkUtils.d.ts +0 -8
  49. package/dist/lib/artwork/ArtworkUtils.js +0 -35
  50. package/dist/lib/artwork/movies/AggregateMovieArtworkRetriever.d.ts +0 -8
  51. package/dist/lib/artwork/movies/AggregateMovieArtworkRetriever.js +0 -58
  52. package/dist/lib/artwork/movies/MovieArtworkCollector.d.ts +0 -35
  53. package/dist/lib/artwork/movies/MovieArtworkCollector.js +0 -93
  54. package/dist/lib/artwork/movies/MovieArtworkDownloader.d.ts +0 -8
  55. package/dist/lib/artwork/movies/MovieArtworkDownloader.js +0 -65
  56. package/dist/lib/artwork/movies/artworkRetrievers/FanarttvMovieArtworkRetriever.d.ts +0 -6
  57. package/dist/lib/artwork/movies/artworkRetrievers/FanarttvMovieArtworkRetriever.js +0 -57
  58. package/dist/lib/artwork/movies/artworkRetrievers/TmdbMovieArtworkRetriever.d.ts +0 -6
  59. package/dist/lib/artwork/movies/artworkRetrievers/TmdbMovieArtworkRetriever.js +0 -47
  60. package/dist/lib/artwork/series/AggregateSeriesArtworkRetriever.d.ts +0 -8
  61. package/dist/lib/artwork/series/AggregateSeriesArtworkRetriever.js +0 -58
  62. package/dist/lib/artwork/series/SeriesArtworkCollector.d.ts +0 -37
  63. package/dist/lib/artwork/series/SeriesArtworkCollector.js +0 -95
  64. package/dist/lib/artwork/series/SeriesArtworkDownloader.d.ts +0 -8
  65. package/dist/lib/artwork/series/SeriesArtworkDownloader.js +0 -62
  66. package/dist/lib/artwork/series/artworkRetrievers/FanarttvSeriesArtworkRetriever.d.ts +0 -6
  67. package/dist/lib/artwork/series/artworkRetrievers/FanarttvSeriesArtworkRetriever.js +0 -44
  68. package/dist/lib/artwork/series/artworkRetrievers/TmdbSeriesArtworkRetriever.d.ts +0 -16
  69. package/dist/lib/artwork/series/artworkRetrievers/TmdbSeriesArtworkRetriever.js +0 -64
  70. package/dist/lib/artwork/series/artworkRetrievers/TvdbSeriesArtworkRetriever.d.ts +0 -16
  71. package/dist/lib/artwork/series/artworkRetrievers/TvdbSeriesArtworkRetriever.js +0 -51
  72. package/dist/lib/cleaners/FileCleaner.d.ts +0 -6
  73. package/dist/lib/cleaners/FileCleaner.js +0 -68
  74. package/dist/lib/cleaners/MovieCleaner.d.ts +0 -8
  75. package/dist/lib/cleaners/MovieCleaner.js +0 -48
  76. package/dist/lib/cleaners/SeriesCleaner.d.ts +0 -10
  77. package/dist/lib/cleaners/SeriesCleaner.js +0 -88
  78. package/dist/lib/common/AggregateIdentifier.d.ts +0 -9
  79. package/dist/lib/common/AggregateIdentifier.js +0 -57
  80. package/dist/lib/common/AggregateUpdateRetriever.d.ts +0 -5
  81. package/dist/lib/common/AggregateUpdateRetriever.js +0 -46
  82. package/dist/lib/downloader/index.d.ts +0 -6
  83. package/dist/lib/downloader/index.js +0 -83
  84. package/dist/lib/errors/DebugExtendableError.d.ts +0 -5
  85. package/dist/lib/errors/DebugExtendableError.js +0 -20
  86. package/dist/lib/errors/ExtendableError.d.ts +0 -3
  87. package/dist/lib/errors/ExtendableError.js +0 -22
  88. package/dist/lib/errors/FileExistsError.d.ts +0 -4
  89. package/dist/lib/errors/FileExistsError.js +0 -14
  90. package/dist/lib/errors/IdentificationError.d.ts +0 -4
  91. package/dist/lib/errors/IdentificationError.js +0 -14
  92. package/dist/lib/errors/InfoExtendableError.d.ts +0 -5
  93. package/dist/lib/errors/InfoExtendableError.js +0 -20
  94. package/dist/lib/errors/VideoAnalysisError.d.ts +0 -4
  95. package/dist/lib/errors/VideoAnalysisError.js +0 -14
  96. package/dist/lib/errors/VideoIdentificationError.d.ts +0 -4
  97. package/dist/lib/errors/VideoIdentificationError.js +0 -9
  98. package/dist/lib/errors/WarnExtendableError.d.ts +0 -5
  99. package/dist/lib/errors/WarnExtendableError.js +0 -20
  100. package/dist/lib/federation/client/FederationClient.d.ts +0 -31
  101. package/dist/lib/federation/client/FederationClient.js +0 -127
  102. package/dist/lib/federation/client/FederationClientController.d.ts +0 -9
  103. package/dist/lib/federation/client/FederationClientController.js +0 -45
  104. package/dist/lib/federation/client/FederationDataClient.d.ts +0 -11
  105. package/dist/lib/federation/client/FederationDataClient.js +0 -56
  106. package/dist/lib/federation/client/FederationMediaClient.d.ts +0 -12
  107. package/dist/lib/federation/client/FederationMediaClient.js +0 -70
  108. package/dist/lib/federation/server/FederationController.d.ts +0 -10
  109. package/dist/lib/federation/server/FederationController.js +0 -32
  110. package/dist/lib/federation/server/FederationDataServer.d.ts +0 -4
  111. package/dist/lib/federation/server/FederationDataServer.js +0 -22
  112. package/dist/lib/federation/server/FederationDataServerConnection.d.ts +0 -8
  113. package/dist/lib/federation/server/FederationDataServerConnection.js +0 -96
  114. package/dist/lib/federation/server/FederationMediaServer.d.ts +0 -4
  115. package/dist/lib/federation/server/FederationMediaServer.js +0 -22
  116. package/dist/lib/federation/server/FederationMediaServerConnection.d.ts +0 -11
  117. package/dist/lib/federation/server/FederationMediaServerConnection.js +0 -83
  118. package/dist/lib/federation/server/FederationServer.d.ts +0 -11
  119. package/dist/lib/federation/server/FederationServer.js +0 -40
  120. package/dist/lib/federation/server/FederationServerConnection.d.ts +0 -18
  121. package/dist/lib/federation/server/FederationServerConnection.js +0 -97
  122. package/dist/lib/federationindexer/FederationEpisodeIndexer.d.ts +0 -5
  123. package/dist/lib/federationindexer/FederationEpisodeIndexer.js +0 -65
  124. package/dist/lib/federationindexer/FederationMovieIndexer.d.ts +0 -5
  125. package/dist/lib/federationindexer/FederationMovieIndexer.js +0 -48
  126. package/dist/lib/federationv2/federationController/index.js +0 -13
  127. package/dist/lib/indexers/MediaIdentifier.d.ts +0 -5
  128. package/dist/lib/indexers/MediaIdentifier.js +0 -15
  129. package/dist/lib/indexers/files/FileIndexer.d.ts +0 -10
  130. package/dist/lib/indexers/files/FileIndexer.js +0 -103
  131. package/dist/lib/indexers/movies/MovieCollector.d.ts +0 -25
  132. package/dist/lib/indexers/movies/MovieCollector.js +0 -65
  133. package/dist/lib/indexers/movies/MovieIdentifier.d.ts +0 -10
  134. package/dist/lib/indexers/movies/MovieIdentifier.js +0 -22
  135. package/dist/lib/indexers/movies/MovieIndexer.d.ts +0 -11
  136. package/dist/lib/indexers/movies/MovieIndexer.js +0 -64
  137. package/dist/lib/indexers/movies/identifiers/TmdbMovieidentifier.d.ts +0 -4
  138. package/dist/lib/indexers/movies/identifiers/TmdbMovieidentifier.js +0 -52
  139. package/dist/lib/indexers/series/EpisodeIdentifier.d.ts +0 -12
  140. package/dist/lib/indexers/series/EpisodeIdentifier.js +0 -25
  141. package/dist/lib/indexers/series/SeriesCollector.d.ts +0 -25
  142. package/dist/lib/indexers/series/SeriesCollector.js +0 -69
  143. package/dist/lib/indexers/series/SeriesIdentifer.d.ts +0 -11
  144. package/dist/lib/indexers/series/SeriesIdentifer.js +0 -24
  145. package/dist/lib/indexers/series/SeriesIndexer.d.ts +0 -11
  146. package/dist/lib/indexers/series/SeriesIndexer.js +0 -140
  147. package/dist/lib/indexers/series/identifiers/TmdbEpisodeIdentifier.d.ts +0 -4
  148. package/dist/lib/indexers/series/identifiers/TmdbEpisodeIdentifier.js +0 -48
  149. package/dist/lib/indexers/series/identifiers/TmdbSeriesIdentifier.d.ts +0 -6
  150. package/dist/lib/indexers/series/identifiers/TmdbSeriesIdentifier.js +0 -90
  151. package/dist/lib/indexers/series/identifiers/TvdbEpisodeIdentifier.d.ts +0 -7
  152. package/dist/lib/indexers/series/identifiers/TvdbEpisodeIdentifier.js +0 -87
  153. package/dist/lib/indexers/series/identifiers/TvdbSeriesIdentifier.d.ts +0 -10
  154. package/dist/lib/indexers/series/identifiers/TvdbSeriesIdentifier.js +0 -82
  155. package/dist/lib/oblecto/index.d.ts +0 -68
  156. package/dist/lib/oblecto/index.js +0 -125
  157. package/dist/lib/queue/index.d.ts +0 -32
  158. package/dist/lib/queue/index.js +0 -96
  159. package/dist/lib/realtime/RealtimeClient.d.ts +0 -27
  160. package/dist/lib/realtime/RealtimeClient.js +0 -137
  161. package/dist/lib/realtime/RealtimeController.d.ts +0 -12
  162. package/dist/lib/realtime/RealtimeController.js +0 -50
  163. package/dist/lib/redisQueue/index.js +0 -109
  164. package/dist/lib/sets/tv/MovieSetCollector.d.ts +0 -6
  165. package/dist/lib/sets/tv/MovieSetCollector.js +0 -49
  166. package/dist/lib/streamSessions/StreamSession.d.ts +0 -41
  167. package/dist/lib/streamSessions/StreamSession.js +0 -146
  168. package/dist/lib/streamSessions/StreamSessionController.d.ts +0 -19
  169. package/dist/lib/streamSessions/StreamSessionController.js +0 -78
  170. package/dist/lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession.d.ts +0 -5
  171. package/dist/lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession.js +0 -116
  172. package/dist/lib/streamSessions/StreamSessionTypes/DirectStreamSession.d.ts +0 -5
  173. package/dist/lib/streamSessions/StreamSessionTypes/DirectStreamSession.js +0 -41
  174. package/dist/lib/streamSessions/StreamSessionTypes/HLSStreamer.d.ts +0 -15
  175. package/dist/lib/streamSessions/StreamSessionTypes/HLSStreamer.js +0 -148
  176. package/dist/lib/streamSessions/StreamSessionTypes/RecodeFederationStreamSession.d.ts +0 -9
  177. package/dist/lib/streamSessions/StreamSessionTypes/RecodeFederationStreamSession.js +0 -72
  178. package/dist/lib/streamSessions/StreamSessionTypes/RecodeStreamSession.d.ts +0 -6
  179. package/dist/lib/streamSessions/StreamSessionTypes/RecodeStreamSession.js +0 -96
  180. package/dist/lib/updaters/files/FileUpdateCollector.d.ts +0 -20
  181. package/dist/lib/updaters/files/FileUpdateCollector.js +0 -44
  182. package/dist/lib/updaters/files/FileUpdater.d.ts +0 -49
  183. package/dist/lib/updaters/files/FileUpdater.js +0 -194
  184. package/dist/lib/updaters/movies/MovieUpdateCollector.d.ts +0 -20
  185. package/dist/lib/updaters/movies/MovieUpdateCollector.js +0 -48
  186. package/dist/lib/updaters/movies/MovieUpdater.d.ts +0 -12
  187. package/dist/lib/updaters/movies/MovieUpdater.js +0 -49
  188. package/dist/lib/updaters/movies/informationRetrievers/TmdbMovieRetriever.d.ts +0 -20
  189. package/dist/lib/updaters/movies/informationRetrievers/TmdbMovieRetriever.js +0 -45
  190. package/dist/lib/updaters/series/SeriesUpdateCollector.d.ts +0 -37
  191. package/dist/lib/updaters/series/SeriesUpdateCollector.js +0 -79
  192. package/dist/lib/updaters/series/SeriesUpdater.d.ts +0 -22
  193. package/dist/lib/updaters/series/SeriesUpdater.js +0 -84
  194. package/dist/lib/updaters/series/informationRetrievers/TmdbEpisodeRetriever.d.ts +0 -11
  195. package/dist/lib/updaters/series/informationRetrievers/TmdbEpisodeRetriever.js +0 -70
  196. package/dist/lib/updaters/series/informationRetrievers/TmdbSeriesRetriever.d.ts +0 -21
  197. package/dist/lib/updaters/series/informationRetrievers/TmdbSeriesRetriever.js +0 -68
  198. package/dist/lib/updaters/series/informationRetrievers/TvdbEpisodeRetriever.d.ts +0 -5
  199. package/dist/lib/updaters/series/informationRetrievers/TvdbEpisodeRetriever.js +0 -38
  200. package/dist/lib/updaters/series/informationRetrievers/TvdbSeriesRetriever.d.ts +0 -21
  201. package/dist/lib/updaters/series/informationRetrievers/TvdbSeriesRetriever.js +0 -50
  202. package/dist/models/episode.d.ts +0 -76
  203. package/dist/models/episode.js +0 -62
  204. package/dist/models/episodeFiles.d.ts +0 -5
  205. package/dist/models/episodeFiles.js +0 -14
  206. package/dist/models/file.d.ts +0 -26
  207. package/dist/models/file.js +0 -32
  208. package/dist/models/movie.d.ts +0 -30
  209. package/dist/models/movie.js +0 -36
  210. package/dist/models/movieFiles.d.ts +0 -5
  211. package/dist/models/movieFiles.js +0 -14
  212. package/dist/models/movieSet.d.ts +0 -20
  213. package/dist/models/movieSet.js +0 -26
  214. package/dist/models/series.d.ts +0 -59
  215. package/dist/models/series.js +0 -50
  216. package/dist/models/seriesSet.d.ts +0 -9
  217. package/dist/models/seriesSet.js +0 -17
  218. package/dist/models/stream.d.ts +0 -73
  219. package/dist/models/stream.js +0 -81
  220. package/dist/models/trackEpisode.d.ts +0 -9
  221. package/dist/models/trackEpisode.js +0 -17
  222. package/dist/models/trackMovie.d.ts +0 -9
  223. package/dist/models/trackMovie.js +0 -17
  224. package/dist/models/user.d.ts +0 -19
  225. package/dist/models/user.js +0 -26
  226. package/dist/submodules/REST/index.d.ts +0 -9
  227. package/dist/submodules/REST/index.js +0 -59
  228. package/dist/submodules/REST/middleware/auth.d.ts +0 -5
  229. package/dist/submodules/REST/middleware/auth.js +0 -28
  230. package/dist/submodules/REST/routes/auth.d.ts +0 -2
  231. package/dist/submodules/REST/routes/auth.js +0 -48
  232. package/dist/submodules/REST/routes/clients.d.ts +0 -2
  233. package/dist/submodules/REST/routes/clients.js +0 -54
  234. package/dist/submodules/REST/routes/episodes.d.ts +0 -2
  235. package/dist/submodules/REST/routes/episodes.js +0 -275
  236. package/dist/submodules/REST/routes/files.d.ts +0 -2
  237. package/dist/submodules/REST/routes/files.js +0 -53
  238. package/dist/submodules/REST/routes/index.d.ts +0 -2
  239. package/dist/submodules/REST/routes/index.js +0 -49
  240. package/dist/submodules/REST/routes/movies.d.ts +0 -2
  241. package/dist/submodules/REST/routes/movies.js +0 -303
  242. package/dist/submodules/REST/routes/sets.d.ts +0 -2
  243. package/dist/submodules/REST/routes/sets.js +0 -35
  244. package/dist/submodules/REST/routes/settings/index.d.ts +0 -2
  245. package/dist/submodules/REST/routes/settings/index.js +0 -22
  246. package/dist/submodules/REST/routes/settings/maintenance.d.ts +0 -2
  247. package/dist/submodules/REST/routes/settings/maintenance.js +0 -87
  248. package/dist/submodules/REST/routes/settings/misc.d.ts +0 -2
  249. package/dist/submodules/REST/routes/settings/misc.js +0 -38
  250. package/dist/submodules/REST/routes/settings/sources.d.ts +0 -2
  251. package/dist/submodules/REST/routes/settings/sources.js +0 -61
  252. package/dist/submodules/REST/routes/streaming.js +0 -91
  253. package/dist/submodules/REST/routes/tvshows.d.ts +0 -2
  254. package/dist/submodules/REST/routes/tvshows.js +0 -137
  255. package/dist/submodules/REST/routes/users.d.ts +0 -2
  256. package/dist/submodules/REST/routes/users.js +0 -107
  257. package/dist/submodules/REST/routes/web.d.ts +0 -2
  258. package/dist/submodules/REST/routes/web.js +0 -43
  259. package/dist/submodules/axiosTimeout.d.ts +0 -1
  260. package/dist/submodules/axiosTimeout.js +0 -31
  261. package/dist/submodules/database.d.ts +0 -1
  262. package/dist/submodules/database.js +0 -180
  263. package/dist/submodules/ffmpeg.d.ts +0 -1
  264. package/dist/submodules/ffmpeg.js +0 -23
  265. package/dist/submodules/ffprobe.d.ts +0 -1
  266. package/dist/submodules/ffprobe.js +0 -22
  267. package/dist/submodules/guessit.d.ts +0 -5
  268. package/dist/submodules/guessit.js +0 -48
  269. package/dist/submodules/logger/index.d.ts +0 -7
  270. package/dist/submodules/logger/index.js +0 -43
  271. package/dist/submodules/promiseTimeout.d.ts +0 -1
  272. package/dist/submodules/promiseTimeout.js +0 -28
  273. package/dist/submodules/zeroconf.js +0 -19
@@ -1,146 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _events = require("events");
9
-
10
- var _uuid = require("uuid");
11
-
12
- var _logger = _interopRequireDefault(require("../../submodules/logger"));
13
-
14
- var _stream = _interopRequireDefault(require("stream"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- class StreamSession extends _events.EventEmitter {
19
- /**
20
- *
21
- * @param {File} file
22
- * @param options
23
- * @param {Oblecto} oblecto
24
- */
25
- constructor(file, options, oblecto) {
26
- super();
27
-
28
- _logger.default.log('INFO', 'New StreamSession initiating');
29
-
30
- this.oblecto = oblecto;
31
- this.file = file;
32
- this.sessionId = (0, _uuid.v4)();
33
- this.destinations = [];
34
- this.targetFormats = options.target.formats;
35
- this.targetVideoCodecs = options.target.videoCodecs;
36
- this.targetAudioCodecs = options.target.audioCodecs;
37
- this.format = this.targetFormats[0] || 'mp4';
38
- this.videoCodec = this.targetVideoCodecs[0] || 'h264';
39
- this.audioCodec = this.targetAudioCodecs[0] || 'aac';
40
- this.offset = options.offset || 0;
41
- this.inputStream = new _stream.default.PassThrough();
42
- this.outputStream = new _stream.default.PassThrough();
43
- this.outputStream.on('pause', () => this.outputPause());
44
- this.outputStream.on('resume', () => this.outputResume());
45
- this.outputStream.on('close', () => {
46
- _logger.default.log('INFO', this.sessionId, 'output stream has closed');
47
-
48
- this.endSession();
49
- });
50
- this.httpHeaders = {
51
- 'Content-Type': this.getOutputMimetype(),
52
- 'Accept-Ranges': 'none'
53
- };
54
- this.httpStatusCode = 200;
55
- this.timeoutTime = 10000;
56
- this.startTimeout();
57
- }
58
-
59
- outputPause() {}
60
-
61
- outputResume() {}
62
-
63
- endSession() {
64
- if (this.process) {
65
- this.process.kill();
66
- }
67
-
68
- this.emit('close');
69
- }
70
-
71
- startTimeout() {
72
- if (this.timeout) this.clearTimeout();
73
- this.timeout = setTimeout(() => {
74
- _logger.default.log('INFO', 'StreamSession', this.sessionId, 'has timed out. Destroying output stream');
75
-
76
- this.outputStream.destroy();
77
- }, this.timeoutTime);
78
- }
79
-
80
- async addDestination(destination) {
81
- this.destinations.push(destination);
82
- this.outputStream.pipe(destination.stream);
83
-
84
- if (destination.type === 'http') {
85
- destination.stream.writeHead(this.httpStatusCode, this.httpHeaders);
86
- }
87
-
88
- let _this = this;
89
-
90
- destination.stream.on('error', err => {
91
- _logger.default.log('ERROR', this.sessionId, err);
92
- }).on('close', function () {
93
- for (let i in _this.destinations) {
94
- if (_this.destinations[i].stream === this) {
95
- _this.destinations.splice(i, 1);
96
- }
97
- }
98
-
99
- if (_this.destinations.length === 0) {
100
- _logger.default.log('INFO', _this.sessionId, 'last client has disconnected. Setting timeout output stream');
101
-
102
- _this.startTimeout();
103
- }
104
- });
105
- }
106
-
107
- clearTimeout() {
108
- clearTimeout(this.timeout);
109
- }
110
-
111
- async startStream() {
112
- this.clearTimeout();
113
- }
114
-
115
- getOutputMimetype() {
116
- if (this.format === 'mp4') return 'video/mp4';
117
- if (this.format === 'mpegts') return 'video/mp2t';
118
- if (this.format === 'matroska') return 'video/x-matroska';
119
- return 'video';
120
- }
121
-
122
- getFfmpegVideoCodec() {
123
- if (this.oblecto.config.transcoding.hardwareAcceleration) {
124
- if (this.oblecto.config.transcoding.hardwareAccelerator === 'cuda') {
125
- if (this.videoCodec === 'h264') {
126
- return 'h264_nvenc';
127
- }
128
- }
129
-
130
- if (this.oblecto.config.transcoding.hardwareAccelerator === 'vaapi') {
131
- if (this.videoCodec === 'h264') {
132
- return 'h264_vaapi';
133
- }
134
- }
135
- }
136
-
137
- let codecs = {
138
- 'h264': 'libx264'
139
- };
140
- if (codecs[this.videoCodec]) return codecs[this.videoCodec];
141
- return this.videoCodec;
142
- }
143
-
144
- }
145
-
146
- exports.default = StreamSession;
@@ -1,19 +0,0 @@
1
- export default class StreamSessionController {
2
- constructor(oblecto: any);
3
- oblecto: any;
4
- sessions: {};
5
- /**
6
- *
7
- * @param {File} file
8
- * @param options
9
- * @returns {StreamSession}
10
- */
11
- newSession(file: any, options: any): any;
12
- createSession(file: any, options: any): DirectHttpStreamSession | HLSStreamer | DirectStreamSession | RecodeStreamSession | RecodeFederationStreamSession | undefined;
13
- sessionExists(sessionId: any): boolean;
14
- }
15
- import DirectHttpStreamSession from "./StreamSessionTypes/DirectHttpStreamSession";
16
- import HLSStreamer from "./StreamSessionTypes/HLSStreamer";
17
- import DirectStreamSession from "./StreamSessionTypes/DirectStreamSession";
18
- import RecodeStreamSession from "./StreamSessionTypes/RecodeStreamSession";
19
- import RecodeFederationStreamSession from "./StreamSessionTypes/RecodeFederationStreamSession";
@@ -1,78 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _DirectStreamSession = _interopRequireDefault(require("./StreamSessionTypes/DirectStreamSession"));
9
-
10
- var _DirectHttpStreamSession = _interopRequireDefault(require("./StreamSessionTypes/DirectHttpStreamSession"));
11
-
12
- var _RecodeStreamSession = _interopRequireDefault(require("./StreamSessionTypes/RecodeStreamSession"));
13
-
14
- var _RecodeFederationStreamSession = _interopRequireDefault(require("./StreamSessionTypes/RecodeFederationStreamSession"));
15
-
16
- var _logger = _interopRequireDefault(require("../../submodules/logger"));
17
-
18
- var _HLSStreamer = _interopRequireDefault(require("./StreamSessionTypes/HLSStreamer"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- class StreamSessionController {
23
- constructor(oblecto) {
24
- this.oblecto = oblecto;
25
- this.sessions = {};
26
- }
27
- /**
28
- *
29
- * @param {File} file
30
- * @param options
31
- * @returns {StreamSession}
32
- */
33
-
34
-
35
- newSession(file, options) {
36
- const streamSession = this.createSession(file, options);
37
- this.sessions[streamSession.sessionId] = streamSession;
38
- streamSession.on('close', () => {
39
- _logger.default.log('INFO', streamSession.sessionId, 'has ended');
40
-
41
- delete this.sessions[streamSession.sessionId];
42
- });
43
- return streamSession;
44
- }
45
-
46
- createSession(file, options) {
47
- if (file.host !== 'local') {
48
- return new _RecodeFederationStreamSession.default(file, options, this.oblecto);
49
- }
50
-
51
- if (options.streamType === 'hls') {
52
- return new _HLSStreamer.default(file, options, this.oblecto);
53
- }
54
-
55
- if (this.oblecto.config.transcoding.transcodeEverything) {
56
- return new _RecodeStreamSession.default(file, options, this.oblecto);
57
- }
58
-
59
- if (options.streamType === 'direct') {
60
- return new _DirectStreamSession.default(file, options, this.oblecto);
61
- }
62
-
63
- if (options.streamType === 'directhttp') {
64
- return new _DirectHttpStreamSession.default(file, options, this.oblecto);
65
- }
66
-
67
- if (options.streamType === 'recode') {
68
- return new _RecodeStreamSession.default(file, options, this.oblecto);
69
- }
70
- }
71
-
72
- sessionExists(sessionId) {
73
- return this.sessions[sessionId] !== undefined;
74
- }
75
-
76
- }
77
-
78
- exports.default = StreamSessionController;
@@ -1,5 +0,0 @@
1
- export default class DirectHttpStreamSession extends StreamSession {
2
- static httpStreamHandler(req: any, res: any, file: any): Promise<void>;
3
- constructor(file: any, options: any, oblecto: any);
4
- }
5
- import StreamSession from "../StreamSession";
@@ -1,116 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
11
-
12
- var _fs = require("fs");
13
-
14
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
15
-
16
- var _file = require("../../../models/file");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class DirectHttpStreamSession extends _StreamSession.default {
21
- /**
22
- * @param { File } file
23
- * @param { * } options
24
- * @param { Oblecto } oblecto
25
- */
26
- constructor(file, options, oblecto) {
27
- super(file, options, oblecto);
28
- this.format = this.file.extension;
29
- this.videoCodec = this.file.videoCodec;
30
- this.audioCodec = this.file.audioCodec;
31
- }
32
-
33
- async addDestination(destination) {
34
- // Logically we only support http destinations
35
- // Therefore, throw an error if the type is not http
36
- if (destination.type !== 'http') {
37
- _logger.default.log('ERROR', 'DirectHttpStreamer only supports http stream types');
38
-
39
- throw new Error('HTTP Streamer only supports HTTP stream types');
40
- } // This streamer only supports a single stream destination,
41
- // so if another destination was found, destroy the output stream and remove it
42
-
43
-
44
- if (this.destinations[0]) {
45
- this.destinations[0].stream.destroy();
46
- }
47
-
48
- this.destinations[0] = destination;
49
- destination.stream.on('close', () => {
50
- this.startTimeout();
51
- });
52
- }
53
-
54
- async startStream() {
55
- await super.startStream();
56
- let req = this.destinations[0].request;
57
- let res = this.destinations[0].stream;
58
- await DirectHttpStreamSession.httpStreamHandler(req, res, this.file);
59
- }
60
- /**
61
- * @param { Request } req
62
- * @param { Response } res
63
- * @param { File|string } file
64
- */
65
-
66
-
67
- static async httpStreamHandler(req, res, file) {
68
- let path = file;
69
- let size;
70
-
71
- if (file instanceof _file.File) {
72
- path = file.path;
73
- size = file.size;
74
- }
75
-
76
- if (!size) {
77
- size = (await _fs.promises.stat(path)).size;
78
- }
79
-
80
- const mimeType = _mimeTypes.default.lookup(path);
81
-
82
- if (req.headers.range) {
83
- // meaning client (browser) has moved the forward/back slider
84
- // which has sent this request back to this server logic ... cool
85
- const range = req.headers.range;
86
- const parts = range.replace(/bytes=/, '').split('-');
87
- const partialStart = parts[0];
88
- const partialEnd = parts[1];
89
- const start = parseInt(partialStart, 10);
90
- const end = partialEnd ? parseInt(partialEnd, 10) : size - 1;
91
- const chunkSize = end - start + 1;
92
- let stream = (0, _fs.createReadStream)(path, {
93
- start: start,
94
- end: end
95
- });
96
- res.writeHead(206, {
97
- 'Content-Range': 'bytes ' + start + '-' + end + '/' + size,
98
- 'Accept-Ranges': 'bytes',
99
- 'Content-Length': chunkSize,
100
- 'Content-Type': mimeType
101
- });
102
- stream.pipe(res);
103
- return;
104
- }
105
-
106
- res.writeHead(200, {
107
- 'Content-Length': size,
108
- 'Accept-Ranges': 'bytes',
109
- 'Content-Type': mimeType
110
- });
111
- (0, _fs.createReadStream)(path).pipe(res);
112
- }
113
-
114
- }
115
-
116
- exports.default = DirectHttpStreamSession;
@@ -1,5 +0,0 @@
1
- export default class DirectStreamSession extends StreamSession {
2
- constructor(file: any, options: any, oblecto: any);
3
- mimeType: any;
4
- }
5
- import StreamSession from "../StreamSession";
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _mimeTypes = _interopRequireDefault(require("mime-types"));
9
-
10
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
11
-
12
- var _fs = _interopRequireDefault(require("fs"));
13
-
14
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- class DirectStreamSession extends _StreamSession.default {
19
- constructor(file, options, oblecto) {
20
- super(file, options, oblecto);
21
- this.mimeType = _mimeTypes.default.lookup(file.path);
22
- this.httpHeaders = {
23
- 'Accept-Ranges': 'none',
24
- 'Content-Length': this.file.size,
25
- 'Content-Type': this.mimeType
26
- };
27
- }
28
-
29
- async startStream() {
30
- await super.startStream();
31
-
32
- try {
33
- _fs.default.createReadStream(this.file.path).pipe(this.outputStream);
34
- } catch (e) {
35
- _logger.default.log(e);
36
- }
37
- }
38
-
39
- }
40
-
41
- exports.default = DirectStreamSession;
@@ -1,15 +0,0 @@
1
- export default class HLSStreamer extends StreamSession {
2
- constructor(file: any, options: any, oblecto: any);
3
- paused: boolean;
4
- maxGenCount: number;
5
- process: any;
6
- segmentCheckerInterval: NodeJS.Timeout;
7
- segmenterStart(cmd: any): void;
8
- startSegmenter(): void;
9
- segmentChecker(): Promise<void>;
10
- pauseSegmenting(): void;
11
- resumeSegmenting(): void;
12
- sendPlaylistFile(res: any): void;
13
- streamSegment(req: any, res: any, segmentId: any): Promise<void>;
14
- }
15
- import StreamSession from "../StreamSession";
@@ -1,148 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _mkdirp = _interopRequireDefault(require("mkdirp"));
11
-
12
- var _os = _interopRequireDefault(require("os"));
13
-
14
- var _ffmpeg = _interopRequireDefault(require("../../../submodules/ffmpeg"));
15
-
16
- var _fs = _interopRequireWildcard(require("fs"));
17
-
18
- var _DirectHttpStreamSession = _interopRequireDefault(require("./DirectHttpStreamSession"));
19
-
20
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
21
-
22
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- class HLSStreamer extends _StreamSession.default {
27
- constructor(file, options, oblecto) {
28
- super(file, options, oblecto);
29
- this.timeoutTime = 10000;
30
- this.paused = true;
31
- this.maxGenCount = 10;
32
-
33
- if (this.videoCodec === this.file.videoCodec || this.file.videoCodec in this.targetVideoCodecs) {
34
- this.videoCodec = 'copy';
35
- }
36
-
37
- if (this.audioCodec === this.file.audioCodec || this.file.audioCodec in this.targetAudioCodecs) {
38
- this.audioCodec = 'copy';
39
- }
40
-
41
- this.startTimeout(); // Create temporary directory to store HLS segments
42
-
43
- _mkdirp.default.sync(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}`);
44
-
45
- this.process = (0, _ffmpeg.default)(this.file.path) //.native()
46
- .videoCodec(this.getFfmpegVideoCodec()).audioCodec(this.audioCodec).seekInput(this.offset).outputOptions([//'-hls_time 10',
47
- //'-hls_list_size 10',
48
- //'-hls_init_time 2',
49
- '-hls_playlist_type event', '-hls_base_url', `/HLS/${this.sessionId}/segment/`, '-hls_segment_filename', `${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/%03d.ts`]);
50
- this.process.on('start', cmd => this.segmenterStart(cmd));
51
- this.process.on('error', err => {});
52
- this.segmentCheckerInterval = setInterval(() => this.segmentChecker(), 100);
53
- this.startSegmenter();
54
- }
55
-
56
- async endSession() {
57
- super.endSession();
58
- clearInterval(this.segmentCheckerInterval);
59
- await _fs.promises.rmdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`, {
60
- recursive: true
61
- });
62
- }
63
-
64
- segmenterStart(cmd) {
65
- this.paused = false;
66
- }
67
-
68
- startSegmenter() {
69
- this.process.save(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/index.m3u8`);
70
- }
71
-
72
- async segmentChecker() {
73
- if (!this.process) return;
74
- let files = await _fs.promises.readdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`);
75
- const segments = files.filter(s => s.includes('.ts'));
76
-
77
- if (segments.length > this.maxGenCount) {
78
- this.pauseSegmenting();
79
- } else {
80
- this.resumeSegmenting();
81
- }
82
- }
83
-
84
- pauseSegmenting() {
85
- if (!this.process) return;
86
- if (this.paused) return;
87
- this.paused = true;
88
- this.process.kill('SIGSTOP');
89
- }
90
-
91
- resumeSegmenting() {
92
- if (!this.process) return;
93
- if (!this.paused) return;
94
- this.paused = false;
95
- this.process.kill('SIGCONT');
96
- }
97
-
98
- sendPlaylistFile(res) {
99
- this.startTimeout();
100
- res.writeHead(200, {
101
- 'Content-Type': 'application/x-mpegURL'
102
- });
103
-
104
- _fs.default.createReadStream(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/index.m3u8`).pipe(res);
105
- }
106
-
107
- async streamSegment(req, res, segmentId) {
108
- this.clearTimeout();
109
- res.on('close', () => {
110
- this.startTimeout();
111
- });
112
-
113
- _DirectHttpStreamSession.default.httpStreamHandler(req, res, `${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/${('000' + segmentId).substr(-3)}.ts`);
114
-
115
- let files = await _fs.promises.readdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`);
116
-
117
- for (let file of files) {
118
- let sequenceId = file.replace('index', '').replace('.vtt', '').replace('.ts', '');
119
- sequenceId = parseInt(sequenceId);
120
-
121
- if (segmentId > sequenceId) {
122
- await _fs.promises.unlink(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/${file}`);
123
- }
124
- }
125
- }
126
-
127
- async addDestination(destination) {
128
- this.destinations.push(destination);
129
- destination.stream.on('close', () => {
130
- for (let i in this.destinations) {
131
- if (this.destinations[i].stream === destination.stream) {
132
- this.destinations.splice(i, 1);
133
- }
134
- }
135
- });
136
- }
137
-
138
- async startStream() {
139
- for (let {
140
- stream
141
- } of this.destinations) {
142
- this.sendPlaylistFile(stream);
143
- }
144
- }
145
-
146
- }
147
-
148
- exports.default = HLSStreamer;
@@ -1,9 +0,0 @@
1
- export default class RecodeFederationStreamSession extends StreamSession {
2
- constructor(file: any, options: any, oblecto: any);
3
- started: boolean | undefined;
4
- process: any;
5
- initFederationStream(): Promise<void>;
6
- federationClient: FederationMediaClient | undefined;
7
- }
8
- import StreamSession from "../StreamSession";
9
- import FederationMediaClient from "../../federation/client/FederationMediaClient";
@@ -1,72 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _ffmpeg = _interopRequireDefault(require("../../../submodules/ffmpeg"));
11
-
12
- var _stream = _interopRequireDefault(require("stream"));
13
-
14
- var _FederationMediaClient = _interopRequireDefault(require("../../federation/client/FederationMediaClient"));
15
-
16
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class RecodeFederationStreamSession extends _StreamSession.default {
21
- constructor(file, options, oblecto) {
22
- super(file, options, oblecto);
23
- }
24
-
25
- async addDestination(destination) {
26
- await super.addDestination(destination);
27
- }
28
-
29
- endSession() {
30
- super.endSession();
31
- this.federationClient.closeConnection();
32
- }
33
-
34
- async startStream() {
35
- await super.startStream();
36
- if (this.started) return;
37
- this.started = true;
38
- await this.initFederationStream();
39
- let inputOptions = ['-noaccurate_seek'];
40
- let outputOptions = ['-movflags', 'empty_moov', '-copyts'];
41
-
42
- if (this.oblecto.config.transcoding.hardwareAcceleration) {
43
- inputOptions.push('-hwaccel ' + this.oblecto.config.transcoding.hardwareAccelerator); // The Nvidia NVENC encoder doesn't support 10 bit encoding, so we need to force 8 bit
44
- // if the cuda accelerator has been selected
45
-
46
- if (this.oblecto.config.transcoding.hardwareAccelerator === 'cuda') {
47
- outputOptions.push('-pix_fmt yuv420p');
48
- }
49
- }
50
-
51
- this.process = (0, _ffmpeg.default)(this.inputStream).format(this.format).videoCodec(this.getFfmpegVideoCodec()).audioCodec(this.audioCodec).inputOptions(inputOptions).outputOptions(outputOptions).on('start', cmd => {
52
- _logger.default.log('INFO', this.sessionId, cmd);
53
- });
54
- this.process.on('error', err => {
55
- if (err.message !== 'ffmpeg was killed with signal SIGKILL') _logger.default.log('ERROR', this.sessionId, err);
56
- });
57
- this.process.pipe(this.outputStream, {
58
- end: true
59
- });
60
- }
61
-
62
- async initFederationStream() {
63
- this.federationClient = new _FederationMediaClient.default(this.oblecto, this.file.host);
64
- await this.federationClient.connect();
65
- await this.federationClient.setStreamDestination(this.inputStream);
66
- await this.federationClient.setStreamOffset(this.offset);
67
- await this.federationClient.startStreamFile(this.file.path);
68
- }
69
-
70
- }
71
-
72
- exports.default = RecodeFederationStreamSession;
@@ -1,6 +0,0 @@
1
- export default class RecodeStreamSession extends StreamSession {
2
- constructor(file: any, options: any, oblecto: any);
3
- started: boolean | undefined;
4
- process: any;
5
- }
6
- import StreamSession from "../StreamSession";