Warp is a live media transport protocol over QUIC. Media is split into objects based on the underlying media encoding and transmitted independently over QUIC streams. QUIC streams are prioritized based on the delivery order, allowing less important objects to be starved or dropped during congestion.
See the Warp draft.
This demo has been forked off the original WARP demo application code.
You can find a working demo here.
There are numerous additions as follows:
- Server-to-client informational messages: Added Common Media Server Data (CMSD, CTA-5006) keys: Availability Time (at) and Estimated Throughput (ETP).
- Client-to-server control messages
- Passive bandwidth measurements: Sliding Window Moving Average with Threshold (SWMAth) and I-Frame Average (IFA).
- Active bandwidth measurements
- Enhanced user interface
More information and test results have been published in the following paper:
Z. Gurel, T. E. Civelek, A. Bodur, S. Bilgin, D. Yeniceri, and A. C. Begen. Media over QUIC: Initial testing, findings and results. In ACM MMSys, 2023.
- Datagram Implementation
- Hybrid Implementation
- Switching Implementation
- yarn
- ffmpeg
- Go version 1.21
- mkcert
- A video source
- Google Chrome Canary
- This does not work if you use WSL for the server.
- For bash scripts you can use git bash.
add this argument inside of the Target text box inside of the application properties
--allow-insecure-localhost --origin-to-force-quic-on=localhost:4443
why this needs to be done can be seen inside the Chrome section of the README_warp.md
file inside this repository.
- Clone the repository
- use the video source and then place it inside of /media then run the
generate.sh
bash script, make sure ffmpeg is installed in your computer. - Make sure to install
mkcert
to run the generate script in /cert - Prepare two terminals
- Set each terminal to both be in the server and player directory.
- in the server terminal run
go install
and thengo run main.go
. Make sure to use the certs that you have generated - in the player terminal run
yarn install
and thenyarn localtest
- Now open chrome canary then head to
https://localhost:1234/?url=https://localhost:4443
- Demo can now be played.
We used a linux server from GCP.
- in your linux server clone the repo and also make sure to have all the prequisites to run it.
- prepare a certificate, in this case we used Let's Encrypt certificates. Make sure to prepare that first
- Build the Go project using
go build
- use a service manager, in this case we used systemd and then create a service file
sudo nano /etc/systemd/system/<program name>.service
with its content like so, change as you please. Keep note thatExecStart
must point to the built project whileWorkingDirectory
must point the server directory of the repo.
Description=<program description>
[Service]
ExecStart=</path/to/deploy/myprogram>
WorkingDirectory=</path/to/server>
[Install]
WantedBy=multi-user.target
- Enable and start your service
sudo systemctl enable myprogram.service
sudo systemctl start myprogram.service
congrats you have deployed the server.
For the player you can deploy it using caddy or nginx.