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 DemoView 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).