About

Video streaming traffic today takes up 60-75% of all bytes sent on the internet. Sammy is a joint project between Netflix and Stanford researchers to make video traffic friendlier to neighboring applications sharing the same networks.

Video traffic today is bursty. Every few seconds, video traffic switches between a period of sending data as fast as possible and a period of silence. This burstiness has consequences on internet congestion—causing queueing delay and packet loss as congestion control algorithms try to send as fast as possible into the network without causing packet loss.

Sammy aims to smooth out video traffic and reduce video throughput below the capacity of typical home networks. By reducing video throughput, Sammy can avoid congestion completely—eliminating queueing delay and packet loss, and making more bandwidth available for neighboring traffic. In experiments run at Netflix, Sammy reduces chunk throughput (how fast Netflix sends data, when it is sending data) by more than 60%, without reducing video quality of experience.

For more information, see the research paper published at SIGCOMM 2023: Research Paper

Dash.js Demo

View on Github

The following is a demo of Sammy running with an unmodified version of dash.js. Sammy works by using information about the video to pick a pace rate, or upper limit on how fast the server will send.

For the first few requests, the video buffer is empty and Sammy picks a high pace rate and downloads video quickly in order to build up a buffer. As the buffer fills up, Sammy picks lower and lower pace rates, down to close to the highest bitrate of the video. Note how the throughput the video client measures from the network decreases to match the pace rate as more and more chunks are downloaded.

Setup: We use Fastly as a CDN, which has built-in support for pacing. We pick a pace rate 3x higher than the maximum of all encoding bitrates when the buffer is empty, and 1.5x higher when the buffer is full. We make no distinction between playing and not playing states, so you can see pacing take effect without watching the video.

Note on QoE for dash.js: One of Sammy's main contributions is that it reduces chunk throughputs by 60%, while maintaining the QoE as Netflix's existing production algorithm. In this demo, we are only showing how the ABR algorithm can pick pace rates, and that the end-to-end pacing functionality works. We make no claims about QoE parity to dash.js today—achieving QoE parity is left as an exercise to the reader (but interested readers should reach out to the first author, who would be happy to give advice).

Pacing controls

Enable Sammy?

If Sammy is disabled, the congestion control algorithm will decide what throughput to send at. Throughput will likely be much higher than with Sammy.

Pace rate for empty buffer

Sammy will pace at this value times the max bitrate when the buffer is empty.

For example, if this is set to 2.8, Sammy will pace at 2.8x the max bitrate when the buffer is empty

Pace rate for full buffer

Sammy will pace at this value times the max bitrate when the buffer is full.

If this is set lower than about 1.4x, the lower throughput will cause dash.js to pick lower bitrates.

Congestion Control

The server will use this congestion control algorithm to send data.

BBR does pacing, but it paces at a much higher rate than Sammy. You should see no large decrease in throughput with BBR.

Performance graphs

Note: if throughput is very high, you may need to disable the cache. In Chrome, you can do this at the top of the inspector's network tab