Coder Social home page Coder Social logo

martinrunge / muroa Goto Github PK

View Code? Open in Web Editor NEW
9.0 9.0 1.0 5.97 MB

A multi room audio player

Home Page: muroa.org

C++ 54.62% Python 0.47% Shell 6.75% C 7.74% JavaScript 2.22% CSS 0.72% Perl 0.08% CMake 3.89% HTML 23.36% QMake 0.04% Makefile 0.10% GDB 0.01%

muroa's People

Contributors

marcelth avatar martinrunge avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

marcelth

muroa's Issues

Muroa is sensible to time differences between streaming client and server

Muroa uses system time to keep client and server in sync. If system time is not in sync, the following issues arise:

  • two clients with system time out of sync will not play audio syncronously
  • if system time of client is before server, starting and resetting a stream is not smooth at all, as the server sets a presentation time stamp and the client with early system time interprets that PTS in its own time context. Result is: clients starts to playback too early with playback buffer too empty and gets from one buffer under run to the next.

Handle disappearing clients better

When a client shuts down the TCP connection, the server can detect that and everything is fine. More complicated cases enclose:

  • the client crashes
  • the client is suspended (to RAM/to disk)
  • network cable pulled / network went down

in these cases, the server keeps the TCP connection up and waits for the client coming backand all data sent in between is queued and passed to the client in one rush when client is reached again. This "old" data may not confuse the client as it is only interested in the latest state or in a summary (aka diff) of all changes made since it had a connection last time.

TODO:
Server:

  • detect quickly, if a client cannot be reached any more and close that connection. leave "how quickly" as a tuning parameter.

Client:

  • detect suspend and resume.
  • on resume, first test if the old connection is still usable
  • If not, cleanly open a new connection to the server after wakeup and ask for the latest changes as diff
  • If server's messages are inconsistant to the client, ask for the diff between last "known good" state and current state to get up to date again.

Fix playlist item IDs

when loading and storing playlists to and from disk, make sure that the new ID mechanism is staying intact. At least the static member m_next_free_id has to be restored. Maybe it is also neccessary to save the state of the next_free_id variable instead of having it static.

Client must join a session

Enable the client GUI not before the client joined a session. Enabling the GUI as soon as the TCP connection is up is too early.
Selecting and joining a session is mandatory for a new TCP connection.

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.