RUST_LOG=info moqpush-app --namespace my-stream --tracks 2v1a --target-latency 500 --port 9078 # Point your encoder's HTTP DASH-IF output at port 9078
moqpush-app --test --port 9078 # Point your encoder at port 9078 - fragment info printed to console
Save as an HTML file and open in Chrome - no server needed:
<script src="https://shaka-project.github.io/shaka-player/dist/shaka-player.experimental.debug.js"></script> <video id="v" controls autoplay muted></video> <script> shaka.polyfill.installAll(); const player = new shaka.Player(); player.attach(document.getElementById('v')); player.configure({ streaming: { lowLatencyMode: true }, manifest: { msf: { namespaces: ['my-stream'] } } }); player.load('https://draft-14.cloudflare.mediaoverquic.com/', undefined, 'application/msf'); </script>
Replace my-stream with your namespace. Works from file://
git clone https://github.com/erikherz/moqpush-open.git cd moqpush-open cargo build --release # Binary at target/release/moqpush-app
Works with Cloudflare's public relay, moq-dev/moq, or any MoQ Transport relay.
MoQ over QUIC/WebTransport. No HLS/DASH buffering delays.
HTTP DASH-IF from any encoder: Ateme, FFmpeg, GPAC, OBS.
Publish multiple video tracks for ABR. Use --tracks 3v1a for 3 qualities.
Play in any browser with Shaka Player's MoQ/MSF support. No plugins.
Apache 2.0. Built on moq-dev/moq by Luke Curley.
For managed CDN, global relay network, ABR, ad insertion, and enterprise support, contact erik@vivoh.com