  We consider a group of mobile users, within proximity of each other, who are
interested in watching the same online video at roughly the same time. The
common practice today is that each user downloads the video independently on
her mobile device using her own cellular connection, which wastes access
bandwidth and may also lead to poor video quality. We propose a novel
cooperative system where each mobile device uses simultaneously two network
interfaces: (i) the cellular to connect to the video server and download parts
of the video and (ii) WiFi to connect locally to all other devices in the group
and exchange those parts. Devices cooperate to efficiently utilize all network
resources and are able to adapt to varying wireless network conditions. In the
local WiFi network, we exploit overhearing, and we further combine it with
network coding. The end result is savings in cellular bandwidth and improved
user experience (faster download) by a factor on the order up to the group
size.
  We follow a complete approach, from theory to practice. First, we formulate
the problem using a network utility maximization (NUM) framework, decompose the
problem, and provide a distributed solution. Then, based on the structure of
the NUM solution, we design a modular system called MicroCast and we implement
it as an Android application. We provide both simulation results of the NUM
solution and experimental evaluation of MicroCast on a testbed consisting of
Android phones. We demonstrate that the proposed approach brings significant
performance benefits without battery penalty.
