2016-07-21 04:24:18 -04:00
< h1 align = "center" >
PeerTube
< / h1 >
2015-06-09 11:41:40 -04:00
2018-05-28 07:33:27 -04:00
< p align = "center" >
2018-01-06 12:10:30 -05:00
Federated (ActivityPub) video streaming platform using P2P (BitTorrent)
directly in the web browser with < a href = "https://github.com/feross/webtorrent" > WebTorrent< / a > .
2018-05-28 07:33:27 -04:00
< / p >
2015-10-30 15:18:36 -04:00
2018-05-28 07:33:27 -04:00
**We are running [a crowdfunding campaign ](https://www.kisskissbankbank.com/en/projects/peertube-a-free-and-federated-video-platform ) to pave the road to version 1.0 of PeerTube!**
2017-11-23 12:22:40 -05:00
2016-07-21 04:24:18 -04:00
< p align = "center" >
< strong > Client< / strong >
2016-04-30 02:56:21 -04:00
2016-07-21 04:24:18 -04:00
< br / >
2015-06-09 11:41:40 -04:00
2016-07-21 04:24:18 -04: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 03:18:19 -05:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?path=client&type=dev" >
2016-07-21 04:24:18 -04:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg?path=client" alt = "devDependency Status" / >
< / a >
2018-05-17 04:55:01 -04:00
2018-05-17 10:33:20 -04:00
< a href = "https://www.browserstack.com/automate/public-build/VXBPc0szNjUvRUNsREJQRFF6RkEvSjJBclZ4VUJBUm1hcS9RZGpUbitRST0tLWFWbjNEdVN6eEZpYTk4dGVpMkVlQWc9PQ==--644e755052bf7fe2346eb6e868be8e706718a17c%" >
< img src = 'https://www.browserstack.com/automate/badge.svg?badge_key=VXBPc0szNjUvRUNsREJQRFF6RkEvSjJBclZ4VUJBUm1hcS9RZGpUbitRST0tLWFWbjNEdVN6eEZpYTk4dGVpMkVlQWc9PQ==--644e755052bf7fe2346eb6e868be8e706718a17c%' / >
< / a >
2016-07-21 04:24:18 -04:00
< / p >
< p align = "center" >
< strong > Server< / strong >
< br / >
< a href = "https://travis-ci.org/Chocobozzz/PeerTube" >
2017-01-29 12:35:19 -05:00
< img src = "https://travis-ci.org/Chocobozzz/PeerTube.svg?branch=develop" alt = "Build Status" / >
2016-07-21 04:24:18 -04: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 03:18:19 -05:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?type=dev" >
2016-07-21 04:24:18 -04:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg" alt = "devDependency Status" / >
< / a >
2016-07-21 05:56:38 -04: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 04:24:18 -04:00
< / a >
2017-01-12 13:17:12 -05:00
2016-12-14 16:47:20 -05:00
< a href = "https://kiwiirc.com/client/irc.freenode.net/#peertube" >
2016-12-14 16:52:57 -05:00
< img src = "https://img.shields.io/badge/%23peertube-on%20freenode-brightgreen.svg" alt = "PeerTube Freenode IRC" / >
2016-12-14 16:47:20 -05:00
< / a >
2016-07-21 04:24:18 -04:00
< / p >
2016-05-11 14:01:01 -04:00
2016-07-21 05:56:38 -04:00
< br / >
< p align = "center" >
2017-04-30 13:34:41 -04:00
< a href = "https://peertube.cpy.re" >
2017-12-11 12:39:35 -05:00
< img src = "https://lutim.cpy.re/mRdBAdeD.png" alt = "screenshot" / >
2016-07-21 05:56:38 -04:00
< / a >
< / p >
2016-05-10 16:47:48 -04:00
2018-03-22 14:57:20 -04:00
< p align = "center" >
< strong > < a title = "Website" target = "_blank" href = "https://joinpeertube.org" > Website< / a > |
< a title = "Instances list" target = "_blank" href = "https://instances.joinpeertube.org" > Instances list< / a >
< / strong >
< / p >
2016-05-10 16:47:48 -04:00
## Demonstration
2018-01-06 12:10:30 -05:00
Want to see it in action?
2016-06-05 04:49:01 -04:00
2018-01-12 12:07:41 -05:00
* Demonstration servers:
2018-01-29 02:52:20 -05:00
* [peertube.cpy.re ](http://peertube.cpy.re )
* [peertube2.cpy.re ](http://peertube2.cpy.re )
2018-01-12 12:07:41 -05:00
* [peertube3.cpy.re ](http://peertube3.cpy.re )
2018-01-06 12:10:30 -05:00
* [Video ](https://peertube.cpy.re/videos/watch/f78a97f8-a142-4ce1-a5bd-154bf9386504 )
2018-01-18 03:39:06 -05:00
to see what the "decentralization feature" looks like
2018-03-22 14:57:20 -04:00
* [Video ](https://peertube.cpy.re/videos/watch/da2b08d4-a242-4170-b32a-4ec8cbdca701 ) to see
the communication between PeerTube and [Mastodon ](https://github.com/tootsuite/mastodon )
2016-05-10 16:47:48 -04:00
2015-10-30 15:18:36 -04:00
## Why
2018-01-06 12:10:30 -05: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 15:18:36 -04:00
2018-01-06 12:10:30 -05: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 12:07:41 -05:00
BitTorrent) inside the web browser, as of today.
2015-10-30 15:18:36 -04:00
2018-01-12 12:07:41 -05:00
## Dependencies
2015-06-09 11:41:40 -04:00
2018-01-12 12:07:41 -05:00
* nginx
* PostgreSQL
2018-01-25 09:05:18 -05:00
* Redis
2017-12-13 10:56:02 -05:00
* **NodeJS >= 8.x**
2017-04-26 16:45:27 -04:00
* yarn
2015-06-09 11:41:40 -04:00
* OpenSSL (cli)
2018-03-14 04:15:17 -04:00
* **FFmpeg >= 3.x**
2015-06-09 11:41:40 -04:00
2018-01-29 02:52:20 -05:00
## Run using Docker
2018-01-29 05:23:38 -05:00
See the [docker guide ](/support/doc/docker.md )
2018-01-29 02:52:20 -05:00
2018-01-12 12:07:41 -05:00
## Production
2016-04-30 06:56:44 -04:00
2018-01-29 05:23:38 -05:00
See the [production guide ](/support/doc/production.md ).
2016-04-30 06:56:44 -04:00
2018-02-19 05:12:58 -05:00
## Contributing/Test
2016-07-22 05:45:48 -04:00
2018-01-06 12:10:30 -05:00
See the [contributing
2018-01-12 12:55:45 -05:00
guide](/.github/CONTRIBUTING.md)
2018-02-19 05:12:58 -05:00
to see how to test or contribute to PeerTube. Spoiler alert: you don't need to be a
2018-01-06 12:10:30 -05:00
coder to help!
2016-07-22 05:45:48 -04:00
2018-01-24 06:02:38 -05:00
## API REST documentation
2018-04-17 05:11:25 -04:00
Quick Start: [/support/doc/api/quickstart.md ](/support/doc/api/quickstart.md )
Endpoints documentation:
2018-01-24 06:02:38 -05:00
2018-03-22 13:18:14 -04:00
* HTML version: [/support/doc/api/html/index.html ](https://htmlpreview.github.io/?https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/api/html/index.html )
2018-01-24 06:02:38 -05:00
* Swagger/OpenAPI schema: [/support/doc/api/openapi.yaml ](/support/doc/api/openapi.yaml )
2018-02-19 05:12:58 -05:00
## Tools
2018-03-05 04:00:15 -05:00
* [Import videos (YouTube, Dailymotion, Vimeo...) ](/support/doc/tools.md )
* [Upload videos from the CLI ](/support/doc/tools.md )
2018-02-19 05:12:58 -05:00
2018-03-07 05:36:42 -05:00
## FAQ
If you have a question, please try to find the answer in the [FAQ ](/FAQ.md ) first.
2015-06-09 11:41:40 -04:00
## Architecture
2018-01-12 12:55:45 -05:00
See [ARCHITECTURE.md ](/ARCHITECTURE.md ) for a more detailed explanation.
2015-10-29 18:18:17 -04:00
2015-06-09 11:41:40 -04:00
### Backend
2018-01-06 12:10:30 -05: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 11:41:40 -04:00
Here are some simple schemes:
2016-07-21 04:24:18 -04:00
< p align = "center" >
2017-06-20 12:52:57 -04:00
< img src = "https://lutim.cpy.re/6Qut3ure.png" alt = "Decentralized" / >
2016-07-21 04:24:18 -04:00
2017-06-20 12:52:57 -04:00
< img src = "https://lutim.cpy.re/NvRAcv6U.png" alt = "Watch a video" / >
2015-06-09 11:41:40 -04:00
2017-06-20 12:52:57 -04:00
< img src = "https://lutim.cpy.re/pqKm3Q5S.png" alt = "Watch a P2P video" / >
2015-06-09 11:41:40 -04:00
2016-07-21 04:24:18 -04:00
< / p >
2018-03-22 03:55:40 -04:00
## License
Copyright (C) 2018 PeerTube Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see < http: / / www . gnu . org / licenses / > .