mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			173 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
| /**
 | ||
| * the SrsPublisher object.
 | ||
| * @param container the html container id.
 | ||
| * @param width a float value specifies the width of publisher.
 | ||
| * @param height a float value specifies the height of publisher.
 | ||
| * @param private_object [optional] an object that used as private object, 
 | ||
| *       for example, the logic chat object which owner this publisher.
 | ||
| */
 | ||
| function SrsPublisher(container, width, height, private_object) {
 | ||
|     if (!SrsPublisher.__id) {
 | ||
|         SrsPublisher.__id = 100;
 | ||
|     }
 | ||
|     if (!SrsPublisher.__publishers) {
 | ||
|         SrsPublisher.__publishers = [];
 | ||
|     }
 | ||
|     
 | ||
|     SrsPublisher.__publishers.push(this);
 | ||
|     
 | ||
|     this.private_object = private_object;
 | ||
|     this.container = container;
 | ||
|     this.width = width;
 | ||
|     this.height = height;
 | ||
|     this.id = SrsPublisher.__id++;
 | ||
|     this.callbackObj = null;
 | ||
|     
 | ||
|     // set the values when publish.
 | ||
|     this.url = null;
 | ||
|     this.vcodec = {};
 | ||
|     this.acodec = {};
 | ||
|     
 | ||
|     // callback set the following values.
 | ||
|     this.cameras = [];
 | ||
|     this.microphones = [];
 | ||
|     this.code = 0;
 | ||
|     
 | ||
|     // error code defines.
 | ||
|     this.errors = {
 | ||
|         "100": "无法获取指定的摄像头。", //error_camera_get 
 | ||
|         "101": "无法获取指定的麦克风。", //error_microphone_get 
 | ||
|         "102": "摄像头为禁用状态,推流时请允许flash访问摄像头。", //error_camera_muted 
 | ||
|         "103": "服务器关闭了连接。", //error_connection_closed 
 | ||
|         "104": "服务器连接失败。", //error_connection_failed 
 | ||
|         "199": "未知错误。"
 | ||
|     };
 | ||
| }
 | ||
| /**
 | ||
| * user can set some callback, then start the publisher.
 | ||
| * callbacks:
 | ||
| *      on_publisher_ready(cameras, microphones):int, when srs publisher ready, user can publish.
 | ||
| *      on_publisher_error(code, desc):int, when srs publisher error, callback this method.
 | ||
| *      on_publisher_warn(code, desc):int, when srs publisher warn, callback this method.
 | ||
| */
 | ||
| SrsPublisher.prototype.start = function() {
 | ||
|     // embed the flash.
 | ||
|     var flashvars = {};
 | ||
|     flashvars.id = this.id;
 | ||
|     flashvars.width = this.width;
 | ||
|     flashvars.height = this.height;
 | ||
|     flashvars.on_publisher_ready = "__srs_on_publisher_ready";
 | ||
|     flashvars.on_publisher_error = "__srs_on_publisher_error";
 | ||
|     flashvars.on_publisher_warn = "__srs_on_publisher_warn";
 | ||
|     
 | ||
|     var params = {};
 | ||
|     params.wmode = "opaque";
 | ||
|     params.allowFullScreen = "true";
 | ||
|     params.allowScriptAccess = "always";
 | ||
|     
 | ||
|     var attributes = {};
 | ||
|     
 | ||
|     var self = this;
 | ||
|     
 | ||
|     swfobject.embedSWF(
 | ||
|         "srs_publisher/release/srs_publisher.swf?_version="+srs_get_version_code(), 
 | ||
|         this.container,
 | ||
|         this.width, this.height,
 | ||
|         "11.1.0", "js/AdobeFlashPlayerInstall.swf",
 | ||
|         flashvars, params, attributes,
 | ||
|         function(callbackObj){
 | ||
|             self.callbackObj = callbackObj;
 | ||
|         }
 | ||
|     );
 | ||
|     
 | ||
|     return this;
 | ||
| }
 | ||
