Hi folks -- study PI here. Happy to answer any questions.<p>We're working on a paper for submission to a research conference soon, so every viewer gives us helpful data for the system to learn in-situ and improve its performance over different kinds of Internet connections and congestion situations. (We are randomizing connections to get either our in-development algorithm or a bunch of competing ABR and congestion-control schemes so we can properly evaluate, so if you get a stall or bad quality...... we'll blame that.)<p>All the source code is at <a href="https://github.com/StanfordSNR/puffer" rel="nofollow">https://github.com/StanfordSNR/puffer</a> and is or will be released with an open-source license. The study is led by my doctoral student Francis Yan, along with Sadjad Fouladi, Hudson Ayers, Chenzhi Zhu, and my colleague Philip Levis. The goal is to train video-streaming algorithms (bitrate selection and congestion control) online, continually, in situ, to minimize stalls and deliver the best picture quality across a diverse range of real-world Internet connections and users. This is from some of the same people who brought you Salsify (functional video compression for lower-latency real-time video: <a href="https://snr.stanford.edu/salsify" rel="nofollow">https://snr.stanford.edu/salsify</a>), Lepton (distributed/parallel JPEG compression: <a href="https://github.com/dropbox/lepton" rel="nofollow">https://github.com/dropbox/lepton</a>), Mosh (functional terminal emulation for mobility: <a href="https://mosh.org" rel="nofollow">https://mosh.org</a>), Remy (machine learning for congestion control; <a href="http://mit.edu/remy" rel="nofollow">http://mit.edu/remy</a>), and the Pantheon of Congestion Control (<a href="https://pantheon.stanford.edu" rel="nofollow">https://pantheon.stanford.edu</a>).<p>There are some unusual details of the Puffer system to make experimentation easier (and, we hope, performance better): the ABR algorithm is server-side, and video is streamed continuously over a WebSocket and the client gives asynchronous feedback, instead of using DASH HTTP request/replies. The tcp_info struct (including the delivery rate estimate) from the congestion-control layer is plumbed through to the ABR, and to the neural network that tries to predict "how long will it take to send a video chunk of length y," so it's weakly cross-layer. The "transmission-time predictor" is probabilistic instead of simply producing a point estimate. We encode with libx264 and then measure the SSIM of every encoded chunk to calculate a reward for each possible stream (instead of making the assumption that more bitrate is better -- the correlation is not so good when you consider different times in the same video). And we encode 10 variants of each channel, so more than typical. And everything is done at 60 fps. Of course some of these details mean these algorithms are not going to be deployed any time soon on a production CDN or streaming service, but the hope is to demonstrate the value of some of the ideas in an academic setting for future commercial deployment. The use of WebSockets, MSE, and Opus is why this doesn't work on Safari or on iOS.<p>FAQ here: <a href="https://puffer.stanford.edu/faq/" rel="nofollow">https://puffer.stanford.edu/faq/</a><p>Also I'm happy we were able to make some of the Grafana monitoring public: <a href="https://puffer.stanford.edu/monitoring" rel="nofollow">https://puffer.stanford.edu/monitoring</a>