The idea is to build a multi-threaded server that streams sequences of video frames, via sockets,  to client threads. You should start by implementing a server that deals with text-based requests from clients and then add the support for video later. An advanced part of the project involves the implementation of a monitor abstraction that supports an arbitrary list of functions, initialization code, shared data structures and a series of queues for condition variables and entry into the monitor.