Giter Club home page Giter Club logo

moq-js's People

Contributors

englishm avatar erikwaberg avatar goldyydev avatar ittscomplicated avatar kixelated avatar markcanfly avatar matteocontrini avatar rfwatson avatar wanjohiryan avatar zafergurel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

moq-js's Issues

Contribution support

The current code is a player only. We need to support contribution, where we use WebCodecs to encode media and send it over the network. I started but didn't get very far.

Public Broadcast Listing

I removed this functionality as part of migrating away from ANNOUNCE. Time to add it back and do it properly this time!

  1. Add a "public" checkbox to /publish that allows the user to enter the title of the broadcast.
    • The title is not the same as the random broadcast ID.
    • The broadcast ID is random and used by relays (moq-api) for routing.
    • The broadcast title is human-readable, only used when the publisher wants to make a public broadcast.
  2. Add an endpoint that creates a new broadcast given the form information. It should:
    • Verify the information: title, codec info, etc.
    • Generate random broadcast ID.
    • (future) Generate an auth token tied to the broadcast ID.
    • CHOICE: Choose the database. We're running in GCP so there's quite a few options, but local development should still work.
    • Insert everything into the database.
    • Return a URL used to connect to moq-relay: ie. https://relay.quic.video/<broadcast ID>
    • CHOICE: This endpoint could be part of moq-api or moq-js; your choice.
  3. Add an endpoint that lists all PUBLIC broadcasts.
    • Periodically verify each broadcast is still live via moq-api.
    • CHOICE: This endpoint could be rendered on the client or server side (moq-js only).
    • Return a paginated list of public broadcasts and some basic information about them.
  4. Render the list of all public broadcasts on /watch.
    • Make it pretty.

Catalog.isVideoTrack expects frame_rate

In moq-pub, it's possible that the bitrate is not passed in the track data:
https://github.com/kixelated/moq-rs/blob/75e7dc03bfc0e64fe243742478bd755b399045a2/moq-pub/src/media.rs#L188

I'm using dev/pub to test the player and changing it to try out something. I needed to use Catalog.isVideoTrack but it expects a video track to have frame_rate:

if (typeof track.frame_rate !== "number") return false

I think we need to remove this check.

Visualize holes in the timeline

The current visualizer only shows the min-max range since I was lazy. It should be able to render holes but we need to return them within the player API.

Pause support

It's currently not possible to pause playback. There should be a pause button somewhere, or it occurs when you click on the window.

Increase codec support

We currently only support h.264 and AAC because I'm too lazy to test anything else. It should be easy enough to configure WebCodecs with the correct MP4 atoms.

Fix audio

I disabled audio because I was getting tired of working on the player. It needs to be synchronized with video, which is actually kind of annoying thanks to WebAudio.

Volume support

It's currently not possible to change the volume. This is not a big deal while audio is broken... but will be when #3 is fixed.

Pause on underflow

The current player keeps going if there's a media underflow. This is kind of hilarious because the player keeps going even when the stream is stopped, but it should pause and possibly increase the buffer size instead.

WebCodecs - Multiple Tracks

You can’t add/remove tracks once the broadcast has started, such as to change input device or screen share.

WebCodecs - Synchronization

Audio and video are rendered out of sync. This isn't a big deal with zero latency, but matters more at higher end targets.

Track selection

We should visualize the available tracks and which ones are active.

Remove /fingerprint endpoint

Currently, WebTransport in Chrome does not accept self-signed certificates, even if they're from a local root. The work-around is to use the serverCertificateHash field when establishing the connection to explicitly list which certs are accepted. The certificate MUST use ECDSA and be valid for <14 days.

This is really annoying. The current approach is to host a /fingerprint endpoint on the server. The client issues a HTTPS request (yes, using the same cert) to get the cert before then connecting via WebTransport. It doubles the TLS handshakes and round trips. It also means the certificate has to be regenerated every week or two.

Improved timeline visualization

I was thinking we should render frames in the buffer, instead of showing solid bars only. It would be really cool to see some video frames in the timeline. I was thinking we could render the most recently received frame(s) with a box around it to really drive home that media can arrive out of order.

Wrong catalog object initialization

Just parsing the catalog data is wrong here.

const catalog = JSON.parse(str)

If I add a new method to the Catalog class and call this method on a newly created Catalog instance, the runtime gives an error (method not found).

Instead changing the code as follows is better IMHO:

const catalog = new Catalog()
catalog.tracks = JSON.parse(str).tracks

RSS feed

Heya,

Your blog is great, I love it. Can you add an Atom or RSS feed please?

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.