Video delivery services such as YouTube, Youku, Hulu, etc., now constitute a major fraction of today’s Internet traffic thanks to advancements in network technologies, device capabilities, and audio-video compression schemes. Cisco has projected in their annual Visual Networking Index (VNI) that by 2021, 80% of the global Internet traffic will be video.
Also, video services are now integrated into many different applications (e.g., employee training, video conferencing, online education systems). Therefore, it is important for computer science students to understand how modern video streaming systems work.
This course will teach the basic technologies and components of video streaming systems that use the DASH standard (Dynamic Adaptive Streaming over HTTP). Students will learn about video encoding, segmenting a long video into shorter segments, how to prepare the videos for streaming on a web server, how to build their own video player and how to experiment with different dynamic network adaptation schemes that will result in a smooth playback for the user.
Students will learn a number of different technologies such as the DASH playlist format (XML), working with Linux and the Apache web server software, understanding issues about video coding (H.264 and H.265), and how video players work on Android. We will then combine these various technologies into an overall, end-to-end video streaming system.
In this course, the students will get a hands-on experience with actually building their own DASH streaming system in a team project. The course will also teach the above mentioned technologies as a foundation for the project. At the end of the course, the students will have the knowledge to integrate video streaming into their own applications and projects.
In general, we assume students have already have good experience with basic data structures and programming experience with a programming language. This workshop requires good knowledge in Java and some knowledge in HTML/HTTP.
To take this workshop, a student must have:
(a) taken two or more programming and data-structure courses,
(b) programmed with Java, and
(c) have good software development skills