no commit message

This commit is contained in:
niandeng
2020-09-17 18:40:01 +08:00
parent 4382915d09
commit d957abceaa
283 changed files with 86935 additions and 63 deletions
@@ -0,0 +1,80 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mangui.hls.controller {
import org.mangui.hls.constant.HLSLoaderTypes;
import org.mangui.hls.event.HLSEvent;
import org.mangui.hls.event.HLSLoadMetrics;
import org.mangui.hls.HLS;
import org.mangui.hls.HLSSettings;
CONFIG::LOGGING {
import org.mangui.hls.utils.Log;
}
/** Class that manages buffer threshold values (minBufferLength/lowBufferLength)
*/
public class BufferThresholdController {
/** Reference to the HLS controller. **/
private var _hls : HLS;
private var _targetduration : Number;
private var _minBufferLength : Number;
/** Create the loader. **/
public function BufferThresholdController(hls : HLS) : void {
_hls = hls;
_hls.addEventListener(HLSEvent.MANIFEST_LOADED, _manifestLoadedHandler);
_hls.addEventListener(HLSEvent.TAGS_LOADED, _fragmentLoadedHandler);
_hls.addEventListener(HLSEvent.FRAGMENT_LOADED, _fragmentLoadedHandler);
};
public function dispose() : void {
_hls.removeEventListener(HLSEvent.MANIFEST_LOADED, _manifestLoadedHandler);
_hls.removeEventListener(HLSEvent.TAGS_LOADED, _fragmentLoadedHandler);
_hls.removeEventListener(HLSEvent.FRAGMENT_LOADED, _fragmentLoadedHandler);
}
public function get minBufferLength() : Number {
if (HLSSettings.minBufferLength == -1) {
return _minBufferLength;
} else {
return HLSSettings.minBufferLength;
}
}
public function get lowBufferLength() : Number {
if (HLSSettings.minBufferLength == -1) {
// in automode, low buffer threshold should be less than min auto buffer
return Math.min(minBufferLength / 2, HLSSettings.lowBufferLength);
} else {
return HLSSettings.lowBufferLength;
}
}
private function _manifestLoadedHandler(event : HLSEvent) : void {
_targetduration = event.levels[_hls.startLevel].targetduration;
_minBufferLength = _targetduration;
};
private function _fragmentLoadedHandler(event : HLSEvent) : void {
var metrics : HLSLoadMetrics = event.loadMetrics;
// only monitor main fragment metrics for buffer threshold computing
if(metrics.type == HLSLoaderTypes.FRAGMENT_MAIN) {
/* set min buf len to be the time to process a complete segment, using current processing rate */
_minBufferLength = metrics.processing_duration * (_targetduration / metrics.duration);
// avoid min > max
if (HLSSettings.maxBufferLength) {
_minBufferLength = Math.min(HLSSettings.maxBufferLength, _minBufferLength);
}
// avoid _minBufferLength > minBufferLengthCapping
if (HLSSettings.minBufferLengthCapping > 0) {
_minBufferLength = Math.min(HLSSettings.minBufferLengthCapping, _minBufferLength);
}
CONFIG::LOGGING {
Log.debug2("AutoBufferController:minBufferLength:" + _minBufferLength);
}
};
}
}
}