From 0dd023b60a0596624f3b218a949e3f3017703425 Mon Sep 17 00:00:00 2001 From: AlexWang <1669499355@qq.com> Date: Tue, 8 Aug 2017 18:27:27 +0800 Subject: [PATCH] t push -u origin master --- dist/.DS_Store | Bin 0 -> 6148 bytes dist/main.html | 1 + dist/ss.js | 1 + dist/test.html | 1 + dist/test.js | 1 + package.json | 6 ++++-- src/Emiter.js | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Loger.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Socket.js | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.js | 589 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ test/test.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ webpack.config.umd.js | 2 +- 12 files changed, 967 insertions(+), 27 deletions(-) create mode 100644 dist/.DS_Store create mode 100644 dist/main.html create mode 100644 dist/ss.js create mode 100644 dist/test.html create mode 100644 dist/test.js create mode 100644 src/Emiter.js create mode 100644 src/Loger.js create mode 100644 src/Socket.js diff --git a/dist/.DS_Store b/dist/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/dist/.DS_Store differ diff --git a/dist/main.html b/dist/main.html new file mode 100644 index 0000000..cf939fb --- /dev/null +++ b/dist/main.html @@ -0,0 +1 @@ +<!DOCTYPE html><html><head><meta charset="UTF-8"><title>UMD PLAYGROUND</title></head><body><div id="stage"></div><script type="text/javascript" src="main.js"></script></body></html> \ No newline at end of file diff --git a/dist/ss.js b/dist/ss.js new file mode 100644 index 0000000..51c7432 --- /dev/null +++ b/dist/ss.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.share=t():e.share=t()}(this,function(){return function(e){function t(n){if(_[n])return _[n].exports;var a=_[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var _={};return t.m=e,t.c=_,t.p="",t(0)}([function(e,t,_){e.exports=_(2)},function(e,t){"use strict";function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var _=0;_<t.length;_++){var n=t[_];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,_,n){return _&&e(t.prototype,_),n&&e(t,n),t}}(),a=function(){function e(){_(this,e),this.MAPS={}}return n(e,[{key:"on",value:function(e,t){if(e&&t){var _=this.MAPS[e];if(!_)return this.MAPS[e]=[t];_.push(t)}}},{key:"off",value:function(e,t){if(e){var _=this.MAPS[e];if(_){if(t)return _.splice(_.indexOf(t),1);_.length=0}}}},{key:"emit",value:function(e,t){if(e){var _=this.MAPS["*"];_&&_.length&&_.forEach(function(_){_(e,t)});var n=this.MAPS[e];n&&n.length&&n.forEach(function(e){e(t)})}}}]),e}();t.default=a},function(e,t,_){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e){var t,_,n,a;n=e.length,t=new Uint8Array(3*n);var r=0;for(_=0;_<n;_++)a=e.charCodeAt(_),a>=1&&a<=127?t[r++]=a:a>2047?(t[r++]=224|a>>12&15,t[r++]=128|a>>6&63,t[r++]=128|a>>0&63):(t[r++]=192|a>>6&31,t[r++]=128|a>>0&63);return new Uint8Array(t.buffer,0,r)}function r(e){var t,_,n,a,r,o;for(t="",n=e.length,_=0;_<n;)switch(a=e[_++],a>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(a);break;case 12:case 13:r=e[_++],t+=String.fromCharCode((31&a)<<6|63&r);break;case 14:r=e[_++],o=e[_++],t+=String.fromCharCode((15&a)<<12|(63&r)<<6|(63&o)<<0)}return t}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",_=new Object;if(_.data_len=0,_.data="",_.name=e,"mov_start"==e)_.type=1;else if("mov_stop"==e)_.type=2;else if("mov_pause"==e){if(_.type=3,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("mov_resume"==e)_.type=4;else if("mov_seek"==e){if(_.type=5,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("ss_start"==e)_.type=6,_.data=a(t),_.data_len=_.data.length;else if("ss_stop"==e)_.type=7;else if("ss_version"==e)_.type=14;else if("get_mic"==e)_.type=26;else{if("ds_start"==e){_.type=27,_.data_len=536;var n=new ArrayBuffer(_.data_len),o=new Uint32Array(n,0,6);coordstr=t;var i=coordstr.split(",");if(4!=i.length)return;o[0]=parseInt(i[0]),o[1]=parseInt(i[1]),o[2]=parseInt(i[2]),o[3]=parseInt(i[3]);var s=new Uint8Array(n,24,256);window_name=t;for(var S=a(window_name),E=0;E<S.length;E++)s[E]=S[E];o[4]=S.length,o[5]=0;new Uint8Array(n,280,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}if("ds_stop"==e)_.type=28;else{if("aud_start"==e){_.type=29,_.data_len=520;var n=new ArrayBuffer(_.data_len),l=new Uint32Array(n,0,1),C=t;l[0]=C.length;var f=new Uint32Array(n,4,1);f[0]=0;for(var c=new Uint8Array(n,8,256),O=a(C),E=0;E<O.length;E++)c[E]=O[E];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}if("aud_stop"==e)_.type=30;else if("get_cam"==e)_.type=41;else{if("cam_start"==e){_.type=42,_.data_len=520;var n=new ArrayBuffer(_.data_len),I=new Uint32Array(n,0,1),T=t;I[0]=T.length;var f=new Uint32Array(n,4,1);f[0]=0;for(var U=new Uint8Array(n,8,256),u=a(T),E=0;E<u.length;E++)U[E]=u[E];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}"cam_stop"==e?_.type=43:"set_videoparam"==e?(_.type=46,_.data=a(t),_.data_len=_.data.length):"get_videoparam"==e?(_.type=47,_.data=a(t),_.data_len=_.data.length):"start_record"==e?(_.type=48,_.data=a(t),_.data_len=_.data.length):"stop_record"==e?(_.type=49,_.data=a(t),_.data_len=_.data.length):"start_push"==e?(_.type=50,_.data=a(t),_.data_len=_.data.length):"stop_push"==e?(_.type=51,_.data=a(t),_.data_len=_.data.length):"get_rtmp_port"==e?_.type=52:"set_mic_vol"==e?(_.type=53,_.data=a(t),_.data_len=_.data.length):"get_mic_vol"==e&&(_.type=54)}}}A(_)}function A(e){var t=8+e.data_len,_=new ArrayBuffer(t),n=new Uint16Array(_,0,1),a=new Uint8Array(_,2,1),r=new Uint32Array(_,4,1);if(n[0]=e.type,a[0]=0,r[0]=e.data_len,e.data_len>0)for(var o=new Uint8Array(_,8,e.data_len),A=0;A<e.data_len;A++)o[A]=e.data[A];R&&R.send(_)}function i(){try{R&&(R.close(),R=R.onopen=R.onclose=R.onerror=R.onmessage=null,C.emit(C.CLOSE))}catch(e){console.log(e)}}function s(){i()}function S(){R&&i(),R=new WebSocket("ws://"+p+":"+L),g=setTimeout(function(){clearTimeout(g),i()},1500),R.timeout=1500,R.binaryType="arraybuffer",R.onopen=function(){clearTimeout(g),o("get_rtmp_port"),o("get_mic"),o("get_cam"),o("get_mic_vol"),C.emit(C.OPEN)},R.onclose=function(){i()},R.onerror=function(){i()},R.onmessage=function(e){var t=e.data;if("string"==typeof e.data)console.log("on message [string] ignore.");else{var _=new DataView(t),n=_.getUint16(0,!0);console.log("onmessage code->",n);var a=(_.getUint8(2,!0),_.getUint32(4,!0));if(n>=0&&n<f.length){f[n]}if(0==n||6==n||8==n)console.log("mov_start,mov_pause,mov_seek success");else if(10==n){if(a>36){var o=new Uint32Array(t,8,8),A="width:"+o[0]+" height:"+o[1];A="framerate:"+o[2]+" duration:"+o[3],A="playpos:"+o[4]+" filesize:"+o[5],c=A;var i=o[6],s=new Uint8Array(t,40,i),S=r(s);c.filename=S,C.emit(C.MOVIE_INFO_CHANGE,c)}}else if(11==n)console.log("ss_start success"),C.emit(C.SS_START);else if(24<=n&&26>=n){if(a>=4){var E=_.getUint32(8,!0);O=E.toString(),C.emit(C.VERSION_INFO_CHANGE,O)}}else if(55==n)console.log("ds_start success");else if(59==n)console.log("as start success");else if(83==n){if(console.log("get camera sucess"),a>4){var l=_.getUint32(8,!0),R=12;I.length=0;for(var p=0;p<l;p++){var L=_.getUint32(R,!0);R+=4;var g=new Uint8Array(t,R,L-1);R+=L;var y=r(g);I.push(y)}C.emit(C.CAMERA_INFO_CHANGE,I)}}else if(53==n){if(a>4){var v=_.getUint32(8,!0),R=12;T.length=0;for(var p=0;p<v;p++){var M=_.getUint32(R,!0);R+=4;var P=new Uint8Array(t,R,M-1);R+=M;var y=r(P);T.push(y)}C.emit(C.MIC_INFO_CHANGE,T)}}else if(85==n)console.log("cam_share success");else if(95==n){console.log("get_videoparam success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);U=y,C.emit(C.VIDEO_INFO_CHANGE,U)}else if(105==n){console.log("get_rtmp_port_success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);u=y,C.emit(C.RTMP_PORT_CHANGE,u)}else if(109==n){console.log("get_mic_vol success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);d=y,C.emit(C.MIC_VOL_CHANGE,d)}else if(111<=n&&114>=n){var N=new Uint8Array(t,8,t.byteLength-8),V=r(N);console.log("url->",V)}else if(13==n)C.emit(C.SS_STOP);else{var N=new Uint8Array(t,8,t.byteLength-8),y=r(N);console.log("data ->",y)}}}}Object.defineProperty(t,"__esModule",{value:!0});var E=_(1),l=n(E),C=new l.default,f=["MOV_START_SUC","MOV_START_FAIL","MOV_STOP_SUC","MOV_STOP_FAIL","MOV_PAUSE_SUC","MOV_PAUSE_FAIL","MOV_RESUME_SUC","MOV_RESUME_FAIL","MOV_SEEK_SUC","MOV_SEEK_FAIL","MOV_PROPERTY","SS_START_SUC","SS_START_FAIL","SS_STOP_SUC","SS_STOP_FAIL","REC_START_SUC","REC_START_FAIL","REC_STOP_SUC","REC_STOP_FAIL","REC_PAUSE_SUC","REC_PAUSE_FAIL","REC_RESUME_SUC","REC_RESUME_FAIL","MOV_PLAY_FINISH","MOV_VERSION","SS_VERSION","REC_VERSION","MOV_SELECT_FILE_CANCEL","QAV_LOGIN_SUC","QAV_LOGIN_FAIL","QAV_LOGOUT_SUC","QAV_LOGOUT_FAIL","QAV_ENTERROOM_SUC","QAV_ENTERROOM_FAIL","QAV_LEAVEROOM_SUC","QAV_LEAVEROOM_FAIL","QAV_OPEN_MIC_SUC","QAV_OPEN_MIC_FAIL","QAV_OPEN_MIC_NODEV","QAV_CLOSE_MIC_SUC","QAV_CLOSE_MIC_FAIL","QAV_CLOSE_MIC_NODEV","QAV_OPEN_PLAYER_SUC","QAV_OPEN_PLAYER_FAIL","QAV_OPEN_PLAYER_NODEV","QAV_CLOSE_PLAYER_SUC","QAV_CLOSE_PLAYER_FAIL","QAV_CLOSE_PLAYER_NODEV","QAV_MUTE_AUDIO_SUC","QAV_MUTE_AUDIO_FAIL","QAV_UNMUTE_AUDIO_SUC","QAV_UNMUTE_AUDIO_FAIL","REC_SAVE_FILE_CANCEL","GET_MIC_SUC","GET_MIC_FAIL","DS_START_SUC","DS_START_FAIL","DS_STOP_SUC","DS_STOP_FAIL","AUD_START_SUC","AUD_START_FAIL","AUD_STOP_SUC","AUD_STOP_FAIL","AUD_DATA","SS_DATA","MOV_DATA","PEN_START_SUC","PEN_START_FAIL","PEN_STOP_SUC","PEN_STOP_FAIL","PEN_VERSION","QAV_DEVICE_SUC","QAV_DEVICE_FAIL","CBD_QUERY_SUC","CBD_QUERY_FAIL","CBD_GET_SUC","CBD_GET_FAIL","FILE_GET_SUC","FILE_GET_FAIL","FILE_SET_SUC","FILE_SET_FAIL","RESTART_SUC","RESTART_FAIL","GET_CAM_SUC","GET_CAM_FAIL","CAM_START_SUC","CAM_START_FAIL","CAM_STOP_SUC","CAM_STOP_FAIL","SWITCH_SCENE_SUC","SWITCH_SCENE_FAIL","PUSH_STREAM_FAIL","SHOW_UI_SUC","SET_VIDEO_PARAM_SUC","SET_VIDEO_PARAM_FAIL","GET_VIDEO_PARAM_SUC","GET_VIDEO_PARAM_FAIL","START_RECORD_SUC","START_RECORD_FAIL","STOP_RECORD_SUC","STOP_RECORD_FAIL","START_PUSH_SUC","START_PUSH_FAIL","STOP_PUSH_SUC","STOP_PUSH_FAIL","GET_RTMP_PORT_SUC","GET_RTMP_PORT_FAIL","SET_MIC_VOL_SUC","SET_MIC_VOL_FAIL","GET_MIC_VOL_SUC","GET_MIC_VOL_FAIL","RTMP_CONNECTING","RTMP_CONNECT_SUC","RTMP_CONNECT_FAIL","RTMP_CONNECT_CLOSED"],c=null,O="",I=[],T=[],U="",u="",d="",R=null,p="127.0.0.1",L=8090,g=0;C.infos={movieInfo:c,versionInfo:O,cameraInfo:I,micInfo:T,videoInfo:U,rtmpPort:u,micVol:d},C.MOVIE_INFO_CHANGE="MOVIE_INFO_CHANGE",C.VERSION_INFO_CHANGE="VERSION_INFO_CHANGE",C.CAMERA_INFO_CHANGE="CAMERA_INFO_CHANGE",C.MIC_INFO_CHANGE="MIC_INFO_CHANGE",C.VIDEO_INFO_CHANGE="VIDEO_INFO_CHANGE",C.RTMP_PORT_CHANGE="RTMP_PORT_CHANGE",C.MIC_VOL_CHANGE="MIC_VOL_CHANGE",C.SS_START="SS_START",C.SS_STOP="SS_STOP",C.OPEN="OPEN",C.CLOSE="CLOSE",C.ERROR="ERROR",C.getRTMPPort=function(){o("get_rtmp_port")},C.getMicInfo=function(){o("get_mic")},C.getCamInfo=function(){o("get_cam")},C.getMicVol=function(){o("get_mic_vol")},C.start=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"127.0.0.1",t=arguments[1];p=e,L=t,S()},C.stop=function(){s()},C.startShareScreen=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";o("ss_start",e)},C.stopShareScreen=function(){o("ss_stop")},t.default=C}])}); \ No newline at end of file diff --git a/dist/test.html b/dist/test.html new file mode 100644 index 0000000..7b00d78 --- /dev/null +++ b/dist/test.html @@ -0,0 +1 @@ +<!DOCTYPE html><html><head><meta charset="UTF-8"><title>UMD PLAYGROUND</title></head><body><div id="stage"></div><script type="text/javascript" src="test.js"></script></body></html> \ No newline at end of file diff --git a/dist/test.js b/dist/test.js new file mode 100644 index 0000000..866a8ce --- /dev/null +++ b/dist/test.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.share=t():e.share=t()}(this,function(){return function(e){function t(n){if(_[n])return _[n].exports;var a=_[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var _={};return t.m=e,t.c=_,t.p="",t(0)}([function(e,t,_){e.exports=_(3)},function(e,t){"use strict";function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var _=0;_<t.length;_++){var n=t[_];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,_,n){return _&&e(t.prototype,_),n&&e(t,n),t}}(),a=function(){function e(){_(this,e),this.MAPS={}}return n(e,[{key:"on",value:function(e,t){if(e&&t){var _=this.MAPS[e];if(!_)return this.MAPS[e]=[t];_.push(t)}}},{key:"off",value:function(e,t){if(e){var _=this.MAPS[e];if(_){if(t)return _.splice(_.indexOf(t),1);_.length=0}}}},{key:"emit",value:function(e,t){if(e){var _=this.MAPS["*"];_&&_.length&&_.forEach(function(_){_(e,t)});var n=this.MAPS[e];n&&n.length&&n.forEach(function(e){e(t)})}}}]),e}();t.default=a},function(e,t,_){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e){var t,_,n,a;n=e.length,t=new Uint8Array(3*n);var r=0;for(_=0;_<n;_++)a=e.charCodeAt(_),a>=1&&a<=127?t[r++]=a:a>2047?(t[r++]=224|a>>12&15,t[r++]=128|a>>6&63,t[r++]=128|a>>0&63):(t[r++]=192|a>>6&31,t[r++]=128|a>>0&63);return new Uint8Array(t.buffer,0,r)}function r(e){var t,_,n,a,r,o;for(t="",n=e.length,_=0;_<n;)switch(a=e[_++],a>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(a);break;case 12:case 13:r=e[_++],t+=String.fromCharCode((31&a)<<6|63&r);break;case 14:r=e[_++],o=e[_++],t+=String.fromCharCode((15&a)<<12|(63&r)<<6|(63&o)<<0)}return t}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",_=new Object;if(_.data_len=0,_.data="",_.name=e,"mov_start"==e)_.type=1;else if("mov_stop"==e)_.type=2;else if("mov_pause"==e){if(_.type=3,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("mov_resume"==e)_.type=4;else if("mov_seek"==e){if(_.type=5,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("ss_start"==e)_.type=6,_.data=a(t),_.data_len=_.data.length;else if("ss_stop"==e)_.type=7;else if("ss_version"==e)_.type=14;else if("get_mic"==e)_.type=26;else{if("ds_start"==e){_.type=27,_.data_len=536;var n=new ArrayBuffer(_.data_len),o=new Uint32Array(n,0,6);coordstr=t;var A=coordstr.split(",");if(4!=A.length)return;o[0]=parseInt(A[0]),o[1]=parseInt(A[1]),o[2]=parseInt(A[2]),o[3]=parseInt(A[3]);var s=new Uint8Array(n,24,256);window_name=t;for(var S=a(window_name),l=0;l<S.length;l++)s[l]=S[l];o[4]=S.length,o[5]=0;new Uint8Array(n,280,256);return _.data=new Uint8Array(n,0,_.data_len),void i(_)}if("ds_stop"==e)_.type=28;else{if("aud_start"==e){_.type=29,_.data_len=520;var n=new ArrayBuffer(_.data_len),E=new Uint32Array(n,0,1),f=t;E[0]=f.length;var c=new Uint32Array(n,4,1);c[0]=0;for(var C=new Uint8Array(n,8,256),O=a(f),l=0;l<O.length;l++)C[l]=O[l];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void i(_)}if("aud_stop"==e)_.type=30;else if("get_cam"==e)_.type=41;else{if("cam_start"==e){_.type=42,_.data_len=520;var n=new ArrayBuffer(_.data_len),u=new Uint32Array(n,0,1),T=t;u[0]=T.length;var c=new Uint32Array(n,4,1);c[0]=0;for(var I=new Uint8Array(n,8,256),U=a(T),l=0;l<U.length;l++)I[l]=U[l];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void i(_)}"cam_stop"==e?_.type=43:"set_videoparam"==e?(_.type=46,_.data=a(t),_.data_len=_.data.length):"get_videoparam"==e?(_.type=47,_.data=a(t),_.data_len=_.data.length):"start_record"==e?(_.type=48,_.data=a(t),_.data_len=_.data.length):"stop_record"==e?(_.type=49,_.data=a(t),_.data_len=_.data.length):"start_push"==e?(_.type=50,_.data=a(t),_.data_len=_.data.length):"stop_push"==e?(_.type=51,_.data=a(t),_.data_len=_.data.length):"get_rtmp_port"==e?_.type=52:"set_mic_vol"==e?(_.type=53,_.data=a(t),_.data_len=_.data.length):"get_mic_vol"==e&&(_.type=54)}}}i(_)}function i(e){var t=8+e.data_len,_=new ArrayBuffer(t),n=new Uint16Array(_,0,1),a=new Uint8Array(_,2,1),r=new Uint32Array(_,4,1);if(n[0]=e.type,a[0]=0,r[0]=e.data_len,e.data_len>0)for(var o=new Uint8Array(_,8,e.data_len),i=0;i<e.data_len;i++)o[i]=e.data[i];R&&R.send(_)}function A(){try{R&&(R.close(),R=R.onopen=R.onclose=R.onerror=R.onmessage=null,f.emit(f.CLOSE))}catch(e){console.log(e)}}function s(){A()}function S(){R&&A(),R=new WebSocket("ws://"+g+":"+p),L=setTimeout(function(){clearTimeout(L),A()},1500),R.timeout=1500,R.binaryType="arraybuffer",R.onopen=function(){clearTimeout(L),o("get_rtmp_port"),o("get_mic"),o("get_cam"),o("get_mic_vol"),f.emit(f.OPEN)},R.onclose=function(){A()},R.onerror=function(){A()},R.onmessage=function(e){var t=e.data;if("string"==typeof e.data)console.log("on message [string] ignore.");else{var _=new DataView(t),n=_.getUint16(0,!0);console.log("onmessage code->",n);var a=(_.getUint8(2,!0),_.getUint32(4,!0));if(n>=0&&n<c.length){c[n]}if(0==n||6==n||8==n)console.log("mov_start,mov_pause,mov_seek success");else if(10==n){if(a>36){var o=new Uint32Array(t,8,8),i="width:"+o[0]+" height:"+o[1];i="framerate:"+o[2]+" duration:"+o[3],i="playpos:"+o[4]+" filesize:"+o[5],C=i;var A=o[6],s=new Uint8Array(t,40,A),S=r(s);C.filename=S,f.emit(f.MOVIE_INFO_CHANGE,C)}}else if(11==n)console.log("ss_start success"),f.emit(f.SS_START);else if(24<=n&&26>=n){if(a>=4){var l=_.getUint32(8,!0);O=l.toString(),f.emit(f.VERSION_INFO_CHANGE,O)}}else if(55==n)console.log("ds_start success");else if(59==n)console.log("as start success");else if(83==n){if(console.log("get camera sucess"),a>4){var E=_.getUint32(8,!0),R=12;u.length=0;for(var g=0;g<E;g++){var p=_.getUint32(R,!0);R+=4;var L=new Uint8Array(t,R,p-1);R+=p;var y=r(L);u.push(y)}f.emit(f.CAMERA_INFO_CHANGE,u)}}else if(53==n){if(a>4){var P=_.getUint32(8,!0),R=12;T.length=0;for(var g=0;g<P;g++){var v=_.getUint32(R,!0);R+=4;var M=new Uint8Array(t,R,v-1);R+=v;var y=r(M);T.push(y)}f.emit(f.MIC_INFO_CHANGE,T)}}else if(85==n)console.log("cam_share success");else if(95==n){console.log("get_videoparam success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);I=y,f.emit(f.VIDEO_INFO_CHANGE,I)}else if(105==n){console.log("get_rtmp_port_success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);U=y,f.emit(f.RTMP_PORT_CHANGE,U)}else if(109==n){console.log("get_mic_vol success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);d=y,f.emit(f.MIC_VOL_CHANGE,d)}else if(111<=n&&114>=n){var N=new Uint8Array(t,8,t.byteLength-8),V=r(N);console.log("url->",V)}else if(13==n)f.emit(f.SS_STOP);else{var N=new Uint8Array(t,8,t.byteLength-8),y=r(N);console.log("data ->",y)}}}}Object.defineProperty(t,"__esModule",{value:!0});var l=_(1),E=n(l),f=new E.default,c=["MOV_START_SUC","MOV_START_FAIL","MOV_STOP_SUC","MOV_STOP_FAIL","MOV_PAUSE_SUC","MOV_PAUSE_FAIL","MOV_RESUME_SUC","MOV_RESUME_FAIL","MOV_SEEK_SUC","MOV_SEEK_FAIL","MOV_PROPERTY","SS_START_SUC","SS_START_FAIL","SS_STOP_SUC","SS_STOP_FAIL","REC_START_SUC","REC_START_FAIL","REC_STOP_SUC","REC_STOP_FAIL","REC_PAUSE_SUC","REC_PAUSE_FAIL","REC_RESUME_SUC","REC_RESUME_FAIL","MOV_PLAY_FINISH","MOV_VERSION","SS_VERSION","REC_VERSION","MOV_SELECT_FILE_CANCEL","QAV_LOGIN_SUC","QAV_LOGIN_FAIL","QAV_LOGOUT_SUC","QAV_LOGOUT_FAIL","QAV_ENTERROOM_SUC","QAV_ENTERROOM_FAIL","QAV_LEAVEROOM_SUC","QAV_LEAVEROOM_FAIL","QAV_OPEN_MIC_SUC","QAV_OPEN_MIC_FAIL","QAV_OPEN_MIC_NODEV","QAV_CLOSE_MIC_SUC","QAV_CLOSE_MIC_FAIL","QAV_CLOSE_MIC_NODEV","QAV_OPEN_PLAYER_SUC","QAV_OPEN_PLAYER_FAIL","QAV_OPEN_PLAYER_NODEV","QAV_CLOSE_PLAYER_SUC","QAV_CLOSE_PLAYER_FAIL","QAV_CLOSE_PLAYER_NODEV","QAV_MUTE_AUDIO_SUC","QAV_MUTE_AUDIO_FAIL","QAV_UNMUTE_AUDIO_SUC","QAV_UNMUTE_AUDIO_FAIL","REC_SAVE_FILE_CANCEL","GET_MIC_SUC","GET_MIC_FAIL","DS_START_SUC","DS_START_FAIL","DS_STOP_SUC","DS_STOP_FAIL","AUD_START_SUC","AUD_START_FAIL","AUD_STOP_SUC","AUD_STOP_FAIL","AUD_DATA","SS_DATA","MOV_DATA","PEN_START_SUC","PEN_START_FAIL","PEN_STOP_SUC","PEN_STOP_FAIL","PEN_VERSION","QAV_DEVICE_SUC","QAV_DEVICE_FAIL","CBD_QUERY_SUC","CBD_QUERY_FAIL","CBD_GET_SUC","CBD_GET_FAIL","FILE_GET_SUC","FILE_GET_FAIL","FILE_SET_SUC","FILE_SET_FAIL","RESTART_SUC","RESTART_FAIL","GET_CAM_SUC","GET_CAM_FAIL","CAM_START_SUC","CAM_START_FAIL","CAM_STOP_SUC","CAM_STOP_FAIL","SWITCH_SCENE_SUC","SWITCH_SCENE_FAIL","PUSH_STREAM_FAIL","SHOW_UI_SUC","SET_VIDEO_PARAM_SUC","SET_VIDEO_PARAM_FAIL","GET_VIDEO_PARAM_SUC","GET_VIDEO_PARAM_FAIL","START_RECORD_SUC","START_RECORD_FAIL","STOP_RECORD_SUC","STOP_RECORD_FAIL","START_PUSH_SUC","START_PUSH_FAIL","STOP_PUSH_SUC","STOP_PUSH_FAIL","GET_RTMP_PORT_SUC","GET_RTMP_PORT_FAIL","SET_MIC_VOL_SUC","SET_MIC_VOL_FAIL","GET_MIC_VOL_SUC","GET_MIC_VOL_FAIL","RTMP_CONNECTING","RTMP_CONNECT_SUC","RTMP_CONNECT_FAIL","RTMP_CONNECT_CLOSED"],C=null,O="",u=[],T=[],I="",U="",d="",R=null,g="127.0.0.1",p=8090,L=0;f.infos={movieInfo:C,versionInfo:O,cameraInfo:u,micInfo:T,videoInfo:I,rtmpPort:U,micVol:d},f.MOVIE_INFO_CHANGE="MOVIE_INFO_CHANGE",f.VERSION_INFO_CHANGE="VERSION_INFO_CHANGE",f.CAMERA_INFO_CHANGE="CAMERA_INFO_CHANGE",f.MIC_INFO_CHANGE="MIC_INFO_CHANGE",f.VIDEO_INFO_CHANGE="VIDEO_INFO_CHANGE",f.RTMP_PORT_CHANGE="RTMP_PORT_CHANGE",f.MIC_VOL_CHANGE="MIC_VOL_CHANGE",f.SS_START="SS_START",f.SS_STOP="SS_STOP",f.OPEN="OPEN",f.CLOSE="CLOSE",f.ERROR="ERROR",f.getRTMPPort=function(){o("get_rtmp_port")},f.getMicInfo=function(){o("get_mic")},f.getCamInfo=function(){o("get_cam")},f.getMicVol=function(){o("get_mic_vol")},f.start=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"127.0.0.1",t=arguments[1];g=e,p=t,S()},f.stop=function(){s()},f.startShareScreen=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";o("ss_start",e)},f.stopShareScreen=function(){o("ss_stop")},t.default=f},function(e,t,_){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(){console.log("发起屏幕"),i.default.startShareScreen("rtmp://123.56.205.116/live/alexwang")}function r(){console.log("关闭屏幕"),i.default.stopShareScreen()}var o=_(2),i=n(o);i.default.on(i.default.SS_START,function(){console.log("SS_START"),setTimeout(function(){r()},200)}),i.default.on(i.default.SS_STOP,function(){console.log("SS_STOP"),setTimeout(function(){a()},500)}),i.default.on(i.default.ERROR,function(){console.log("ERROR")}),i.default.on(i.default.CLOSE,function(){console.log("CLOSE")}),i.default.on(i.default.OPEN,function(){console.log("OPEN"),a()}),i.default.start("192.168.222.216",8090)}])}); \ No newline at end of file diff --git a/package.json b/package.json index 6de27dd..3b48ea2 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,9 @@ ], "author": "AlexWang", "license": "MIT", - "dependencies": {}, + "dependencies": { + "buffer": "^5.0.6" + }, "wbp": { "project": "umd", "entries": { @@ -25,4 +27,4 @@ "source": "src/", "build": "dist/" } -} \ No newline at end of file +} diff --git a/src/Emiter.js b/src/Emiter.js new file mode 100644 index 0000000..a72e5cc --- /dev/null +++ b/src/Emiter.js @@ -0,0 +1,59 @@ +// ////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016-present All Rights Reserved. +// Licensed under the Apache License, Version 2.0 (the "License"); +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Github Home: https://github.com/AlexWang1987 +// Author: AlexWang +// Date: 2017-05-20 11:55:44 +// QQ Email: 1669499355@qq.com +// Last Modified time: 2017-05-20 11:55:45 +// Description: saas-Emiter +// +// ////////////////////////////////////////////////////////////////////////////// + +export default class Emiter { + constructor() { + this.MAPS = {}; + } + on(eid, elistener) { + if (eid && elistener) { + let stub = this.MAPS[eid]; + if (!stub) { + return this.MAPS[eid] = [elistener]; + } + stub.push(elistener); + } + } + off(eid, elistener) { + if (eid) { + let stub = this.MAPS[eid]; + if (stub) { + if (elistener) { + return stub.splice(stub.indexOf(elistener), 1); + } + stub.length = 0; + } + } + } + emit(eid, data) { + if (eid) { + //eid=* broadcast + let asteriskStub = this.MAPS['*']; + if (asteriskStub && asteriskStub.length) { + asteriskStub.forEach(function (elistener) { + elistener(eid, data); + }) + } + + // eid= normal + let stub = this.MAPS[eid]; + if (stub && stub.length) { + stub.forEach(function (elistener) { + elistener(data); + }); + } + } + } +} diff --git a/src/Loger.js b/src/Loger.js new file mode 100644 index 0000000..5ac938c --- /dev/null +++ b/src/Loger.js @@ -0,0 +1,82 @@ +// ////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016-present All Rights Reserved. +// Licensed under the Apache License, Version 2.0 (the "License"); +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Github Home: https://github.com/AlexWang1987 +// Author: AlexWang +// Date: 2016-08-27 22:58:47 +// QQ Email: 1669499355@qq.com +// Last Modified time: 2017-05-20 11:56:07 +// Description: LiveClass-Loger +// +// ////////////////////////////////////////////////////////////////////////////// + +class Loger { + constructor(info) { + this.info = info || ''; + this.id = this.initId(); + } + + initId() { + const infoType = this.info.constructor.name.toLowerCase(); + if (infoType === 'string') { + return this.info; + } + if (infoType === 'object') { + return this.info.mid || ''; + } + return ''; + } + + log(...msg) { + this._log(Loger.LOG, msg); + } + + warn(...msg) { + this._log(Loger.WARN, msg); + } + + error(...msg) { + this._log(Loger.ERROR, msg); + } + + _log(type, msg) { + msg = JSON.stringify(msg); + + let logMsg = `${this.id} -> ${msg}`; + if (type >= Loger.logLevel) { + switch (type) { + case Loger.LOG: + console.log(logMsg); + break; + case Loger.WARN: + console.warn(logMsg); + break; + case Loger.ERROR: + console.error(logMsg); + break; + } + } + } +} + +Loger.LOG = 0; +Loger.WARN = 1; +Loger.ERROR = 2; +Loger.NO = Infinity; +Loger.logLevel = Loger.LOG; + +export default { + getLoger: function getLoger(info) { + return new Loger(info); + }, + setLogLevel: function setLogLevel(logLevel) { + Loger.logLevel = logLevel; + }, + LOG: Loger.LOG, + WARN: Loger.WARN, + ERROR: Loger.ERROR, + NO: Loger.NO, +}; diff --git a/src/Socket.js b/src/Socket.js new file mode 100644 index 0000000..28113e0 --- /dev/null +++ b/src/Socket.js @@ -0,0 +1,153 @@ +// ////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016-present +// All Rights Reserved. +// +// Author: AlexWang +// Date: 2016-08-27 21:40:49 +// Last Modified by: AlexWang +// Last Modified time: 2017-05-20 12:38:31 +// QQ Email: 1669499355@qq.com +// Description: 底层Socket管理器,保持一直在线及异常重连. +// +// ////////////////////////////////////////////////////////////////////////////// + +import Emiter from 'Emiter'; +import Loger from 'Loger'; +let loger = Loger.getLoger('EverSocket'); + +class EverSocket extends Emiter { + constructor() { + super(); + this._connected = false; + this._lastActiveTime = 0; + this._enableEverSocket = false; + } + + begin(ip, port) { + loger.log('开始WebSocket应用.'); + this._enableEverSocket = true; + this.wsURL = 'ws://' + ip + ':' + port; + this._newConnection(); + } + + end() { + loger.log('停止WebSocket应用.'); + this._clear(); + } + + get connected() { + return this._connected; + } + + send(data) { + if (this._connected) { + loger.log('SEND MESSAGE---->', data); + this.websocket.send(data); + } else { + loger.warn('WebSocket未建立连接.消息忽略'); + } + } + + _setConnected(isConn = true) { + this._connected = isConn; + if (this._connected) { + this.emit(EverSocket.OPEN); + } else { + this.emit(EverSocket.CLOSED); + } + } + + _newConnection() { + this.websocket = new WebSocket(this.wsURL); + this.websocket.binaryType = 'arraybuffer'; + this.websocket.onopen = this._onOpen.bind(this); + this.websocket.onclose = this._onClose.bind(this); + this.websocket.onerror = this._onError.bind(this); + this.websocket.onmessage = this._onMessage.bind(this); + } + + _reConnection() { + this._clear(); + this.reConnectionTimeout = window.setTimeout(() => { + loger.log('WebSocket重新建立.'); + window.clearTimeout(this.reConnectionTimeout); + this._newConnection(); + }, EverSocket.RECONN_INTERVAL); + } + + _clear() { + loger.log('WebSocket,Timers销毁'); + window.clearInterval(this.pingTimer); + window.clearInterval(this.pongTimer); + this.websocket.onopen = undefined; + this.websocket.onclose = undefined; + this.websocket.onerror = undefined; + this.websocket.onmessage = undefined; + try { + this.websocket.close(); + } catch (e) { + loger.log('ignore errors'); + } + this.websocket = undefined; + this._enableEverSocket = false; + this._setConnected(false); + } + + _onOpen() { + loger.log('WebSocket建立成功', this.wsURL); + //this.pingTimer = window.setInterval(this._sendPingHandler.bind(this), EverSocket.PING_INTERVAL); + //this.pongTimer = window.setInterval(this._checkPongHandler.bind(this), EverSocket.PONG_INTERVAL); + this._setConnected(); + } + + _onClose(closeEvent) { + loger.log(`WebSocket连接断开 CODE:${closeEvent.code} REASON:${closeEvent.reason} CLEAN: ${closeEvent.wasClean}`, this.wsURL); + this._reConnection(); + } + + _onError() { + loger.log('WebSocket错误出现'); + this._connected = false; + this._reConnection(); + } + + _onMessage(messageEvent) { + loger.log('<----RECEIVE MESSAGE'); + this._lastActiveTime = Date.now(); + const bufferData = messageEvent.data; + if (bufferData.byteLength > 0) { + this.emit(EverSocket.MESSAGE, bufferData); + } + } + + _sendPingHandler() { + if (this._connected) { + this.websocket.send(new ArrayBuffer); + } else { + this._reConnection(); + } + } + + _checkPongHandler() { + let pongTime = Date.now(); + if (this._lastActiveTime && + this._lastActiveTime >= pongTime - EverSocket.PONG_INTERVAL && + this._lastActiveTime <= pongTime + ) {} else { + loger.warn('---服务器PINGPONG超时-----'); + this._reConnection(); + } + } +} + +EverSocket.prototype.PONG_INTERVAL = EverSocket.PONG_INTERVAL = 5000; +EverSocket.prototype.PING_INTERVAL = EverSocket.PING_INTERVAL = 3000; +EverSocket.prototype.RECONN_INTERVAL = EverSocket.RECONN_INTERVAL = 2000; +EverSocket.prototype.CONNECTING = EverSocket.CONNECTING = 0; +EverSocket.prototype.OPEN = EverSocket.OPEN = 1; +EverSocket.prototype.CLOSING = EverSocket.CLOSING = 2; +EverSocket.prototype.CLOSED = EverSocket.CLOSED = 3; +EverSocket.prototype.MESSAGE = EverSocket.MESSAGE = 4; + +export default new EverSocket(); diff --git a/src/main.js b/src/main.js index 90fbf5d..5397191 100644 --- a/src/main.js +++ b/src/main.js @@ -6,15 +6,592 @@ // // Github Home: https://github.com/AlexWang1987 // Author: AlexWang -// Date: 2017-03-17 11:13:14 +// Date: 2017-05-20 16:54:13 // QQ Email: 1669499355@qq.com -// Last Modified time: 2017-03-17 11:13:36 -// Description: wbp-init-umd-main +// Last Modified time: 2017-05-26 18:44:59 +// Description: saas-main // // ////////////////////////////////////////////////////////////////////////////// -// only for hot reload -if (module && module.hot) { - module.hot.accept(); +import Emiter from './Emiter.js'; +const e = new Emiter(); + +function utf16to8(str) { + var out, i, len, c; + + len = str.length; + out = new Uint8Array(len * 3); + var utf8len = 0; + for (i = 0; i < len; i++) { + c = str.charCodeAt(i); + if ((c >= 0x0001) && (c <= 0x007F)) { + out[utf8len++] = c; + } else if (c > 0x07FF) { + out[utf8len++] = (0xE0 | ((c >> 12) & 0x0F)); + out[utf8len++] = (0x80 | ((c >> 6) & 0x3F)); + out[utf8len++] = (0x80 | ((c >> 0) & 0x3F)); + } else { + out[utf8len++] = (0xC0 | ((c >> 6) & 0x1F)); + out[utf8len++] = (0x80 | ((c >> 0) & 0x3F)); + } + } + return new Uint8Array(out.buffer, 0, utf8len); +} + +function utf8to16(str) { + var out, i, len, c; + var char2, char3; + + out = ""; + len = str.length; + i = 0; + while (i < len) { + c = str[i++]; + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + // 0xxxxxxx + out += String.fromCharCode(c); + break; + case 12: + case 13: + // 110x xxxx 10xx xxxx + char2 = str[i++]; + out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); + break; + case 14: + // 1110 xxxx 10xx xxxx 10xx xxxx + char2 = str[i++]; + char3 = str[i++]; + out += String.fromCharCode(((c & 0x0F) << 12) | + ((char2 & 0x3F) << 6) | + ((char3 & 0x3F) << 0)); + break; + } + } + + return out; +} + +const CODE = [ + "MOV_START_SUC", + "MOV_START_FAIL", + "MOV_STOP_SUC", + "MOV_STOP_FAIL", + "MOV_PAUSE_SUC", + "MOV_PAUSE_FAIL", + "MOV_RESUME_SUC", + "MOV_RESUME_FAIL", + "MOV_SEEK_SUC", + "MOV_SEEK_FAIL", + "MOV_PROPERTY", + "SS_START_SUC", + "SS_START_FAIL", + "SS_STOP_SUC", + "SS_STOP_FAIL", + "REC_START_SUC", + "REC_START_FAIL", + "REC_STOP_SUC", + "REC_STOP_FAIL", + "REC_PAUSE_SUC", + "REC_PAUSE_FAIL", + "REC_RESUME_SUC", + "REC_RESUME_FAIL", + "MOV_PLAY_FINISH", + "MOV_VERSION", + "SS_VERSION", + "REC_VERSION", + "MOV_SELECT_FILE_CANCEL", + "QAV_LOGIN_SUC", + "QAV_LOGIN_FAIL", + "QAV_LOGOUT_SUC", + "QAV_LOGOUT_FAIL", + "QAV_ENTERROOM_SUC", + "QAV_ENTERROOM_FAIL", + "QAV_LEAVEROOM_SUC", + "QAV_LEAVEROOM_FAIL", + "QAV_OPEN_MIC_SUC", + "QAV_OPEN_MIC_FAIL", + "QAV_OPEN_MIC_NODEV", + "QAV_CLOSE_MIC_SUC", + "QAV_CLOSE_MIC_FAIL", + "QAV_CLOSE_MIC_NODEV", + "QAV_OPEN_PLAYER_SUC", + "QAV_OPEN_PLAYER_FAIL", + "QAV_OPEN_PLAYER_NODEV", + "QAV_CLOSE_PLAYER_SUC", + "QAV_CLOSE_PLAYER_FAIL", + "QAV_CLOSE_PLAYER_NODEV", + "QAV_MUTE_AUDIO_SUC", + "QAV_MUTE_AUDIO_FAIL", + "QAV_UNMUTE_AUDIO_SUC", + "QAV_UNMUTE_AUDIO_FAIL", + "REC_SAVE_FILE_CANCEL", + "GET_MIC_SUC", + "GET_MIC_FAIL", + "DS_START_SUC", + "DS_START_FAIL", + "DS_STOP_SUC", + "DS_STOP_FAIL", + "AUD_START_SUC", + "AUD_START_FAIL", + "AUD_STOP_SUC", + "AUD_STOP_FAIL", + "AUD_DATA", + "SS_DATA", + "MOV_DATA", + "PEN_START_SUC", + "PEN_START_FAIL", + "PEN_STOP_SUC", + "PEN_STOP_FAIL", + "PEN_VERSION", + "QAV_DEVICE_SUC", + "QAV_DEVICE_FAIL", + "CBD_QUERY_SUC", + "CBD_QUERY_FAIL", + "CBD_GET_SUC", + "CBD_GET_FAIL", + "FILE_GET_SUC", + "FILE_GET_FAIL", + "FILE_SET_SUC", + "FILE_SET_FAIL", + "RESTART_SUC", + "RESTART_FAIL", + "GET_CAM_SUC", + "GET_CAM_FAIL", + "CAM_START_SUC", + "CAM_START_FAIL", + "CAM_STOP_SUC", + "CAM_STOP_FAIL", + "SWITCH_SCENE_SUC", + "SWITCH_SCENE_FAIL", + "PUSH_STREAM_FAIL", + "SHOW_UI_SUC", + "SET_VIDEO_PARAM_SUC", + "SET_VIDEO_PARAM_FAIL", + "GET_VIDEO_PARAM_SUC", + "GET_VIDEO_PARAM_FAIL", + "START_RECORD_SUC", + "START_RECORD_FAIL", + "STOP_RECORD_SUC", + "STOP_RECORD_FAIL", + "START_PUSH_SUC", + "START_PUSH_FAIL", + "STOP_PUSH_SUC", + "STOP_PUSH_FAIL", + "GET_RTMP_PORT_SUC", + "GET_RTMP_PORT_FAIL", + "SET_MIC_VOL_SUC", + "SET_MIC_VOL_FAIL", + "GET_MIC_VOL_SUC", + "GET_MIC_VOL_FAIL", + "RTMP_CONNECTING", + "RTMP_CONNECT_SUC", + "RTMP_CONNECT_FAIL", + "RTMP_CONNECT_CLOSED" +]; + +function sendCommand(cmdName, cmdParams = '') { + var cmd = new Object(); + cmd.data_len = 0; + cmd.data = ""; + cmd.name = cmdName; + + if (cmdName == "mov_start") { + cmd.type = 1; + } else if (cmdName == "mov_stop") { + cmd.type = 2; + } else if (cmdName == "mov_pause") { + cmd.type = 3; + // var pos = document.getElementById("mov_pos").value; + pos = cmdParams; + if (pos.length > 0) { + cmd.data_len = 4; + var buffer = new ArrayBuffer(cmd.data_len); + var Uint32param = new Uint32Array(buffer, 0, 1); + Uint32param[0] = parseInt(pos); + cmd.data = new Uint8Array(buffer, 0, 4); + } + } else if (cmdName == "mov_resume") { + cmd.type = 4; + } else if (cmdName == "mov_seek") { + cmd.type = 5; + // var pos = document.getElementById("mov_pos").value; + pos = cmdParams; + if (pos.length > 0) { + cmd.data_len = 4; + var buffer = new ArrayBuffer(cmd.data_len); + var Uint32param = new Uint32Array(buffer, 0, 1); + Uint32param[0] = parseInt(pos); + cmd.data = new Uint8Array(buffer, 0, 4); + } + } else if (cmdName == "ss_start") { + cmd.type = 6; + // var param = document.getElementById("ss_start_input"); + // param = cmdParams; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "ss_stop") { + cmd.type = 7; + } else if (cmdName == "ss_version") { + cmd.type = 14; + } else if (cmdName == "get_mic") { + cmd.type = 26; + } else if (cmdName == "ds_start") { + cmd.type = 27; + cmd.data_len = 4 * 6 + 256 + 256; + var buffer = new ArrayBuffer(cmd.data_len); + var int32param = new Uint32Array(buffer, 0, 6); + // var coordstr = document.getElementById("ds_start_coord").value; + coordstr = cmdParams; + var coordarray = coordstr.split(","); + if (coordarray.length == 4) { + int32param[0] = parseInt(coordarray[0]); + int32param[1] = parseInt(coordarray[1]); + int32param[2] = parseInt(coordarray[2]); + int32param[3] = parseInt(coordarray[3]); + } else { + //promopt error parameter + return; // + } + + var window_name_buffer = new Uint8Array(buffer, 24, 256); + // var window_name = document.getElementById("ds_start_window_name").value; + window_name = cmdParams; + //var window_name_array = new TextEncoder("utf-8").encode(window_name); + var window_name_array = utf16to8(window_name); + for (var i = 0; i < window_name_array.length; i++) { + window_name_buffer[i] = window_name_array[i]; + } + + int32param[4] = window_name_array.length; + int32param[5] = 0; + + var url_name = new Uint8Array(buffer, 24 + 256, 256); //todo: set push url + cmd.data = new Uint8Array(buffer, 0, cmd.data_len); + _sendCommand(cmd); + return; + } else if (cmdName == "ds_stop") { + cmd.type = 28; + } else if (cmdName == "aud_start") { + cmd.type = 29; + cmd.data_len = 4 + 4 + 256 + 256; + var buffer = new ArrayBuffer(cmd.data_len); + var mic_name_len = new Uint32Array(buffer, 0, 1); + var sel_mic_name = cmdParams; + mic_name_len[0] = sel_mic_name.length; + var urlname_len = new Uint32Array(buffer, 4, 1); + urlname_len[0] = 0; + var mic_name = new Uint8Array(buffer, 8, 256); + var mic_name_array = utf16to8(sel_mic_name); + for (var i = 0; i < mic_name_array.length; i++) { + mic_name[i] = mic_name_array[i]; + } + var url_name = new Uint8Array(buffer, 8 + 256, 256); + cmd.data = new Uint8Array(buffer, 0, cmd.data_len); + _sendCommand(cmd); + return; + } else if (cmdName == "aud_stop") { + cmd.type = 30; + } else if (cmdName == "get_cam") { + cmd.type = 41; + } else if (cmdName == "cam_start") { + cmd.type = 42; + cmd.data_len = 4 + 4 + 256 + 256; + var buffer = new ArrayBuffer(cmd.data_len); + var cam_name_len = new Uint32Array(buffer, 0, 1); + var sel_cam_name = cmdParams; + cam_name_len[0] = sel_cam_name.length; + var urlname_len = new Uint32Array(buffer, 4, 1); + urlname_len[0] = 0; + var cam_name = new Uint8Array(buffer, 8, 256); + //var cam_name_array = new TextEncoder("utf-8").encode(sel_cam_name); + var cam_name_array = utf16to8(sel_cam_name); + for (var i = 0; i < cam_name_array.length; i++) { + cam_name[i] = cam_name_array[i]; + } + var url_name = new Uint8Array(buffer, 8 + 256, 256); //todo: set push url + cmd.data = new Uint8Array(buffer, 0, cmd.data_len); + _sendCommand(cmd); + return; + } else if (cmdName == "cam_stop") { + cmd.type = 43; + } else if (cmdName == "set_videoparam") { + cmd.type = 46; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "get_videoparam") { + cmd.type = 47; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "start_record") { + cmd.type = 48; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "stop_record") { + cmd.type = 49; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "start_push") { + cmd.type = 50; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "stop_push") { + cmd.type = 51; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "get_rtmp_port") { + cmd.type = 52; + } else if (cmdName == "set_mic_vol") { + cmd.type = 53; + cmd.data = utf16to8(cmdParams); + cmd.data_len = cmd.data.length; + } else if (cmdName == "get_mic_vol") { + cmd.type = 54; + } + _sendCommand(cmd); +} + +function _sendCommand(wsCmd) { + var cmd_buf_len = 2 + 1 * 2 + 4 + wsCmd.data_len; + var buffer = new ArrayBuffer(cmd_buf_len); + var cmd = new Uint16Array(buffer, 0, 1); + var byte_order = new Uint8Array(buffer, 2, 1); + var data_len = new Uint32Array(buffer, 4, 1); + + cmd[0] = wsCmd.type; + byte_order[0] = 0; + data_len[0] = wsCmd.data_len; + + if (wsCmd.data_len > 0) { + var data_buf = new Uint8Array(buffer, 8, wsCmd.data_len); + for (var i = 0; i < wsCmd.data_len; i++) { + data_buf[i] = wsCmd.data[i]; + } + } + + if (ws) ws.send(buffer); +} + +let movieInfo = null; +let versionInfo = ''; +let cameraInfo = []; +let micInfo = []; +let videoInfo = ''; +let rtmpPort = ''; +let micVol = ''; +let ws = null; +let host = '127.0.0.1'; +let port = 8090; +let wstimer = 0; + +function clear() { + try { + if (ws) { + ws.close(); + ws = ws.onopen = ws.onclose = ws.onerror = ws.onmessage = null; + e.emit(e.CLOSE); + } + } catch (er) { + console.log(er); + } +} + +function stop() { + clear(); +} + +function start() { + if (ws) { + clear(); + } + ws = new WebSocket('ws://' + host + ':' + port); + wstimer = setTimeout(() => { + clearTimeout(wstimer); + clear(); + }, 1500) + ws.timeout = 1500; + ws.binaryType = 'arraybuffer'; + ws.onopen = () => { + clearTimeout(wstimer); + sendCommand("get_rtmp_port"); + sendCommand("get_mic"); + sendCommand("get_cam"); + sendCommand("get_mic_vol"); + e.emit(e.OPEN); + } + + ws.onclose = () => { + clear(); + }; + + ws.onerror = () => { + clear(); + } + + ws.onmessage = (evt) => { + const msg = evt.data; + if (typeof (evt.data) === "string") { + console.log('on message [string] ignore.'); + } else { + var dv = new DataView(msg); + var result = dv.getUint16(0, true); + console.log('onmessage code->', result); + var byte_order = dv.getUint8(2, true); + var data_len = dv.getUint32(4, true); + if (result >= 0 && result < CODE.length) { + var resultString = CODE[result]; + } else {} + if (0 == result || 6 == result || 8 == result) { //mov_start,mov_pause,mov_seek success + console.log('mov_start,mov_pause,mov_seek success'); + //playRTMPStream("rtmp://127.0.0.1:" + rtmp_port + "/live/ms"); + } else if (10 == result) { //movie property + if (data_len > 7 * 4 + 8) { + var uint32params = new Uint32Array(msg, 8, 8); + var info = "width:" + uint32params[0] + " height:" + uint32params[1]; + info = "framerate:" + uint32params[2] + " duration:" + uint32params[3]; + info = "playpos:" + uint32params[4] + " filesize:" + uint32params[5]; + movieInfo = info; + var file_name_len = uint32params[6]; + var file_name = new Uint8Array(msg, 40, file_name_len); + var file_name_string = utf8to16(file_name); + movieInfo.filename = file_name_string; + + e.emit(e.MOVIE_INFO_CHANGE, movieInfo); + } + } else if (11 == result) { + console.log('ss_start success'); + e.emit(e.SS_START); + } else if (24 <= result && 26 >= result) { + if (data_len >= 4) { + var version = dv.getUint32(8, true); + versionInfo = version.toString(); + e.emit(e.VERSION_INFO_CHANGE, versionInfo); + } + } else if (55 == result) { //ds_start success + console.log('ds_start success'); + //playRTMPStream("rtmp://127.0.0.1:" + rtmp_port + "/live/ds"); + } else if (59 == result) { //as start success + console.log('as start success'); + //playRTMPStream("rtmp://127.0.0.1:" + rtmp_port + "/live/as"); + } else if (result == 83) { //get camera sucess + console.log('get camera sucess'); + if (data_len > 4) { + var cam_num = dv.getUint32(8, true); + var offset = 12; + cameraInfo.length = 0; + for (var i = 0; i < cam_num; i++) { + var cam_name_len = dv.getUint32(offset, true); + offset += 4; + var cam_name = new Uint8Array(msg, offset, cam_name_len - 1); + offset += cam_name_len; + //var data_sting = new TextDecoder("utf-8").decode(cam_name); + var data_sting = utf8to16(cam_name); + cameraInfo.push(data_sting) + } + e.emit(e.CAMERA_INFO_CHANGE, cameraInfo); + } + } else if (53 == result) { //get mic success + if (data_len > 4) { + var mic_num = dv.getUint32(8, true); + var offset = 12; + micInfo.length = 0; + for (var i = 0; i < mic_num; i++) { + var mic_name_len = dv.getUint32(offset, true); + offset += 4; + var mic_name = new Uint8Array(msg, offset, mic_name_len - 1); + offset += mic_name_len; + //var data_sting = new TextDecoder("utf-8").decode(mic_name); + var data_sting = utf8to16(mic_name); + micInfo.push(data_sting); + } + e.emit(e.MIC_INFO_CHANGE, micInfo); + } + } else if (85 == result) { //cam_share success + console.log('cam_share success'); + //playRTMPStream("rtmp://127.0.0.1:" + rtmp_port + "/live/cs"); + } else if (95 == result) { //get_videoparam success + console.log('get_videoparam success'); + var data = new Uint8Array(msg, 8, msg.byteLength - 8 - 1); + //var data_sting = new TextDecoder("utf-8").decode(data); + var data_sting = utf8to16(data); + videoInfo = data_sting; + e.emit(e.VIDEO_INFO_CHANGE, videoInfo); + } else if (105 == result) { //get_rtmp_port_success + console.log('get_rtmp_port_success'); + var data = new Uint8Array(msg, 8, msg.byteLength - 8 - 1); + //var data_sting = new TextDecoder("utf-8").decode(data); + var data_sting = utf8to16(data); + rtmpPort = data_sting; + e.emit(e.RTMP_PORT_CHANGE, rtmpPort); + } else if (109 == result) { //get_mic_vol success + console.log('get_mic_vol success'); + var data = new Uint8Array(msg, 8, msg.byteLength - 8 - 1); + //var data_sting = new TextDecoder("utf-8").decode(data); + var data_sting = utf8to16(data); + micVol = data_sting; + e.emit(e.MIC_VOL_CHANGE, micVol); + } else if (111 <= result && 114 >= result) { + var data = new Uint8Array(msg, 8, msg.byteLength - 8); + var url = utf8to16(data); + console.log('url->', url); + } else if (13 == result) { + e.emit(e.SS_STOP); + } else { + var data = new Uint8Array(msg, 8, msg.byteLength - 8); + //var data_sting = new TextDecoder("utf-8").decode(data); + var data_sting = utf8to16(data); + console.log('data ->', data_sting); + } + } + } +} + +e.infos = { movieInfo, versionInfo, cameraInfo, micInfo, videoInfo, rtmpPort, micVol } +e.MOVIE_INFO_CHANGE = 'MOVIE_INFO_CHANGE'; +e.VERSION_INFO_CHANGE = 'VERSION_INFO_CHANGE'; +e.CAMERA_INFO_CHANGE = 'CAMERA_INFO_CHANGE'; +e.MIC_INFO_CHANGE = 'MIC_INFO_CHANGE'; +e.VIDEO_INFO_CHANGE = 'VIDEO_INFO_CHANGE'; +e.RTMP_PORT_CHANGE = 'RTMP_PORT_CHANGE'; +e.MIC_VOL_CHANGE = 'MIC_VOL_CHANGE'; +e.SS_START = 'SS_START'; +e.SS_STOP = 'SS_STOP'; +e.OPEN = 'OPEN'; +e.CLOSE = 'CLOSE'; +e.ERROR = 'ERROR'; + +e.getRTMPPort = () => { + sendCommand('get_rtmp_port'); +} +e.getMicInfo = () => { + sendCommand('get_mic'); +} +e.getCamInfo = () => { + sendCommand('get_cam'); +} +e.getMicVol = () => { + sendCommand('get_mic_vol'); +} +e.start = (_host = '127.0.0.1', _port) => { + host = _host; + port = _port; + start(); +} +e.stop = () => { + stop(); +} +e.startShareScreen = (params = '') => { + sendCommand('ss_start', params); +} +e.stopShareScreen = () => { + sendCommand('ss_stop'); } +export default e; diff --git a/test/test.js b/test/test.js index eaa7f53..59f8959 100644 --- a/test/test.js +++ b/test/test.js @@ -1,20 +1,83 @@ -// ////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2016-present All Rights Reserved. -// Licensed under the Apache License, Version 2.0 (the "License"); -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Github Home: https://github.com/AlexWang1987 -// Author: AlexWang -// Date: 2017-03-17 11:13:11 -// QQ Email: 1669499355@qq.com -// Last Modified time: 2017-03-17 11:13:45 -// Description: wbp-init-umd-test -// -// ////////////////////////////////////////////////////////////////////////////// - -// only for hot reload -if (module && module.hot) { - module.hot.accept(); +import ss from 'main.js'; + +// 媒体信息 +ss.on(ss.MOVIE_INFO_CHANGE, (d) => { + console.log('MOVIE_INFO_CHANGE->', d); +}) + +// 版本信息 +ss.on(ss.VERSION_INFO_CHANGE, (d) => { + console.log('VERSION_INFO_CHANGE->', d); +}) + +// 本地摄像头设备 +ss.on(ss.CAMERA_INFO_CHANGE, (d) => { + console.log('CAMERA_INFO_CHANGE->', d); +}) + +// 本地麦克风设备 +ss.on(ss.MIC_INFO_CHANGE, (d) => { + console.log('MIC_INFO_CHANGE->', d); +}) + +// 视频信息 +ss.on(ss.VIDEO_INFO_CHANGE, (d) => { + console.log('VIDEO_INFO_CHANGE->', d); +}) + +// 本地RTMP服务端口 +ss.on(ss.RTMP_PORT_CHANGE, (d) => { + console.log('RTMP_PORT_CHANGE->', d); +}) + +// 麦克风音量 +ss.on(ss.MIC_VOL_CHANGE, (d) => { + console.log('MIC_VOL_CHANGE->', d); +}) + +function startSS() { + // 发起屏幕共享[推送地址可选] + console.log('发起屏幕'); + ss.startShareScreen('rtmp://123.56.205.116/live/alexwang'); } +function stopSS() { + // 关闭屏幕共享 + console.log('关闭屏幕'); + //ss.stopShareScreen(); +} + +// 屏幕共享开始 +ss.on(ss.SS_START, () => { + console.log('SS_START'); + setTimeout(() => { + stopSS(); + }, 200) +}) + +// 屏幕共享关闭 +ss.on(ss.SS_STOP, () => { + console.log('SS_STOP'); + setTimeout(() => { + startSS(); + }, 500) +}) + +// 发生错误 +ss.on(ss.ERROR, () => { + console.log('ERROR'); +}) + +// 服务关闭 +ss.on(ss.CLOSE, () => { + console.log('CLOSE'); +}) + +// 服务开启 +ss.on(ss.OPEN, () => { + console.log('OPEN'); + startSS(); +}) + +// 连接本地流媒体服务 +ss.start('192.168.222.216', 8090); diff --git a/webpack.config.umd.js b/webpack.config.umd.js index dc51324..1273b9d 100644 --- a/webpack.config.umd.js +++ b/webpack.config.umd.js @@ -1,5 +1,6 @@ module.exports = function (umdConf) { umdConf.devServer.host = '0.0.0.0'; + umdConf.devServer.port = '9000'; umdConf.output.publicPath = ''; umdConf.webpackFeatures.enableEntryHTML(); @@ -14,4 +15,3 @@ module.exports = function (umdConf) { }); } }; - -- libgit2 0.24.0