Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mafintosh/torrent-stream
The low level streaming torrent engine that peerflix uses
https://github.com/mafintosh/torrent-stream
Last synced: 24 days ago
JSON representation
The low level streaming torrent engine that peerflix uses
- Host: GitHub
- URL: https://github.com/mafintosh/torrent-stream
- Owner: mafintosh
- License: mit
- Created: 2014-03-09T11:09:17.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-12-04T19:55:34.000Z (almost 4 years ago)
- Last Synced: 2024-05-13T16:25:29.475Z (6 months ago)
- Language: JavaScript
- Homepage:
- Size: 306 KB
- Stars: 1,939
- Watchers: 69
- Forks: 228
- Open Issues: 92
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-peer-to-peer - torrent-stream
- awesome-peer-to-peer - torrent-stream
- awesome-network-js - torrent-stream
README
# torrent-stream
[![Travis Build branch](https://img.shields.io/travis/mafintosh/torrent-stream/master.svg)](https://travis-ci.org/mafintosh/torrent-stream)
[![Dependency Status](https://david-dm.org/mafintosh/torrent-stream.svg)](https://david-dm.org/mafintosh/torrent-stream) [![devDependency Status](https://david-dm.org/mafintosh/torrent-stream/dev-status.svg)](https://david-dm.org/mafintosh/torrent-stream#info=devDependencies)The streaming torrent engine that [peerflix](https://github.com/mafintosh/peerflix) uses
npm install torrent-stream
## How can I help?
1. Open issues on things that are broken
2. Fix open issues by sending PRs
3. Add documentation## Usage
torrent-stream is a node module that allows you to access files inside a torrent as node streams.
``` js
var torrentStream = require('torrent-stream');var engine = torrentStream('magnet:my-magnet-link');
engine.on('ready', function() {
engine.files.forEach(function(file) {
console.log('filename:', file.name);
var stream = file.createReadStream();
// stream is readable stream to containing the file content
});
});
```You can pass `start` and `end` options to stream to slice the file
``` js
// get a stream containing bytes 10-100 inclusive.
var stream = file.createReadStream({
start: 10,
end: 100
});
```Per default no files are downloaded unless you create a stream to them.
If you want to fetch a file without creating a stream you should use the `file.select` and `file.deselect` methods.When you start torrent-stream it will connect to the torrent dht
and fetch pieces according to the streams you create.## Full API
#### `engine = torrentStream(magnet_link_or_buffer, opts)`
Create a new engine instance. Options can contain the following
``` js
{
connections: 100, // Max amount of peers to be connected to.
uploads: 10, // Number of upload slots.
tmp: '/tmp', // Root folder for the files storage.
// Defaults to '/tmp' or temp folder specific to your OS.
// Each torrent will be placed into a separate folder under /tmp/torrent-stream/{infoHash}
path: '/tmp/my-file', // Where to save the files. Overrides `tmp`.
verify: true, // Verify previously stored data before starting
// Defaults to true
dht: true, // Whether or not to use DHT to initialize the swarm.
// Defaults to true
tracker: true, // Whether or not to use trackers from torrent file or magnet link
// Defaults to true
trackers: [
'udp://tracker.openbittorrent.com:80',
'udp://tracker.ccc.de:80'
],
// Allows to declare additional custom trackers to use
// Defaults to empty
storage: myStorage() // Use a custom storage backend rather than the default disk-backed one
}
```#### `engine.on('ready', fn)`
Emitted when the engine is ready to be used.
The files array will be empty until this event is emitted#### `engine.on('download', [piece-index])`
Emitted every time a piece has been downloaded and verified.
#### `engine.on('upload', [piece-index, offset, length])`
Emitted every time a piece is uploaded.
#### `engine.on('torrent', fn)`
Emitted when the metadata has been fetched.
#### `engine.on('idle', fn)`
Emitted when all selected files have been completely downloaded.
#### `engine.files[...]`
An array of all files in the torrent. See the file section for more info on what methods the file has
#### `engine.destroy(cb)`
Destroy the engine. Destroys all connections to peers
#### `engine.connect('127.0.0.0:6881')`
Connect to a peer manually
#### `engine.disconnect('127.0.0.1:6881')`
Disconnect from a peer manually
#### `engine.block('127.0.0.1:6881')`
Disconnect from a peer and add it to the blocklist, preventing any other connection to it
#### `engine.remove([keep-pieces], cb)`
Completely remove all saved data for this torrent.
Optionally, only remove cache and temporary data but keep downloaded pieces#### `engine.listen([port], cb)`
Listen for incoming peers on the specified port. Port defaults to `6881`
#### `engine.swarm`
The attached [peer-wire-swarm](https://github.com/mafintosh/peer-wire-swarm) instance
#### `engine.swarm.downloaded`
Shows the total bytes downloaded. With this you can know how much you downloaded and how many bytes you still have to download to reach the end of the file.
#### `file = engine.files[...]`
A file in the torrent. They contains the following data
``` js
{
name: 'my-filename.txt',
path: 'my-folder/my-filename.txt',
length: 424242
}
```#### `file.select()`
Selects the file to be downloaded, but at a lower priority than streams.
Useful if you know you need the file at a later stage.#### `file.deselect()`
Deselects the file which means it won't be downloaded unless someone creates a stream to it
#### `stream = file.createReadStream(opts)`
Create a readable stream to the file. Pieces needed by the stream will be prioritized highly.
Options can contain the following``` js
{
start: startByte,
end: endByte
}
```Both `start` and `end` are inclusive
## License
MIT