During our tests we have encountered some issues with how our player is handling connection problems.
1. retryHttpRequest is never called:
To reproduce:
limit video chunks download speeds via some sort of networking tool (for example 1kbit down, 1mb up)
Observe video being frozen
Observe retryHttpRequest cb never being called
2. retryHttpRequest handler always has retry count equal 0
To reproduce:
Forbid video chunks download speeds via chrome devTools, but allow to download MPD file
Observe video never actually loading
Observe retryHttpRequest cb being called with retry param always equal to 0
As shown in docs: NetworkConfig | Bitmovin Player API 7.8.21 there is a 3rd param for retryHttpRequest which stands for Amount of retries. Sadly it’s always 0, is it supposed to be?
3. On blocking specific URLs via chrome devTools, Bitmovin never errors out
To reproduce:
Forbid video chunks from being downloaded via chrome devTools, but allow the download of MPD file (use chrome’s block URL with a wildcard)
Observe video never actually loading
Observe no error callback from bitmovin player
Side note: if we use retryHttpRequest cb, and reject the Promise withing that function, NETWORK_ERROR is thrown as expected
Could someone explain to me why the player behaves like this? Thank you!
The player has a 19-20 seconds timeout while it is trying to download a segment. If the timeout is reached it will cancel the request and try to switch to the next lower representation/rendition. It repeats this until it has reached the lowest/smallest representation. Once it has reached this point it will just keep on downloading. It will not timeout anymore. The reason for this is that higher/better speeds might become available at any point.
The reason why you are seeing infinite retries is the way you are testing this. The player implementation is such that if the domain was reachable for a previous request then it will keep trying and not actually error out. If the domain was never reachable it will error out. You can see this by doing the following: block the domain before the page is loaded and then load the page. You will see the player error. But if you block the domain during playback you will see it trigger a stallstarted event and then it tries to download the segment(s). This is as designed.
I hope the above helps you with your implementation. Have a great day!