Streaming

alpharithms fallback 1

Streaming is the continuous transfer of media files from one networked machine to another in a way that allows real-time access to received data. Streaming allows file storage to be remote, and access to be provided on-demand.

Streaming differs from downloading in that the entirety of the data is not needed before a client can utilize it. This approach is not appropriate (or possible!) for many types of files, like executables for example. For audio and video, however—data intended to be consumed incrementally—streaming can be a highly efficient means of transfer.

In contrast to many web applications that rely on TCP/IP protocols for data transfer, Streaming services like Netflix, Hulu, and DisneyPlus rely on UDP/IP protocols. TCP provides reliable data service to prevent packet loss. When segments of data don’t arrive in a timely fashion TCP re-transmits those segments to the receiver. This reliability comes with a sacrifice in speed.

Reliable data transfer is an essential service for many types of network communications. For example, file transfer and authentication services need to ensure that the entirety of data is received and can be reconstituted on the receiving end. One lost bit and a program might not execute or a login request might fail.

UDP on the other hand—a connectionless protocol—doesn’t provide data reliability service but also simplifies connection negotiations. Where TCP requires an initial 3-way handshake (2RTT) to start, send/receive buffers on either end and multiple variables—UDP just sends stuff.

Consider this: how much will a few lost pixels affect the quality of experience while watching a movie on Netflix? Would you still enjoy a moving you rented on Amazon Prime if an entire second were to disappear? In most cases, these types of acceptable data losses are deemed worth-while tradeoffs for the lower resource overhead and (sometimes) faster network performance offered by UDP.

Zαck West
Full-Stack Software Engineer with 10+ years of experience. Expertise in developing distributed systems, implementing object-oriented models with a focus on semantic clarity, driving development with TDD, enhancing interfaces through thoughtful visual design, and developing deep learning agents.