| /**
 | ||
| * publish stream to server.
 | ||
| * @param url a string indicates the rtmp url to publish.
 | ||
| * @param vcodec an object contains the video codec info.
 | ||
| * @param acodec an object contains the audio codec info.
 | ||
| */
 | ||
| SrsPublisher.prototype.publish = function(url, vcodec, acodec) {
 | ||
|     this.stop();
 | ||
|     SrsPublisher.__publishers.push(this);
 | ||
|     
 | ||
|     if (url) {
 | ||
|         this.url = url;
 | ||
|     }
 | ||
|     if (vcodec) {
 | ||
|         this.vcodec = vcodec;
 | ||
|     }
 | ||
|     if (acodec) {
 | ||
|         this.acodec = acodec;
 | ||
|     }
 | ||
|     
 | ||
|     this.callbackObj.ref.__publish(this.url, this.width, this.height, this.vcodec, this.acodec);
 | ||
| }
 | ||
| SrsPublisher.prototype.stop = function() {
 | ||
|     for (var i = 0; i < SrsPublisher.__publishers.length; i++) {
 | ||
|         var player = SrsPublisher.__publishers[i];
 | ||
|         
 | ||
|         if (player.id != this.id) {
 | ||
|             continue;
 | ||
|         }
 | ||
|         
 | ||
|         SrsPublisher.__publishers.splice(i, 1);
 | ||
|         break;
 | ||
|     }
 | ||
|     
 | ||
|     this.callbackObj.ref.__stop();
 | ||
| }
 | ||
| /**
 | ||
| * when publisher ready.
 | ||
| * @param cameras a string array contains the names of cameras.
 | ||
| * @param microphones a string array contains the names of microphones.
 | ||
| */
 | ||
| SrsPublisher.prototype.on_publisher_ready = function(cameras, microphones) {
 | ||
| }
 | ||
| /**
 | ||
| * when publisher error.
 | ||
| * @code the error code.
 | ||
| * @desc the error desc message.
 | ||
| */
 | ||
| SrsPublisher.prototype.on_publisher_error = function(code, desc) {
 | ||
|     throw new Error("publisher error. code=" + code + ", desc=" + desc);
 | ||
| }
 | ||
| SrsPublisher.prototype.on_publisher_warn = function(code, desc) {
 | ||
|     throw new Error("publisher warn. code=" + code + ", desc=" + desc);
 | ||
| }
 | ||
| function __srs_find_publisher(id) {
 | ||
|     for (var i = 0; i < SrsPublisher.__publishers.length; i++) {
 | ||
|         var publisher = SrsPublisher.__publishers[i];
 | ||
|         
 | ||
|         if (publisher.id != id) {
 | ||
|             continue;
 | ||
|         }
 | ||
|         
 | ||
|         return publisher;
 | ||
|     }
 | ||
|     
 | ||
|     throw new Error("publisher not found. id=" + id);
 | ||
| }
 | ||
| function __srs_on_publisher_ready(id, cameras, microphones) {
 | ||
|     var publisher = __srs_find_publisher(id);
 | ||
|     
 | ||
|     publisher.cameras = cameras;
 | ||
|     publisher.microphones = microphones;
 | ||
|     
 | ||
|     publisher.on_publisher_ready(cameras, microphones);
 | ||
| }
 | ||
| function __srs_on_publisher_error(id, code) {
 | ||
|     var publisher = __srs_find_publisher(id);
 | ||
|     
 | ||
|     publisher.code = code;
 | ||
|     
 | ||
|     publisher.on_publisher_error(code, publisher.errors[""+code]);
 | ||
| }
 | ||
| function __srs_on_publisher_warn(id, code) {
 | ||
|     var publisher = __srs_find_publisher(id);
 | ||
|     
 | ||
|     publisher.code = code;
 | ||
|     
 | ||
|     publisher.on_publisher_warn(code, publisher.errors[""+code]);
 | ||
| }
 |