mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			136 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
/**
 | 
						|
* the SrsBandwidth object.
 | 
						|
* @param container the html container id.
 | 
						|
* @param width a float value specifies the width of bandwidth.
 | 
						|
* @param height a float value specifies the height of bandwidth.
 | 
						|
* @param private_object [optional] an object that used as private object, 
 | 
						|
*       for example, the logic chat object which owner this bandwidth.
 | 
						|
*/
 | 
						|
function SrsBandwidth(container, width, height, private_object) {
 | 
						|
    if (!SrsBandwidth.__id) {
 | 
						|
        SrsBandwidth.__id = 100;
 | 
						|
    }
 | 
						|
    if (!SrsBandwidth.__bandwidths) {
 | 
						|
        SrsBandwidth.__bandwidths = [];
 | 
						|
    }
 | 
						|
    
 | 
						|
    SrsBandwidth.__bandwidths.push(this);
 | 
						|
    
 | 
						|
    this.private_object = private_object;
 | 
						|
    this.container = container;
 | 
						|
    this.width = width;
 | 
						|
    this.height = height;
 | 
						|
    this.id = SrsBandwidth.__id++;
 | 
						|
    this.stream_url = null;
 | 
						|
    this.callbackObj = null;
 | 
						|
    
 | 
						|
    // the callback set data.
 | 
						|
    this.percent = 0;
 | 
						|
    this.status = "";
 | 
						|
}
 | 
						|
/**
 | 
						|
* user can set some callback, then start the bandwidth.
 | 
						|
* @param url the bandwidth test url.
 | 
						|
* callbacks:
 | 
						|
*      on_bandwidth_ready():void, when srs bandwidth ready, user can play.
 | 
						|
*      on_update_progress(percent:Number):void, when srs bandwidth update the progress.
 | 
						|
*           percent:Number 100 means 100%.
 | 
						|
*      on_update_status(status:String):void, when srs bandwidth update the status.
 | 
						|
*           status:String the human readable status text.
 | 
						|
*/
 | 
						|
SrsBandwidth.prototype.start = function(url) {
 | 
						|
    if (url) {
 | 
						|
        this.stream_url = url;
 | 
						|
    }
 | 
						|
    
 | 
						|
    // embed the flash.
 | 
						|
    var flashvars = {};
 | 
						|
    flashvars.id = this.id;
 | 
						|
    flashvars.on_bandwidth_ready = "__srs_on_bandwidth_ready";
 | 
						|
    flashvars.on_update_progress = "__srs_on_update_progress";
 | 
						|
    flashvars.on_update_status = "__srs_on_update_status";
 | 
						|
    
 | 
						|
    var params = {};
 | 
						|
    params.wmode = "opaque";
 | 
						|
    params.allowFullScreen = "true";
 | 
						|
    params.allowScriptAccess = "always";
 | 
						|
    
 | 
						|
    var attributes = {};
 | 
						|
    
 | 
						|
    var self = this;
 | 
						|
    
 | 
						|
    swfobject.embedSWF(
 | 
						|
        "srs_bwt/release/srs_bwt.swf?_version="+srs_get_version_code(), 
 | 
						|
        this.container,
 | 
						|
        this.width, this.height,
 | 
						|
        "11.1.0", "js/AdobeFlashbandwidthInstall.swf",
 | 
						|
        flashvars, params, attributes,
 | 
						|
        function(callbackObj){
 | 
						|
            self.callbackObj = callbackObj;
 | 
						|
        }
 | 
						|
    );
 | 
						|
    
 | 
						|
    return this;
 | 
						|
}
 | 
						|
/**
 | 
						|
* play the stream.
 | 
						|
* @param stream_url the url of stream, rtmp or http.
 | 
						|
* @param volume the volume, 0 is mute, 1 is 100%, 2 is 200%.
 | 
						|
*/
 | 
						|
SrsBandwidth.prototype.check_bandwidth = function(url) {
 | 
						|
    this.stop();
 | 
						|
    SrsBandwidth.__bandwidths.push(this);
 | 
						|
    
 | 
						|
    if (url) {
 | 
						|
        this.stream_url = url;
 | 
						|
    }
 | 
						|
    
 | 
						|
    this.callbackObj.ref.__check_bandwidth(this.stream_url);
 | 
						|
}
 | 
						|
SrsBandwidth.prototype.stop = function(url) {
 | 
						|
    for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) {
 | 
						|
        var bandwidth = SrsBandwidth.__bandwidths[i];
 | 
						|
        
 | 
						|
        if (bandwidth.id != this.id) {
 | 
						|
            continue;
 | 
						|
        }
 | 
						|
        
 | 
						|
        SrsBandwidth.__bandwidths.splice(i, 1);
 | 
						|
        break;
 | 
						|
    }
 | 
						|
    
 | 
						|
    this.callbackObj.ref.__stop();
 | 
						|
}
 | 
						|
SrsBandwidth.prototype.on_bandwidth_ready = function() {
 | 
						|
}
 | 
						|
SrsBandwidth.prototype.on_update_progress = function(percent) {
 | 
						|
}
 | 
						|
SrsBandwidth.prototype.on_update_status = function(status) {
 | 
						|
}
 | 
						|
function __srs_find_bandwidth(id) {
 | 
						|
    for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) {
 | 
						|
        var bandwidth = SrsBandwidth.__bandwidths[i];
 | 
						|
        
 | 
						|
        if (bandwidth.id != id) {
 | 
						|
            continue;
 | 
						|
        }
 | 
						|
        
 | 
						|
        return bandwidth;
 | 
						|
    }
 | 
						|
    
 | 
						|
    throw new Error("bandwidth not found. id=" + id);
 | 
						|
}
 | 
						|
function __srs_on_bandwidth_ready(id) {
 | 
						|
    var bandwidth = __srs_find_bandwidth(id);
 | 
						|
    bandwidth.on_bandwidth_ready();
 | 
						|
}
 | 
						|
function __srs_on_update_progress(id, percent) {
 | 
						|
    var bandwidth = __srs_find_bandwidth(id);
 | 
						|
    bandwidth.percent = percent;
 | 
						|
    bandwidth.on_update_progress(percent);
 | 
						|
}
 | 
						|
function __srs_on_update_status(id, status) {
 | 
						|
    var bandwidth = __srs_find_bandwidth(id);
 | 
						|
    bandwidth.status = status;
 | 
						|
    bandwidth.on_update_status(status);
 | 
						|
} |