Open philippk80 opened 6 years ago
It's rather about defining a protocol from scratch. Plan is to have it based on UDP to avoid late retransmissions and congestions. Main idea is not about stuff like broadcasting, but: we don't need packets that are older than our buffer size [s] (e.g. 1s). This packet can be dropped and doesn't need to be transferred/retransmitted to the client, because the client will drop it anyways. The server could send packets with an increasing sequence number, so that the client would notice a missing packet and send a resend-request for this packet to server. Something like a soft version of TCP: try to be reliable for recent packets, but don't care about too old packets. I don't know how complex or stable this will be (statemachine with timeouts, "retransmisson" counters, buffers, ... all the stuff that is for free when using TCP). I love snapcast, but on hot summer days, my router's wifi sometimes becomes very unstable, resulting in a very annoying listening experience. (router reset or changing the channel number usually helps. I don't know how a lighter protocol would behave that doesn't try to reliably transmit all packets)
Isn't it a option to use a already specified protocol? I think there are some. Often it's just the lack of a good, useable implementation. For example https://en.wikipedia.org/wiki/Ravenna_(networking) only to mention one. (without suggest this one)
So far I haven't seen any simple protocol. Ravenna is for professional setups with some really demanding requirements, as you can see in the practical guide to aes67. They are flooding the network with 1ms RTP packets to have low latency. Snapcast focuses on embedded hardware and synchronous playback over wifi, while accepting latencies of 500ms or 1s. It's playing rather in the league of Logitech media center (which I didn't manage to install on a "pogoplug" device some years ago, so I started to implement snapcast).
Hello,
is the achievement here to extract the transport protocol of snapcast?
Best regards,
Phil