2016-07-21 03:24:18 -05:00
< h1 align = "center" >
PeerTube
< / h1 >
2015-06-09 10:41:40 -05:00
2016-07-21 03:24:18 -05:00
< h4 align = "center" >
2018-01-06 11:10:30 -06:00
Federated (ActivityPub) video streaming platform using P2P (BitTorrent)
directly in the web browser with < a href = "https://github.com/feross/webtorrent" > WebTorrent< / a > .
2016-07-21 03:24:18 -05:00
< / h4 >
2015-10-30 14:18:36 -05:00
2018-01-06 11:10:30 -06:00
**PeerTube is sponsored by [Framasoft ](https://framatube.org/#en ), a non-profit
that promotes, spreads and develops free culture in general, and free-libre
software in particular. If you want to support this project, please [consider
2018-01-18 02:39:06 -06:00
donating to them](https://soutenir.framasoft.org/en/).**
2017-11-23 11:22:40 -06:00
2016-07-21 03:24:18 -05:00
< p align = "center" >
< strong > Client< / strong >
2016-04-30 01:56:21 -05:00
2016-07-21 03:24:18 -05:00
< br / >
2015-06-09 10:41:40 -05:00
2016-07-21 03:24:18 -05:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?path=client" >
< img src = "https://david-dm.org/Chocobozzz/PeerTube.svg?path=client" alt = "Dependency Status" / >
< / a >
2018-01-16 02:18:19 -06:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?path=client&type=dev" >
2016-07-21 03:24:18 -05:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg?path=client" alt = "devDependency Status" / >
< / a >
< / p >
< p align = "center" >
< strong > Server< / strong >
< br / >
< a href = "https://travis-ci.org/Chocobozzz/PeerTube" >
2017-01-29 11:35:19 -06:00
< img src = "https://travis-ci.org/Chocobozzz/PeerTube.svg?branch=develop" alt = "Build Status" / >
2016-07-21 03:24:18 -05:00
< / a >
< a href = "https://david-dm.org/Chocobozzz/PeerTube" >
< img src = "https://david-dm.org/Chocobozzz/PeerTube.svg" alt = "Dependencies Status" / >
< / a >
2018-01-16 02:18:19 -06:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?type=dev" >
2016-07-21 03:24:18 -05:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg" alt = "devDependency Status" / >
< / a >
2016-07-21 04:56:38 -05:00
< a href = "http://standardjs.com/" >
< img src = "https://img.shields.io/badge/code%20style-standard-brightgreen.svg" alt = "JavaScript Style Guide" / >
2016-07-21 03:24:18 -05:00
< / a >
2017-01-12 12:17:12 -06:00
2016-12-14 15:47:20 -06:00
< a href = "https://kiwiirc.com/client/irc.freenode.net/#peertube" >
2016-12-14 15:52:57 -06:00
< img src = "https://img.shields.io/badge/%23peertube-on%20freenode-brightgreen.svg" alt = "PeerTube Freenode IRC" / >
2016-12-14 15:47:20 -06:00
< / a >
2016-07-21 03:24:18 -05:00
< / p >
2016-05-11 13:01:01 -05:00
2016-07-21 04:56:38 -05:00
< br / >
< p align = "center" >
2017-04-30 12:34:41 -05:00
< a href = "https://peertube.cpy.re" >
2017-12-11 11:39:35 -06:00
< img src = "https://lutim.cpy.re/mRdBAdeD.png" alt = "screenshot" / >
2016-07-21 04:56:38 -05:00
< / a >
< / p >
2016-05-10 15:47:48 -05:00
## Demonstration
2018-01-06 11:10:30 -06:00
Want to see it in action?
2016-06-05 03:49:01 -05:00
2018-01-12 11:07:41 -06:00
* Demonstration servers:
2018-01-29 01:52:20 -06:00
* [peertube.cpy.re ](http://peertube.cpy.re )
* [peertube2.cpy.re ](http://peertube2.cpy.re )
2018-01-12 11:07:41 -06:00
* [peertube3.cpy.re ](http://peertube3.cpy.re )
2018-01-06 11:10:30 -06:00
* [Video ](https://peertube.cpy.re/videos/watch/f78a97f8-a142-4ce1-a5bd-154bf9386504 )
2018-01-18 02:39:06 -06:00
to see what the "decentralization feature" looks like
2016-05-10 15:47:48 -05:00
2018-01-26 07:14:59 -06:00
*Currently PeerTube is still in alpha (we plan to release a beta in march). Demonstration servers do not support public registration. If you really want to test PeerTube before the public release, here is a list of PeerTube servers: https://github.com/Chocobozzz/PeerTube/wiki#other-peertube-servers.*
2015-10-30 14:18:36 -05:00
## Why
2018-01-06 11:10:30 -06:00
We can't build a FOSS video streaming alternatives to YouTube, Dailymotion,
Vimeo... with a centralized software. One organization alone may not have
enough money to pay for bandwidth and video storage of its servers.
2015-10-30 14:18:36 -05:00
2018-01-06 11:10:30 -06:00
So we need to have a decentralized network of servers seeding videos (as
[Diaspora ](https://github.com/diaspora/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 ](https://github.com/feross/webtorrent ), we can make P2P (thus
2018-01-12 11:07:41 -06:00
BitTorrent) inside the web browser, as of today.
2015-10-30 14:18:36 -05:00
2015-06-09 10:41:40 -05:00
## Features
2018-01-12 11:07:41 -06:00
- [X] Angular frontend
2017-11-27 09:06:13 -06:00
- [X] Join the fediverse
- [X] Follow other instances
- [X] Unfollow an instance
- [X] Get for the followers/following list
2015-06-09 10:41:40 -05:00
- [X] Upload a video
- [X] Seed the video
2017-11-27 09:06:13 -06:00
- [X] Send the meta data with ActivityPub to followers
2015-06-09 10:41:40 -05:00
- [X] Remove the video
- [X] List the videos
2017-11-27 09:06:13 -06:00
- [X] View the video in an HTML5 player with WebTorrent
2016-10-01 02:57:05 -05:00
- [X] Admin panel
2016-11-20 08:27:43 -06:00
- [X] OpenGraph tags
2017-10-31 10:11:38 -05:00
- [X] OEmbed
2017-04-16 07:26:40 -05:00
- [X] Update video
2018-01-12 11:07:41 -06:00
- [X] Federated videos view counter
- [X] Federated videos likes/dislikes
2017-10-31 10:11:38 -05:00
- [X] Transcoding to different definitions
- [X] Download file/torrent
- [X] User video bytes quota
2017-11-27 09:06:13 -06:00
- [X] User video channels
2017-10-31 10:11:38 -05:00
- [X] NSFW warnings/settings
- [X] Video description in markdown
- [X] User roles (administrator, moderator)
2017-04-16 07:26:40 -05:00
- [X] User registration
2017-10-31 10:11:38 -05:00
- [X] Video privacy settings (public, unlisted or private)
2017-11-27 09:06:13 -06:00
- [X] Signaling a video to the admin origin PeerTube instance
2018-01-12 11:07:41 -06:00
- [X] Federated videos comments
- [ ] Video imports (URL, Torrent, YouTube...)
- [ ] Advanced search
- [ ] Subtitles
2017-10-31 10:11:38 -05:00
- [ ] User playlist
- [ ] User subscriptions (by tags, author...)
2017-11-27 09:06:13 -06:00
- [ ] Add "DDOS" security
2017-04-16 07:26:40 -05:00
2015-06-09 10:41:40 -05:00
2018-01-12 11:07:41 -06:00
## Front compatibility
2015-06-09 10:41:40 -05:00
2018-01-12 11:07:41 -06:00
* Firefox
* Chrome/Chromium
2017-04-09 05:13:51 -05:00
2018-01-12 11:07:41 -06:00
## Dependencies
2015-06-09 10:41:40 -05:00
2018-01-12 11:07:41 -06:00
* nginx
* PostgreSQL
2018-01-25 08:05:18 -06:00
* Redis
2017-12-13 09:56:02 -06:00
* **NodeJS >= 8.x**
2017-04-26 15:45:27 -05:00
* yarn
2015-06-09 10:41:40 -05:00
* OpenSSL (cli)
2017-01-12 12:17:12 -06:00
* FFmpeg
2015-06-09 10:41:40 -05:00
2018-01-29 01:52:20 -06:00
## Run using Docker
2018-01-29 04:23:38 -06:00
See the [docker guide ](/support/doc/docker.md )
2018-01-29 01:52:20 -06:00
2018-01-12 11:07:41 -06:00
## Production
2016-04-30 05:56:44 -05:00
2018-01-29 04:23:38 -06:00
See the [production guide ](/support/doc/production.md ).
2016-04-30 05:56:44 -05:00
2016-07-22 04:45:48 -05:00
## Contributing
2018-01-06 11:10:30 -06:00
See the [contributing
2018-01-12 11:55:45 -06:00
guide](/.github/CONTRIBUTING.md)
2018-01-06 11:10:30 -06:00
to see how to contribute to PeerTube. Spoiler alert: you don't need to be a
coder to help!
2016-07-22 04:45:48 -05:00
2018-01-24 05:02:38 -06:00
## API REST documentation
For now only on Github:
* HTML version: [/support/doc/api/html/index.html ](/support/doc/api/html/index.html )
* Swagger/OpenAPI schema: [/support/doc/api/openapi.yaml ](/support/doc/api/openapi.yaml )
2015-06-09 10:41:40 -05:00
## Architecture
2018-01-12 11:55:45 -06:00
See [ARCHITECTURE.md ](/ARCHITECTURE.md ) for a more detailed explanation.
2015-10-29 17:18:17 -05:00
2015-06-09 10:41:40 -05:00
### Backend
2018-01-06 11:10:30 -06:00
* The backend is a REST API.
* Servers communicate with each others with [Activity
Pub](https://www.w3.org/TR/activitypub/).
* Each server has its own users who query it (search videos, query where the
torrent URI of this specific video is...).
* If a user uploads a video, the server seeds it and sends its followers some
metadata (name, short description, torrent URI...).
* 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 ](http://www.bittorrent.org/beps/bep_0019.html )) where the
video was uploaded.
2015-06-09 10:41:40 -05:00
Here are some simple schemes:
2016-07-21 03:24:18 -05:00
< p align = "center" >
2017-06-20 11:52:57 -05:00
< img src = "https://lutim.cpy.re/6Qut3ure.png" alt = "Decentralized" / >
2016-07-21 03:24:18 -05:00
2017-06-20 11:52:57 -05:00
< img src = "https://lutim.cpy.re/NvRAcv6U.png" alt = "Watch a video" / >
2015-06-09 10:41:40 -05:00
2017-06-20 11:52:57 -05:00
< img src = "https://lutim.cpy.re/pqKm3Q5S.png" alt = "Watch a P2P video" / >
2015-06-09 10:41:40 -05:00
2016-07-21 03:24:18 -05:00
< / p >