Skip to content

Commit bde572c

Browse files
Add ABR characterization CLI for HLS player behavior analysis
Co-authored-by: jonathaneoliver <11263508+jonathaneoliver@users.noreply.github.com>
1 parent 4a65281 commit bde572c

2 files changed

Lines changed: 341 additions & 0 deletions

File tree

cmd/abrchar/demo-output/report.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# ABR Characterization Report
2+
3+
## Experiment Summary
4+
5+
- **Start:** 2024-01-01 12:00:00
6+
- **End:** 2024-01-01 12:02:07
7+
- **Duration:** 127 seconds
8+
- **Total Switches:** 5
9+
10+
## Bitrate Ladder
11+
12+
| Index | Bandwidth | Avg Bandwidth | Resolution |
13+
|-------|-----------|---------------|------------|
14+
| 0 | 1.28 Mbps | 1.00 Mbps | 640x360 |
15+
| 1 | 2.56 Mbps | 2.00 Mbps | 960x540 |
16+
| 2 | 3.84 Mbps | 3.00 Mbps | 1280x720 |
17+
| 3 | 6.40 Mbps | 5.00 Mbps | 1920x1080 |
18+
19+
## Boundary Metrics
20+
21+
### Boundary: Variant 2 ↔ Variant 3
22+
23+
**Bitrates:** 3.00 Mbps ↔ 5.00 Mbps
24+
25+
#### Downswitch (High → Low)
26+
27+
**Count:** 1
28+
29+
**Throughput Thresholds:**
30+
31+
- Mean: 18.50 Mbps
32+
- Median: 18.50 Mbps
33+
- StdDev: 0.00 Mbps
34+
- Range: 18.50 - 18.50 Mbps
35+
36+
**Safety Factors (α = variant_bw / throughput):**
37+
38+
- Mean: 0.27
39+
- Median: 0.27
40+
- StdDev: 0.00
41+
- Range: 0.27 - 0.27
42+
43+
---
44+
45+
### Boundary: Variant 1 ↔ Variant 2
46+
47+
**Bitrates:** 2.00 Mbps ↔ 3.00 Mbps
48+
49+
#### Downswitch (High → Low)
50+
51+
**Count:** 1
52+
53+
**Throughput Thresholds:**
54+
55+
- Mean: 9.60 Mbps
56+
- Median: 9.60 Mbps
57+
- StdDev: 0.00 Mbps
58+
- Range: 9.60 - 9.60 Mbps
59+
60+
**Safety Factors (α = variant_bw / throughput):**
61+
62+
- Mean: 0.31
63+
- Median: 0.31
64+
- StdDev: 0.00
65+
- Range: 0.31 - 0.31
66+
67+
#### Upswitch (Low → High)
68+
69+
**Count:** 1
70+
71+
**Throughput Thresholds:**
72+
73+
- Mean: 8.90 Mbps
74+
- Median: 8.90 Mbps
75+
- StdDev: 0.00 Mbps
76+
- Range: 8.90 - 8.90 Mbps
77+
78+
**Safety Factors (α = variant_bw / throughput):**
79+
80+
- Mean: 0.34
81+
- Median: 0.34
82+
- StdDev: 0.00
83+
- Range: 0.34 - 0.34
84+
85+
#### Hysteresis
86+
87+
- Downswitch median: 9.60 Mbps
88+
- Upswitch median: 8.90 Mbps
89+
- **Hysteresis:** -0.70 Mbps
90+
91+
---
92+
93+
### Boundary: Variant 0 ↔ Variant 1
94+
95+
**Bitrates:** 1.00 Mbps ↔ 2.00 Mbps
96+
97+
#### Downswitch (High → Low)
98+
99+
**Count:** 1
100+
101+
**Throughput Thresholds:**
102+
103+
- Mean: 8.90 Mbps
104+
- Median: 8.90 Mbps
105+
- StdDev: 0.00 Mbps
106+
- Range: 8.90 - 8.90 Mbps
107+
108+
**Safety Factors (α = variant_bw / throughput):**
109+
110+
- Mean: 0.22
111+
- Median: 0.22
112+
- StdDev: 0.00
113+
- Range: 0.22 - 0.22
114+
115+
#### Upswitch (Low → High)
116+
117+
**Count:** 1
118+
119+
**Throughput Thresholds:**
120+
121+
- Mean: 8.90 Mbps
122+
- Median: 8.90 Mbps
123+
- StdDev: 0.00 Mbps
124+
- Range: 8.90 - 8.90 Mbps
125+
126+
**Safety Factors (α = variant_bw / throughput):**
127+
128+
- Mean: 0.22
129+
- Median: 0.22
130+
- StdDev: 0.00
131+
- Range: 0.22 - 0.22
132+
133+
#### Hysteresis
134+
135+
- Downswitch median: 8.90 Mbps
136+
- Upswitch median: 8.90 Mbps
137+
- **Hysteresis:** 0.00 Mbps
138+
139+
---
140+
141+
## Key Conclusions
142+
143+
### Safety Factor Summary
144+
145+
| Boundary | Direction | Median α | Mean α | StdDev α |
146+
|----------|-----------|----------|--------|----------|
147+
| 2→3 | Down | 0.27 | 0.27 | 0.00 |
148+
| 1→2 | Down | 0.31 | 0.31 | 0.00 |
149+
| 1→2 | Up | 0.34 | 0.34 | 0.00 |
150+
| 0→1 | Down | 0.22 | 0.22 | 0.00 |
151+
| 0→1 | Up | 0.22 | 0.22 | 0.00 |
152+
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
{
2+
"experiment_start": "2024-01-01T12:00:00Z",
3+
"experiment_end": "2024-01-01T12:02:07Z",
4+
"total_switches": 5,
5+
"variants": [
6+
{
7+
"index": 0,
8+
"bandwidth_mbps": 1.28,
9+
"average_bandwidth_mbps": 1,
10+
"resolution": "640x360"
11+
},
12+
{
13+
"index": 1,
14+
"bandwidth_mbps": 2.56,
15+
"average_bandwidth_mbps": 2,
16+
"resolution": "960x540"
17+
},
18+
{
19+
"index": 2,
20+
"bandwidth_mbps": 3.84,
21+
"average_bandwidth_mbps": 3,
22+
"resolution": "1280x720"
23+
},
24+
{
25+
"index": 3,
26+
"bandwidth_mbps": 6.4,
27+
"average_bandwidth_mbps": 5,
28+
"resolution": "1920x1080"
29+
}
30+
],
31+
"boundaries": [
32+
{
33+
"lower_variant_idx": 2,
34+
"upper_variant_idx": 3,
35+
"lower_bandwidth_mbps": 3,
36+
"upper_bandwidth_mbps": 5,
37+
"downswitch": {
38+
"count": 1,
39+
"thresholds": {
40+
"Count": 1,
41+
"Mean": 18.5,
42+
"Median": 18.5,
43+
"StdDev": 0,
44+
"Min": 18.5,
45+
"Max": 18.5,
46+
"P25": 18.5,
47+
"P75": 18.5
48+
},
49+
"safety_factors": {
50+
"Count": 1,
51+
"Mean": 0.2702702702702703,
52+
"Median": 0.2702702702702703,
53+
"StdDev": 0,
54+
"Min": 0.2702702702702703,
55+
"Max": 0.2702702702702703,
56+
"P25": 0.2702702702702703,
57+
"P75": 0.2702702702702703
58+
}
59+
},
60+
"upswitch": {
61+
"count": 0,
62+
"thresholds": {
63+
"Count": 0,
64+
"Mean": 0,
65+
"Median": 0,
66+
"StdDev": 0,
67+
"Min": 0,
68+
"Max": 0,
69+
"P25": 0,
70+
"P75": 0
71+
},
72+
"safety_factors": {
73+
"Count": 0,
74+
"Mean": 0,
75+
"Median": 0,
76+
"StdDev": 0,
77+
"Min": 0,
78+
"Max": 0,
79+
"P25": 0,
80+
"P75": 0
81+
}
82+
}
83+
},
84+
{
85+
"lower_variant_idx": 1,
86+
"upper_variant_idx": 2,
87+
"lower_bandwidth_mbps": 2,
88+
"upper_bandwidth_mbps": 3,
89+
"downswitch": {
90+
"count": 1,
91+
"thresholds": {
92+
"Count": 1,
93+
"Mean": 9.6,
94+
"Median": 9.6,
95+
"StdDev": 0,
96+
"Min": 9.6,
97+
"Max": 9.6,
98+
"P25": 9.6,
99+
"P75": 9.6
100+
},
101+
"safety_factors": {
102+
"Count": 1,
103+
"Mean": 0.3125,
104+
"Median": 0.3125,
105+
"StdDev": 0,
106+
"Min": 0.3125,
107+
"Max": 0.3125,
108+
"P25": 0.3125,
109+
"P75": 0.3125
110+
}
111+
},
112+
"upswitch": {
113+
"count": 1,
114+
"thresholds": {
115+
"Count": 1,
116+
"Mean": 8.9,
117+
"Median": 8.9,
118+
"StdDev": 0,
119+
"Min": 8.9,
120+
"Max": 8.9,
121+
"P25": 8.9,
122+
"P75": 8.9
123+
},
124+
"safety_factors": {
125+
"Count": 1,
126+
"Mean": 0.33707865168539325,
127+
"Median": 0.33707865168539325,
128+
"StdDev": 0,
129+
"Min": 0.33707865168539325,
130+
"Max": 0.33707865168539325,
131+
"P25": 0.33707865168539325,
132+
"P75": 0.33707865168539325
133+
}
134+
}
135+
},
136+
{
137+
"lower_variant_idx": 0,
138+
"upper_variant_idx": 1,
139+
"lower_bandwidth_mbps": 1,
140+
"upper_bandwidth_mbps": 2,
141+
"downswitch": {
142+
"count": 1,
143+
"thresholds": {
144+
"Count": 1,
145+
"Mean": 8.9,
146+
"Median": 8.9,
147+
"StdDev": 0,
148+
"Min": 8.9,
149+
"Max": 8.9,
150+
"P25": 8.9,
151+
"P75": 8.9
152+
},
153+
"safety_factors": {
154+
"Count": 1,
155+
"Mean": 0.2247191011235955,
156+
"Median": 0.2247191011235955,
157+
"StdDev": 0,
158+
"Min": 0.2247191011235955,
159+
"Max": 0.2247191011235955,
160+
"P25": 0.2247191011235955,
161+
"P75": 0.2247191011235955
162+
}
163+
},
164+
"upswitch": {
165+
"count": 1,
166+
"thresholds": {
167+
"Count": 1,
168+
"Mean": 8.9,
169+
"Median": 8.9,
170+
"StdDev": 0,
171+
"Min": 8.9,
172+
"Max": 8.9,
173+
"P25": 8.9,
174+
"P75": 8.9
175+
},
176+
"safety_factors": {
177+
"Count": 1,
178+
"Mean": 0.2247191011235955,
179+
"Median": 0.2247191011235955,
180+
"StdDev": 0,
181+
"Min": 0.2247191011235955,
182+
"Max": 0.2247191011235955,
183+
"P25": 0.2247191011235955,
184+
"P75": 0.2247191011235955
185+
}
186+
}
187+
}
188+
]
189+
}

0 commit comments

Comments
 (0)