2016-07-21 10:24:18 +02:00
< h1 align = "center" >
PeerTube
< / h1 >
2015-06-09 17:41:40 +02:00
2018-05-28 13:33:27 +02:00
< p align = "center" >
2018-01-06 18:10:30 +01: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 13:33:27 +02:00
< / p >
2015-10-30 20:18:36 +01:00
2018-05-28 17:28:53 +02: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 18:22:40 +01:00
2016-07-21 10:24:18 +02:00
< p align = "center" >
< strong > Client< / strong >
2016-04-30 08:56:21 +02:00
2016-07-21 10:24:18 +02:00
< br / >
2015-06-09 17:41:40 +02:00
2016-07-21 10:24:18 +02: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 09:18:19 +01:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?path=client&type=dev" >
2016-07-21 10:24:18 +02:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg?path=client" alt = "devDependency Status" / >
< / a >
2018-05-17 10:55:01 +02:00
2018-05-17 16:33:20 +02: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 10:24:18 +02:00
< / p >
< p align = "center" >
< strong > Server< / strong >
< br / >
< a href = "https://travis-ci.org/Chocobozzz/PeerTube" >
2017-01-29 18:35:19 +01:00
< img src = "https://travis-ci.org/Chocobozzz/PeerTube.svg?branch=develop" alt = "Build Status" / >
2016-07-21 10:24:18 +02: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 09:18:19 +01:00
< a href = "https://david-dm.org/Chocobozzz/PeerTube?type=dev" >
2016-07-21 10:24:18 +02:00
< img src = "https://david-dm.org/Chocobozzz/PeerTube/dev-status.svg" alt = "devDependency Status" / >
< / a >
2016-07-21 11:56:38 +02: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 10:24:18 +02:00
< / a >
2017-01-12 19:17:12 +01:00
2016-12-14 22:47:20 +01:00
< a href = "https://kiwiirc.com/client/irc.freenode.net/#peertube" >
2016-12-14 22:52:57 +01:00
< img src = "https://img.shields.io/badge/%23peertube-on%20freenode-brightgreen.svg" alt = "PeerTube Freenode IRC" / >
2016-12-14 22:47:20 +01:00
< / a >
2016-07-21 10:24:18 +02:00
< / p >
2016-05-11 20:01:01 +02:00
2016-07-21 11:56:38 +02:00
< br / >
< p align = "center" >
2017-04-30 19:34:41 +02:00
< a href = "https://peertube.cpy.re" >
2017-12-11 18:39:35 +01:00
< img src = "https://lutim.cpy.re/mRdBAdeD.png" alt = "screenshot" / >
2016-07-21 11:56:38 +02:00
< / a >
< / p >
2016-05-10 22:47:48 +02:00
2018-03-22 19:57:20 +01: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 22:47:48 +02:00
## Demonstration
2018-01-06 18:10:30 +01:00
Want to see it in action?
2016-06-05 10:49:01 +02:00
2018-01-12 18:07:41 +01:00
* Demonstration servers:
2018-01-29 08:52:20 +01:00
* [peertube.cpy.re ](http://peertube.cpy.re )
* [peertube2.cpy.re ](http://peertube2.cpy.re )
2018-01-12 18:07:41 +01:00
* [peertube3.cpy.re ](http://peertube3.cpy.re )
2018-01-06 18:10:30 +01:00
* [Video ](https://peertube.cpy.re/videos/watch/f78a97f8-a142-4ce1-a5bd-154bf9386504 )
2018-01-18 09:39:06 +01:00
to see what the "decentralization feature" looks like
2018-03-22 19:57:20 +01: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 22:47:48 +02:00
2015-10-30 20:18:36 +01:00
## Why
2018-01-06 18:10:30 +01: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 20:18:36 +01:00
2018-01-06 18:10:30 +01: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 18:07:41 +01:00
BitTorrent) inside the web browser, as of today.
2015-10-30 20:18:36 +01:00
2018-01-12 18:07:41 +01:00
## Dependencies
2015-06-09 17:41:40 +02:00
2018-01-12 18:07:41 +01:00
* nginx
* PostgreSQL
2018-01-25 15:05:18 +01:00
* Redis
2017-12-13 16:56:02 +01:00
* **NodeJS >= 8.x**
2017-04-26 22:45:27 +02:00
* yarn
2015-06-09 17:41:40 +02:00
* OpenSSL (cli)
2018-03-14 09:15:17 +01:00
* **FFmpeg >= 3.x**
2015-06-09 17:41:40 +02:00
2018-01-29 08:52:20 +01:00
## Run using Docker
2018-01-29 11:23:38 +01:00
See the [docker guide ](/support/doc/docker.md )
2018-01-29 08:52:20 +01:00
2018-06-06 14:42:56 +02: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 18:07:41 +01:00
## Production
2016-04-30 12:56:44 +02:00
2018-01-29 11:23:38 +01:00
See the [production guide ](/support/doc/production.md ).
2016-04-30 12:56:44 +02:00
2018-02-19 11:12:58 +01:00
## Contributing/Test
2016-07-22 11:45:48 +02:00
2018-01-06 18:10:30 +01:00
See the [contributing
2018-01-12 18:55:45 +01:00
guide](/.github/CONTRIBUTING.md)
2018-02-19 11:12:58 +01:00
to see how to test or contribute to PeerTube. Spoiler alert: you don't need to be a
2018-01-06 18:10:30 +01:00
coder to help!
2016-07-22 11:45:48 +02:00
2018-01-24 12:02:38 +01:00
## API REST documentation
2018-04-17 11:11:25 +02:00
Quick Start: [/support/doc/api/quickstart.md ](/support/doc/api/quickstart.md )
Endpoints documentation:
2018-01-24 12:02:38 +01:00
2018-03-22 18:18:14 +01: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 12:02:38 +01:00
* Swagger/OpenAPI schema: [/support/doc/api/openapi.yaml ](/support/doc/api/openapi.yaml )
2018-02-19 11:12:58 +01:00
## Tools
2018-03-05 10:00:15 +01:00
* [Import videos (YouTube, Dailymotion, Vimeo...) ](/support/doc/tools.md )
* [Upload videos from the CLI ](/support/doc/tools.md )
2018-02-19 11:12:58 +01:00
2018-03-07 11:36:42 +01:00
## FAQ
If you have a question, please try to find the answer in the [FAQ ](/FAQ.md ) first.
2015-06-09 17:41:40 +02:00
## Architecture
2018-01-12 18:55:45 +01:00
See [ARCHITECTURE.md ](/ARCHITECTURE.md ) for a more detailed explanation.
2015-10-29 23:18:17 +01:00
2015-06-09 17:41:40 +02:00
### Backend
2018-01-06 18:10:30 +01: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 17:41:40 +02:00
Here are some simple schemes:
2016-07-21 10:24:18 +02:00
< p align = "center" >
2017-06-20 18:52:57 +02:00
< img src = "https://lutim.cpy.re/6Qut3ure.png" alt = "Decentralized" / >
2016-07-21 10:24:18 +02:00
2017-06-20 18:52:57 +02:00
< img src = "https://lutim.cpy.re/NvRAcv6U.png" alt = "Watch a video" / >
2015-06-09 17:41:40 +02:00
2017-06-20 18:52:57 +02:00
< img src = "https://lutim.cpy.re/pqKm3Q5S.png" alt = "Watch a P2P video" / >
2015-06-09 17:41:40 +02:00
2016-07-21 10:24:18 +02:00
< / p >
2018-03-22 08:55:40 +01: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 / > .