.github | ||
client | ||
config | ||
scripts | ||
server | ||
shared | ||
support | ||
.codeclimate.yml | ||
.gitignore | ||
.travis.yml | ||
ARCHITECTURE.md | ||
CREDITS.md | ||
FAQ.md | ||
LICENSE | ||
package.json | ||
README.md | ||
server.ts | ||
tsconfig.json | ||
tslint.json | ||
yarn.lock |
PeerTube
Decentralized video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent.
PeerTube is sponsored by Framasoft, a non-profit that promotes, spreads and develops free-libre software. If you want to support this project, please consider donating them.
Demonstration
Want to see in action?
- Demo server
- Video to see how the "decentralization feature" looks like
- Experimental demo servers that share videos (they are in the same network): peertube2, peertube3. Since I do experiments with them, sometimes they might not work correctly.
Why
We can't build a FOSS video streaming alternatives to YouTube, Dailymotion, Vimeo... with a centralized software. One organization alone cannot have enough money to pay bandwidth and video storage of its server.
So we need to have a decentralized network (as Diaspora for example). But it's not enough because one video could become famous and overload the server. It's the reason why we need to use a P2P protocol to limit the server load. Thanks to WebTorrent, we can make P2P (thus bittorrent) inside the web browser right now.
Features
- Frontend
- Angular frontend
- Join the fediverse
- Follow other instances
- Unfollow an instance
- Get for the followers/following list
- Upload a video
- Seed the video
- Send the meta data with ActivityPub to followers
- Remove the video
- List the videos
- View the video in an HTML5 player with WebTorrent
- Admin panel
- OpenGraph tags
- OEmbed
- Update video
- Videos view counter
- Videos likes/dislikes
- Transcoding to different definitions
- Download file/torrent
- User video bytes quota
- User video channels
- NSFW warnings/settings
- Video description in markdown
- User roles (administrator, moderator)
- User registration
- Video privacy settings (public, unlisted or private)
- Signaling a video to the admin origin PeerTube instance
- Videos comments
- User playlist
- User subscriptions (by tags, author...)
- Add "DDOS" security
Installation
See wiki for complete installation commands.
Front compatibility
- Chromium
- Firefox (>= 42 for MediaSource support)
Dependencies
- NodeJS >= 8.x
- yarn
- OpenSSL (cli)
- PostgreSQL
- FFmpeg
Debian
- Install NodeJS 6.x (previous LTS): https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions
- Install yarn: https://yarnpkg.com/en/docs/install
- Add jessie backports to your source.list: http://backports.debian.org/Instructions/
- Run:
$ apt-get update
$ apt-get install ffmpeg postgresql-9.4 openssl
Ubuntu 16.04
- Install NodeJS 8.x (current LTS): (same as Debian)
- Install yarn: (same as Debian)
- Run:
$ apt-get update
$ apt-get install ffmpeg postgresql openssl
Other distribution... (PR welcome)
Sources
$ git clone -b master https://github.com/Chocobozzz/PeerTube
$ cd PeerTube
$ yarn install
$ npm run build
Usage
Production
If you want to run PeerTube for production (bad idea for now :) ):
$ cp config/production.yaml.example config/production.yaml
Then edit the config/production.yaml
file according to your webserver configuration. Keys set in this file will override those of config/default.yml
.
Finally, run the server with the production
NODE_ENV
variable set.
$ NODE_ENV=production npm start
The administrator password is automatically generated and can be found in the logs. You can set another password with:
$ NODE_ENV=production npm run reset-password -- -u root
Nginx template (reverse proxy): https://github.com/Chocobozzz/PeerTube/tree/master/support/nginx
Systemd template: https://github.com/Chocobozzz/PeerTube/tree/master/support/systemd
You can check the application (CORS headers, tracker websocket...) by running:
$ NODE_ENV=production npm run check
Upgrade
The following commands will upgrade the source (according to your current branch), upgrade node modules and rebuild client application:
# systemctl stop peertube
$ npm run upgrade-peertube
# systemctl start peertube
Development
In this mode, the server will run requests between instances more quickly, the video durations are limited to a few seconds.
To develop on the server-side (server files are automatically compiled when we modify them and the server restarts automatically too):
$ npm run dev:server
The server (with the client) will listen on localhost:9000
.
To develop on the client side (client files are automatically compiled when we modify them):
$ npm run dev:client
The API will listen on localhost:9000
and the frontend on localhost:3000
(with hot module replacement, you don't need to refresh the web browser).
Username: root
Password: test
Test with 3 fresh nodes
$ npm run clean:server:test
$ npm run play
Then you will get access to the three nodes at http://localhost:900{1,2,3}
with the root
as username and test{1,2,3}
for the password.
Other commands
To print all available command run:
$ npm run help
Contributing
See the contributing guide.
See the server code documentation.
See the client code documentation.
Architecture
See ARCHITECTURE.md for a more detailed explication.
Backend
- The backend is a REST API
- Servers communicate with each others with Activity Pub
- Each server has its own users who query it (search videos, where the torrent URI of this specific video is...)
- If a user upload a video, the server seeds it and sends the video information (name, short description, torrent URI...) its followers
- A server is a tracker responsible for all the videos uploaded in it
- Even if nobody watches a video, it is seeded by the server (through WebSeed protocol) where the video was uploaded
Here are some simple schemes: