You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

torrent-streamer.js 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. var httpStream = require("./http-stream");
  2. var torrentStream = require("torrent-stream");
  3. var mediaformats = [
  4. "webm", "mkv", "flv", "vob", "avi", "mov","wmv", "you",
  5. "asf", "mp4", "m4p", "m4v", "svi", "ogv", "ogg"
  6. ]
  7. var rxstr =
  8. "\\.("+
  9. mediaformats.join("|")+
  10. ")$";
  11. var mediarx = new RegExp(rxstr, "i");
  12. var engine;
  13. var conf;
  14. exports.init = function(app, _conf) {
  15. conf = _conf;
  16. }
  17. exports.stream = function(magnet, cb) {
  18. if (engine)
  19. return engine.destroy(() =>
  20. { engine = null; exports.stream(magnet, cb) });
  21. try {
  22. engine = torrentStream(magnet, {
  23. tmp: conf.tmpdir
  24. });
  25. } catch (err) {
  26. return cb(err.toString());
  27. }
  28. engine.on("ready", () => {
  29. var file = null;
  30. engine.files.forEach(f => {
  31. if (mediarx.test(f.name) &&
  32. (file == null || f.length > file.length)) {
  33. file = f;
  34. }
  35. });
  36. if (file == null)
  37. return cb("No media file in the torrent");
  38. file.select();
  39. httpStream.readStreamCreator = function(options) {
  40. var rs = file.createReadStream(options);
  41. rs.filesize = file.length;
  42. rs.filename = file.name;
  43. return rs;
  44. }
  45. cb(null, file.length, file.name);
  46. });
  47. }
  48. exports.stop = function() {
  49. if (engine != null)
  50. engine.destroy();
  51. }