Closed akouSDN closed 8 years ago
Hi,
I am currently using the dashif client and trying to understand the adaptation logic used by the dashif player,The adaptation algorithm uses information about the available throughput in the past and the buffer fill level to select the quality level of the next segment,The implementation of dash.js includes five class of ABR rules – 'ABRRulesCollection.js', 'BufferOccupancyRule.js','InsufficientBufferRule.js' and 'ThroughputRule'.If i understood correctly,dashIF determines the throughput of the next segment based on the the available throughput in the past :lastRequestThroughput = Math.round((lastRequest.trace[lastRequest.trace.length - 1].b * 8 ) / downloadTime); at ThroughputRule.js
Thanks
There are two main components to ABR in Dash.js ThroughputRule and AbandonRequestsRule.
As you mention the ThroughputRule uses recent past calculated throughput to predict the near future's throughput. We average the last X segments to smooth out some VBR and network variations.
The AbandonmentRule however will detect real time throughput changes during the download progress of each fragment. It calculates If it will take longer to download a chuck vs length/duration gained by downloading. If this value is 1.5 x the fragment duration then we abandon and re-downloaded at same fragment ID but at a lower quality.
The other two rules you mention are more outside cases.
BufferOccupancyRule is there to override the ThroughputRule when it requests a switch down. This will only happen when we have enouch buffer occupancy to absorb a few slower downloads. Attempt to prevent oscillation.
The InsufficientBufferRule forces a switch to 0 when a rebuffer event occurs, This is a last resort to get data as fast as possible to resume streaming.
Thanks a lot
we have tried to document the basic ABR rules in current dash.js version 1.5.1 in following google docs:
https://docs.google.com/drawings/d/16_EztksKjiZSF0HdjR44soAs7x8QewwlqnABnqjhyk4/edit?usp=sharing
Hi, i add some documentation for bufferController class in following google docs: https://docs.google.com/drawings/d/1hz7jy4qHrwzFSx7Axsa51tw3p8xCOCiF32BYI79GWsY/edit?usp=sharing
Thanks guys
Hi, everybody I want to implement a new client rate adaptation algorithm based on dash.js. However, I don't find the file of rate adaptation implemented in dash.js to modify it.
Please, Can anybody give me a favor ? (location of rate adaptation algorithm in dash.js) Thank you so much !