Code Monkey home page Code Monkey logo

public-moq-demo's Introduction

WARP as a MOQ Protocol

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.

MOQ Testbed

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.

TA QUIC TEAM Changes to this testbed in purpose of a thesis.

  • Datagram Implementation
  • Hybrid Implementation
  • Switching Implementation

How To Start in local

Prequisites and some tips localhost {#prequisites}

  • 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.

Change launch option in chrome canary

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.

localhost demo

  1. Clone the repository
  2. 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.
  3. Make sure to install mkcert to run the generate script in /cert
  4. Prepare two terminals
  5. Set each terminal to both be in the server and player directory.
  6. in the server terminal run go install and then go run main.go. Make sure to use the certs that you have generated
  7. in the player terminal run yarn install and then yarn localtest
  8. Now open chrome canary then head to https://localhost:1234/?url=https://localhost:4443
  9. Demo can now be played.

How To Start Deploying Server

We used a linux server from GCP.

Prequisites

  1. in your linux server clone the repo and also make sure to have all the prequisites to run it.
  2. prepare a certificate, in this case we used Let's Encrypt certificates. Make sure to prepare that first
  3. Build the Go project using go build
  4. 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 that ExecStart must point to the built project while WorkingDirectory 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
  1. 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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.