Skip to content

Commit

Permalink
Modified the README
Browse files Browse the repository at this point in the history
  • Loading branch information
fastfeee authored and a-wing committed Oct 9, 2023
1 parent f20f615 commit 8f05292
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 55 deletions.
137 changes: 82 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,73 @@
# Live777
<h1 align="center">
<img src="./docs/logo.svg" alt="Live777" width="200">
<br>Live777<br>
</h1>

[![Rust](https://github.com/binbat/live777/actions/workflows/rust.yml/badge.svg)](https://github.com/binbat/live777/actions/workflows/rust.yml)
[![GitHub release](https://img.shields.io/github/tag/binbat/live777.svg?label=release)](https://github.com/binbat/live777/releases)

A very simple, high performance, support WHIP/WHEP edge WebRTC SFU (Selective Forwarding Unit)
Live777 is an SFU server for real-time video streaming for the `WHIP`/`WHEP` as first protocol.

Live777 media server is used with [Gstreamer](https://gstreamer.freedesktop.org/), [FFmpeg](https://ffmpeg.org/), [OBS Studio](https://obsproject.com/), [VLC](https://www.videolan.org/), [WebRTC](https://webrtc.org/) and other clients to provide the ability to receive and distribute streams, and is a typical publishing (pushing) and subscription (playing) server model.

Live777 supports the conversion of audio and video protocols widely used in the Internet, such as RTP to WHIP or WHEP and other protocols.

![live777-arch](./docs/live777-arch.excalidraw.svg#gh-light-mode-only)
![live777-arch](./docs/live777-arch.dark.svg#gh-dark-mode-only)

## Current
## Features

| protocol | video codecs | audio codecs |
| -------- | ------------ | ------------ |
| `WHIP` | `AV1`, `VP8`, `VP9`, `H264` | `Opus`, `G722` |
| `WHEP` | `AV1`, `VP8`, `VP9`, `H264` | `Opus`, `G722` |
Live777 has the following characteristics:

## Supports `WHIP`/`WHEP` applications
- 📚 **Support `WHIP`/`WHEP`**

![live777-apps](./docs/live777-apps.excalidraw.svg#gh-light-mode-only)
![live777-apps](./docs/live777-apps.dark.svg#gh-dark-mode-only)
The WHIP/WHEP protocol is implemented to improve interoperability with other WebRTC application modules without the need for custom adaptations.

### Live777 Server
- 🗃️ **SFU architecture**

```bash
docker run --name live777-server --rm --network host \
ghcr.io/binbat/live777-server:latest live777
```
Only responsible for forwarding, do not do confluence, transcoding and other resource overhead of the media processing work, the encoding and decoding work are respectively placed on the sender and the receiver.

### Browser Demo Page
- 🌐 **Multiple platform support**

```bash
# open your browser
open http://localhost:3000/
```
With rich multi-platform native support.

## Use OBS Studio WHIP
- 🔍 **Multiple audio and video encoding formats support**

- OBS Studio >= 30
Support a variety of video encoding and audio encoding formats, providing a wider range of compatibility to help enable adaptive streaming.

**OBS WHIP Current only support `H264` video codecs and `Opus` audio codecs**
## Current support encode
| protocol | video codecs | audio codecs |
| -------- | --------------------------- | -------------- |
| `WHIP` | `AV1`, `VP8`, `VP9`, `H264` | `Opus`, `G722` |
| `WHEP` | `AV1`, `VP8`, `VP9`, `H264` | `Opus`, `G722` |

![obs whip](./obs-whip.avif)
## Quickstart

### Run Live777 using docker:

```sh
docker run --name live777-server --rm --network host ghcr.io/binbat/live777-server:latest live777
```

## Use GStreamer `WHIP`/`WHEP`
### Gstreamer WHIP/WHEP client

This plugins from [gst-plugins-rs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/)
- Use docker of [Gstreamer](https://gstreamer.freedesktop.org/download/) to publish:

### Video: AV1
This `WHIP`/ `WHEP` plugins from [gst-plugins-rs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/)

**NOTE: AV1 has a lot of problem**
> *Note: supports multiple encoding formats*
- [ ] browser whip av1
- [ ] browser whep av1
- [x] gstreamer whip av1
- [ ] gstreamer whep av1
- [ ] gstreamer rtp av1 src
- [x] gstreamer rtp av1 sink
- [ ] ffmpeg rtp av1 src
- [ ] ffmpeg rtp av1 sink
#### Video: AV1

**Note: AV1 has a lot of problem**
- 🚧 browser whip av1
- 🚧 browser whep av1
- ✅ gstreamer whip av1
- 🚧 gstreamer whep av1
- ✅ gstreamer rtp av1 src
- ✅ gstreamer rtp av1 sink
- 🚧 ffmpeg rtp av1 src
- 🚧 ffmpeg rtp av1 sink

`WHIP`:

Expand All @@ -83,46 +93,46 @@ ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 udpsrc port=5004 caps="application/x-rtp, media=(string)video, encoding-name=(string)AV1" ! rtpjitterbuffer ! rtpav1depay ! av1parse ! av1dec ! videoconvert ! aasink
```

### Video: VP8
#### Video: VP8

`WHIP`:

```bash
docker run --name live777-client-whip --rm --network host \
ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 videotestsrc ! videoconvert ! vp8enc ! rtpvp8pay ! whipsink whip-endpoint="http://localhost:3000/whip/777"
gst-launch-1.0 videotestsrc ! videoconvert ! vp8enc ! rtpvp8pay ! whipsink whip-endpoint="http://localhost:3000/whip/777"
```

`WHEP`:

```bash
docker run --name live777-client-whep --rm --network host \
ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 whepsrc whep-endpoint="http://localhost:3000/whep/777" audio-caps="application/x-rtp,payload=111,encoding-name=OPUS,media=audio,clock-rate=48000" video-caps="application/x-rtp,payload=96,encoding-name=VP8,media=video,clock-rate=90000" ! rtpvp8depay ! vp8dec ! videoconvert ! aasink
```

### Video: VP9
#### Video: VP9

`WHIP`:

``` bash
docker run --name live777-client --rm --network host \
ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 videotestsrc ! videoconvert ! vp9enc ! rtpvp9pay ! whipsink whip-endpoint="http://localhost:3000/whip/777"
```

`WHEP`:

`WHEP`:
```bash
docker run --name live777-client-whep --rm --network host \
ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 whepsrc whep-endpoint="http://localhost:3000/whep/777" audio-caps="application/x-rtp,payload=111,encoding-name=OPUS,media=audio,clock-rate=48000" video-caps="application/x-rtp,payload=98,encoding-name=VP9,media=video,clock-rate=90000" ! rtpvp9depay ! vp9dec ! videoconvert ! aasink
```

### Video: H264
#### Video: H264

`WHIP`:

```bash
docker run --name live777-client --rm --network host \
ghcr.io/binbat/live777-client:latest \
Expand All @@ -142,10 +152,10 @@ Use `libav`
```bash
docker run --name live777-client-whep --rm --network host \
ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 whepsrc whep-endpoint="http://localhost:3000/whep/777" audio-caps="application/x-rtp,payload=111,encoding-name=OPUS,media=audio,clock-rate=48000" video-caps="application/x-rtp,payload=102,encoding-name=H264,media=video,clock-rate=90000" ! rtph264depay ! avdec_h264 ! videoconvert ! aasink
gst-launch-1.0 whepsrc whep-endpoint="http://localhost:3000/whep/777" audio-caps="application/x-rtp,payload=111,encoding-name=OPUS,media=audio,clock-rate=48000" video-caps="application/x-rtp,payload=102,encoding-name=H264 media=video,clock-rate=90000" ! rtph264depay ! avdec_h264 ! videoconvert ! aasink
```

### Audio: Opus
#### Audio: Opus

`WHIP`:

Expand All @@ -167,7 +177,7 @@ Maybe you can't play audio, we can audio to video display for ascii
gst-launch-1.0 whepsrc whep-endpoint="http://localhost:3000/whep/777" audio-caps="application/x-rtp,payload=111,encoding-name=OPUS,media=audio,clock-rate=48000" video-caps="application/x-rtp,payload=102,encoding-name=H264,media=video,clock-rate=90000" ! rtpopusdepay ! opusdec ! audioconvert ! wavescope ! videoconvert ! aasink
```

### Audio: G722
#### Audio: G722

**GStreamer G722 need `avenc_g722` in `gstreamer-libav`**

Expand All @@ -177,10 +187,26 @@ ghcr.io/binbat/live777-client:latest \
gst-launch-1.0 audiotestsrc ! audioconvert ! avenc_g722 ! rtpg722pay ! whipsink whip-endpoint="http://localhost:3000/whip/777
```
### OBS Studio WHIP client
> Note:
> 1. OBS Studio version [**30 or higher**](https://obsproject.com/forum/threads/obs-studio-30-beta.168984/)
> 2. OBS WHIP Current only support **H264** video codecs and **Opus** audio codecs
![obs whip](./obs-whip.avif)
#### Play stream
- open your browser, enter the URL: [`http://localhost:3000/`](http://localhost:3000/)
## Tools
We have tools for support rtp -> whip/whep convert
![live777-apps](./docs/live777-apps.excalidraw.svg#gh-light-mode-only)
![live777-apps](./docs/live777-apps.dark.svg#gh-dark-mode-only)
For Example:
```bash
Expand All @@ -191,7 +217,7 @@ ffmpeg -> whipinto -> live777 -> whepfrom -> ffplay
This tool is `rtp2whip`
Build:
Build
```bash
cargo build --package=whipinto --release
Expand All @@ -214,7 +240,9 @@ cargo run --package=whipinto -- -c vp8 -u http://localhost:3000/whip/777 --comma
"ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=30 -vcodec libvpx -cpu-used 5 -deadline 1 -g 10 -error-resilient 1 -auto-alt-ref 1 -f rtp 'rtp://127.0.0.1:{port}?pkt_size=1200'"
```
VLC RTP stream, **NOTE: VLC can't support all video codec**
VLC RTP stream
**Note: VLC can't support all video codec**
```bash
vlc -vvv <INPUT_FILE> --sout '#transcode{vcodec=h264}:rtp{dst=127.0.0.1,port=5003}'
Expand All @@ -224,7 +252,7 @@ vlc -vvv <INPUT_FILE> --sout '#transcode{vcodec=h264}:rtp{dst=127.0.0.1,port=500
This tool is `whep2rtp`
Build:
Build
```bash
cargo build --package=whepfrom --release
Expand Down Expand Up @@ -253,7 +281,7 @@ Use ffplay
ffplay -protocol_whitelist rtp,file,udp -i stream.sdp
```
So. You can use this:
So. You can use this
```bash
cargo run --package=whepfrom -- -c vp8 -u http://localhost:3000/whep/777 -t 127.0.0.1:5004 --command 'ffplay -protocol_whitelist rtp,file,udp -i stream.sdp'
Expand All @@ -264,7 +292,6 @@ Use VLC player
```bash
vlc stream.sdp
```
## Sponsors
<p align="center">
Expand Down
28 changes: 28 additions & 0 deletions docs/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8f05292

Please sign in to comment.