# hlsjs-p2p-engine
**Repository Path**: elevate/hlsjs-p2p-engine
## Basic Information
- **Project Name**: hlsjs-p2p-engine
- **Description**: 一个完全免费的视频加速插件,通过WebRTC datachannel技术,在不影响用户体验的前提下,最大化p2p率,从而为CP节省流量成本。QQ群:746163014
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: http://docs.cdnbye.com
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 60
- **Created**: 2022-04-22
- **Last Updated**: 2022-04-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

Save Your Bandwidth using WebRTC.
**[中文](Readme_zh.md)**
This JS library implements [WebRTC](https://en.wikipedia.org/wiki/WebRTC) datachannel to scale live/vod video streaming by peer-to-peer network using bittorrent-like protocol. The forming peer network can be layed over other CDNs or on top of the origin server. Powered by [hls.js](https://github.com/video-dev/hls.js), it can play HLS on any platform with many popular HTML5 players such as video.js, JWPlayer and Flowplayer. BTW, if you need a p2p engine for [dash.js](https://github.com/Dash-Industry-Forum/dash.js), [tell me](https://github.com/cdnbye/dashjs-p2p-engine/issues/1)!
This library is a part of CDNBye project which attempts to deliver high quality video streams, decreasing the number of requests to CDN servers, reducing the cost of transmission and enhancing system’s scalability. As the name suggests, CDNBye will help you offload bandwidth from expensive traditional CDNs,while also maximizing a user’s viewing experience.
## Notice
v0.2.x is deprecated, please update to the latest version.
## Playground
[Click me!](https://cdnbye.github.io/hlsjs-p2p-demo/)
## Getting Started
#### Quick Start Demo
Put the [quick-start.html](demo/quick-start.html) in your web page, run it. Wait for a few seconds,then open the same page from another browser. Now you have a direct P2P connection between two browsers without plugin!
The first web peer will serve as a seed, if no one else in the same channel.
#### Integrate to Your Hls.js Project
Simply replace the hls.js script tag like:
```javascript
```
with
```javascript
```
That's it!
#### Integrate to HTML5 Players
See [demos](https://github.com/cdnbye/hlsjs-p2p-engine#player-integration).
## Browser Support
WebRTC has already been incorporated into the HTML5 standard and it is broadly deployed in modern browsers. The compatibility of CDNBye depends on the browser support of WebRTC and Hls.js. Please note that iOS Safari "Mobile" does not support the MediaSource API.
Compatibility|Chrome | Firefox | Mac Safari| iOS Safari | Opera | IE | Edge|
:-: | :-: | :-: | :-: | :-: | :-: | :-:| :-:
WebRTC | Yes | Yes | Yes | Yes | Yes | No | No
Hls.js | Yes | Yes | Yes | No | Yes | Yes | Yes
CDNBye | Yes | Yes | Yes | No | Yes | No | No
## Include
Include the pre-built script of latest version bundled with hls.js(recommended):
```javascript
```
Or include the latest version without hls.js:
```javascript
```
## Usage
#### Bundle
Add p2pConfig as a property of hlsjsConfig, then Create hls.js instance passing hlsjsConfig as constructor param.
```javascript
var hlsjsConfig = {
debug: true,
// Other hlsjsConfig options provided by hls.js
p2pConfig: {
logLevel: 'debug',
// Other p2pConfig options if applicable
}
};
// Hls constructor is overriden by included bundle
var hls = new Hls(hlsjsConfig);
// Use `hls` just like the usual hls.js ...
```
#### Engine(the library without hls.js)
Create hls.js instance passsing hlsjsConfig as param. Create P2PEngine instance passing hls.js instance and p2pConfig as params. Call hls.js loadSource and attachMedia methods.
```javascript
var hlsjsConfig = {
maxBufferSize: 0, // Highly recommended setting
maxBufferLength: 30, // Highly recommended setting
liveSyncDurationCount: 10, // Highly recommended setting
};
var p2pConfig = {
logLevel: 'debug',
// Other p2pConfig options if applicable
};
var hls = new Hls(hlsjsConfig);
if (P2PEngine.isSupported()) {
new P2PEngine(hls, p2pConfig); // Key step
}
// Use `hls` just like your usual hls.js…
hls.loadSource(contentUrl);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
```
## Player Integration
- [videojs](http://videojs.com/)
- See [videojs-demo.html](demo/videojs-demo.html)
- [flowplayer](https://flowplayer.com/)
- See [flowplayer-demo.html](demo/flowplayer-demo.html)
- [jwplayer](https://www.jwplayer.com/)
- See [jwplayer-demo.html](demo/jwplayer-demo.html)
- [DPlayer](https://github.com/MoePlayer/DPlayer)
- See [dplayer-demo.html](demo/dplayer-demo.html) based on [P2P-DPlayer](https://github.com/cdnbye/P2P-DPlayer).
- [CKPlayer](http://www.ckplayer.com/)
- See [ckplayer-demo.html](demo/ckplayer-demo.html) based on [P2P-CKPlayer](https://github.com/cdnbye/P2P-CKPlayer)
- [clappr](https://github.com/clappr/clappr)
- See [clappr-demo.html](demo/clappr-demo.html)
- [MediaElement.js](http://www.mediaelementjs.com/)
- See [mediaelement-demo.html](demo/mediaelement-demo.html)
- [TCPlayer](https://cloud.tencent.com/document/product/267/7479)(Tencent Cloud Player)
- See [tcplayer-demo.html](demo/tcplayer-demo.html)
- [Chimee](http://chimee.org/)
- See [chimee-demo.html](demo/chimee-demo.html)
- `Add your customized player here`
- CDNBye can be integrated into any HTML5 video player that with hls.js built in.
## CDN
- [jsDelivr](https://www.jsdelivr.com/package/npm/cdnbye)
- [unpkg](https://unpkg.com/cdnbye@latest/)
## API and Configuration
See [API.md](docs/English/API.md)
## Signaling Server
To communicate with another peer you simply need to exchange contact information and the rest will be done by WebRTC. The process of connecting to the other peers is also known as signaling.
- Deploy your own Signaling Server (Recommended)
- [gosignaler](https://github.com/cdnbye/gosignaler) (written by Golang)
- [php-signaler](https://github.com/cdnbye/php-signaler) (written by PHP)
- Use free Signaling Server
- 'wss://signal.cdnbye.com/wss' (Default signaling server)
## How It Works
See [design.md](docs/English/design.md)
## FAQ
We have collected some [frequently asked questions](docs/English/FAQ.md). Before reporting an issue, please search if the FAQ has the answer to your problem.
## Contact Us
Email: service@cdnbye.com