dashc, client emulator for DASH video streaming
April 30, 2018 ยท View on GitHub
Description
dashc is an emulator of the video player, it is intended to be used as a test tool. The original goal was to have a lightweight test tool for network performance experiments with a real DASH video streaming traffic.
dashc has several options which can be changed through the command line arguments:
- video adaptation algorithm (Conventional, BBA-0/BBA-1/BBA-2, ARBITER);
- initial buffer size (in segments);
- last segment index for play;
- log file and folder name (the log file can be on/off);
- maximum buffer size (in seconds);
- persistent connection (on/off);
- generation of the meta information for BBA-2 and ARBITER (file with segment sizes);
Installation
dashc was tested in Ubuntu 16.04/16.10/17.04/17.10/18.04 with x64 architecture and in Ubuntu 16.04.3 with ARM architecture (Raspberry Pi 2/3).
To install (./configure will ask for a sudo password to install opam package manager):
./configure
make
To run tests (not necessary):
make test
Usage
dashc can be run as simple as:
./dashc.exe play http://10.0.0.1/bbb.mpd
or:
./dashc.exe play http://10.0.0.1/bbb.mpd [-adapt conv] [-initb 2] [-maxbuf 60] [-persist true] [-turnlogon true] [-logname now] [-subfolder qwe]
Where all flags except the link to the MPD file are optional. Possible flags are:
- [-adapt], adaptation algorithm (conv; bba-0; bba-1; bba-2; arbiter);
- [-initb], initial buffer (in segments);
- [-lastsegmindex], last segment index for play;
- [-logname], name of the log file ("now" means usage of the current time stamp and it is used by default);
- [-maxbuf], maximum buffer size (in seconds);
- [-persist], persistent connection (true/false);
- [-segmentlist], this parameter is used to tell where to get meta data infromation (segment sizes, for example, for BBA-2 and ARBITER). Possible options are head (dashc will send head requests before starting to stream), local (file with segment size should be at the same folder with dashc), remote (file with segment size should be at the same location where target MPD file is stored) get segment sizes from local - local segmentlist_%mpd_name%.txt file. The default option is head;
- [-subfolder], subfolder for the file;
- [-turnlogon], turn on logging to file;
- [-gensegmfile], generate segmentlist_%mpd_name%.txt file only (it will be rewritten if exists);
- [-help], print this help text and exit, (alias: -?);
The detailed help can be found by running it with the -help flag:
./dashc.exe play -help
The typical log file will look like the example below (here the data only for the first 30 segments is shown, ARBITER adaptation algorithm is used, bbb-264 4 seconds segment size clip is used):
Seg_# Arr_time Del_Time Stall_Dur Rep_Level Del_Rate Act_Rate Byte_Size Buff_Level
1 810 810 0 232 1225 248 124131 4.000
2 1554 744 0 232 1487 276 138452 8.000
3 2283 728 0 232 1496 272 136272 11.272
4 3696 1413 0 374 1591 562 281170 13.858
5 4273 576 0 752 1884 271 135890 17.282
6 5571 1298 0 752 1963 637 318725 19.983
7 10756 5184 0 1060 1322 1713 856959 18.799
8 15020 4263 0 752 823 877 438974 18.535
9 16572 1551 0 560 1350 523 261860 20.983
10 17832 1260 0 560 1212 381 190970 23.723
11 19904 2072 0 752 1117 578 289478 25.651
12 22951 3046 0 752 1032 786 393344 26.605
13 26412 3461 0 752 1019 882 441029 27.143
14 28438 2026 0 752 1536 778 389046 29.117
15 29046 607 0 752 1732 263 131513 32.510
16 29996 949 0 752 2105 499 249943 35.560
17 32062 2066 0 1060 2034 1050 525440 37.494
18 34956 2893 0 1060 1111 803 401864 38.601
19 39174 4218 0 1060 1232 1299 649641 38.382
20 44807 5631 0 1060 1560 2196 1098391 36.750
21 46942 2134 0 1060 1357 723 361990 38.616
22 48440 1498 0 1060 1071 401 200595 41.118
23 51428 2987 0 1060 1055 788 394241 42.130
24 53142 1713 0 1060 1036 443 221995 44.416
25 55589 2446 0 1060 1185 724 362490 45.970
26 57293 1704 0 752 1590 677 338960 48.265
27 59909 2615 0 752 1200 784 392369 49.649
28 63206 3297 0 1060 1254 1034 517165 50.352
29 66206 2999 0 1060 1740 1305 652588 51.353
30 70260 4053 0 1060 1822 1847 923626 51.299
The columns include next information:
- segment number starting from 1;
- arrival time of a segment in milliseconds;
- time spent for delivery of this segment in milliseconds;
- stall (freeze) duration in milliseconds;
- representation rate of downloaded segment in Kbit/s (taken from MPD file);
- delivery rate of the network in Kbit/s (segment size divided by time for delivery);
- the actual bitrate of this segment (segment size divided by the segment duration) in Kbit/s;
- segment size in bytes;
- buffer level after this segment was just downloaded, in seconds;
Dataset
The tool was tested with this dataset https://www.ucc.ie/en/misl/research/datasets/ivid_dataset/. The example of the log file above was taken with the Big Buck Bunny movie 4 second segment size x264 video codec.
Support
If you have an issue, please create a new one in github with necessary information (type of MPD file, OS version and etc.).
FAQ
Q: X package (dependency) cannot be installed.
A: Update of the packages database might help.
opam update # Update the packages database
opam upgrade # Bring everything to the latest version possible
Q: After the first ./configure, the make prints something like:
make: jbuilder: Command not found
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 127
A: Log out of the OS and log in back might help.
Q: Why there was a need in a new implementation instead of updating already existing similar solutions?
A: It was clear that the new implementation won't take much time.
Q: Why OCaml was used (not a C/C++/Java/C#/Python)?
A: OCaml allowed to make a working tool in several days due to hands-on expirience with it.
Q: What is OCaml?
A: A good set of resources can be found here https://ocaml.org/learn/.
Citation
Aleksandr Reviakin, Ahmed H. Zahran, Cormac J. Sreenan. dashc : a highly scalable client emulator for DASH video. MMSys 2018 Open Dataset & Software Track.
Licence
This software has emanated from research conducted with the financial support of Science Foundation Ireland (SFI) under Grant Number 13/IA/1892.
University College Cork
GPL-2 License