In this project we study interactive video calls between two users, where at least one of the users is connected over a cellular network. It is known that cellular links present highly-varying network bandwidth and packet delays. If the sending rate of the video call exceeds the available bandwidth (ABW), video frames may be excessively delayed, destroying the interactivity of the video call.
As a solution, we present Rebera, a cross-layer design of proactive congestion control, video encoding and rate adaptation, to maximize the video transmission rate while keeping the one-way video frame delays sufficiently low. Rebera actively measures the available bandwidth in real-time by employing the video frames as packet trains. Using an online linear adaptive filter, Rebera makes a history-based prediction of the future capacity, and determines a bit budget for the video rate adaptation. Rebera uses the hierarchical-P video encoding structure to provide packet loss resilience and to ease rate adaptation, while maintaining low encoding complexity and delay. According to the bit budget, Rebera decides in real time whether to send or discard an encoded frame, thereby preventing self-congestion and minimizing the packet delays. Our experiments with real cellular link traces demonstrate Rebera can deliver higher bandwidth utilization and shorter packet delays than Apple's FaceTime.
This research was done in collaboration with Tencent Inc. (WeChat International).
$ sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libsdl2-dev
We specifically left the x264 library out, because the source code needs to be modified so as to generate an AVC stream with hierarchical-P coding structure with 3 temporal layers. You can download the source code here. To find out how we modify the source code, you can follow this blog post. Then you can configure, make and install as usual.
In our emulations, we use Cellsim, an open-source variable-capacity link emulator. Our goal is to be able to measure the sending rate of the video call app under investigation at any arbitrary time interval and compare it with the available bandwidth emulated by Cellsim during the same interval. To do this, we start the sender and the emulators at the same time, since their clocks are not synchronized.