2016-07-21 03:24:18 -05:00
< h1 align = "center" >
PeerTube
< / h1 >
2015-06-09 10:41:40 -05:00
2018-05-28 06:33:27 -05:00
< p 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 > .
2018-05-28 06:33:27 -05:00
< / p >
2015-10-30 14:18:36 -05:00
2018-05-28 10:28:53 -05:00
< p align = "center" >
< strong > We are running < a href = "https://www.kisskissbankbank.com/en/projects/peertube-a-free-and-federated-video-platform" > a crowdfunding campaign< / a > to pave the road to version 1.0 of PeerTube!< / strong >
< / p >
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 >
2018-05-17 03:55:01 -05:00
2018-05-17 09:33:20 -05: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 03:24:18 -05:00
< / 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
2018-03-22 13:57:20 -05: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 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
2018-03-22 13:57:20 -05: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 15:47:48 -05:00
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
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)
2018-03-14 03:15:17 -05:00
* **FFmpeg >= 3.x**
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-06-06 07:42:56 -05:00
## Run on YunoHost
[![Install Peertube with YunoHost ](https://install-app.yunohost.org/install-with-yunohost.png )](https://install-app.yunohost.org/?app=peertube)
Peertube app for [YunoHost ](https://yunohost.org ). See [here ](https://github.com/YunoHost-Apps/peertube_ynh )
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
2018-02-19 04:12:58 -06:00
## Contributing/Test
2016-07-22 04:45:48 -05:00
2018-01-06 11:10:30 -06:00
See the [contributing
2018-01-12 11:55:45 -06:00
guide](/.github/CONTRIBUTING.md)
2018-02-19 04:12:58 -06:00
to see how to test or contribute to PeerTube. Spoiler alert: you don't need to be a
2018-01-06 11:10:30 -06:00
coder to help!
2016-07-22 04:45:48 -05:00
2018-01-24 05:02:38 -06:00
## API REST documentation
2018-04-17 04:11:25 -05:00
Quick Start: [/support/doc/api/quickstart.md ](/support/doc/api/quickstart.md )
Endpoints documentation:
2018-01-24 05:02:38 -06:00
2018-03-22 12:18:14 -05: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 05:02:38 -06:00
* Swagger/OpenAPI schema: [/support/doc/api/openapi.yaml ](/support/doc/api/openapi.yaml )
2018-02-19 04:12:58 -06:00
## Tools
2018-03-05 03:00:15 -06:00
* [Import videos (YouTube, Dailymotion, Vimeo...) ](/support/doc/tools.md )
* [Upload videos from the CLI ](/support/doc/tools.md )
2018-02-19 04:12:58 -06:00
2018-03-07 04:36:42 -06:00
## FAQ
If you have a question, please try to find the answer in the [FAQ ](/FAQ.md ) first.
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 >
2018-03-22 02:55:40 -05: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 / > .