zmp-sdk
Version:
Zalo Mini App SDK
2 lines (1 loc) • 9.14 kB
JavaScript
import e from'./../external/@swc/helpers/src/_async_to_generator.mjs.js';import t from'./../external/@swc/helpers/src/_class_call_check.mjs.js';import{MPEEmitter as i}from"../common/eventEmitter.js";import n from"../utils/lodash.js";import{CameraEvents as a,FacingMode as r,PhotoFormat as s,PhotoQuality as o,StreamType as c}from"../types/media.js";import{__generator as d}from'./../external/tslib/tslib.es6.js';import{Events as u}from"../types/enum.js";var l={format:s.JPEG,quality:o.NORMAL,mirrored:!1,useVideoSourceSize:!1},h={width:1024,height:768,facingMode:r.FRONT,mirrored:!1,audio:!1,video:!0},v=function(){function o(e){var n,r,c,d,u,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,v=this;t(this,o),this._videoEnabled=!0,this._audioEnabled=null,this.tick=function(){if(v.haveVideoStream()&&v._userRequestFrameCallback){var e=v.getCanvas();if(v.drawFrame(),e){var t={data:e.toDataURL(s.PNG),width:e.width,height:e.height};i.getInstance().emit(a.OnFrameCallback,0,t),requestAnimationFrame(v.tick)}}},this._videoElement=e,this._mediaConstraints=null!=l?l:null,this._facingMode=null!==(n=null==l?void 0:l.facingMode)&&void 0!==n?n:h.facingMode,this._cameraList=[],this._stream=null,this._selectedDeviceId=null!==(r=null==l?void 0:l.deviceId)&&void 0!==r?r:"",this._canvasElement=null,this._ctx=null,this._hasUserMedia=!1,this._mirror=null!==(c=null==l?void 0:l.mirrored)&&void 0!==c?c:h.mirrored,this._userRequestFrameCallback=!1,this._audioEnabled=null!==(d=null==l?void 0:l.audio)&&void 0!==d?d:h.audio,this._videoEnabled=null!==(u=null==l?void 0:l.video)&&void 0!==u?u:h.video}var v=o.prototype;return v.on=function(e,t){i.getInstance().on(e,(function(e){t(e)})),e===a.OnFrameCallback&&(this._userRequestFrameCallback=!0,this.tick())},v.off=function(e){i.getInstance().off(e),e===a.OnFrameCallback&&(this._userRequestFrameCallback=!1)},v.getQualityNumber=function(e){switch(e){case"high":return.9;case"normal":default:return.6;case"low":return.2}},v.getFacingMode=function(){return this._facingMode},v.getCameraList=function(){return this._cameraList},v.getCameraCount=function(){return this._cameraList.length},v.getSelectedDeviceId=function(){return this._selectedDeviceId},v.setDeviceId=function(t){var i=this;return e((function(){return d(this,(function(e){switch(e.label){case 0:return i._selectedDeviceId=t,i._hasUserMedia?[4,i.stream()]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))()},v.getVideoInputs=function(e){var t=this;return this._cameraList=[],e.forEach((function(e){"videoinput"===e.kind&&t._cameraList.push(e)})),this._cameraList},v.updateMediaConstraints=function(t){var i=this;return e((function(){var e,a,r,s,o,c;return d(this,(function(d){switch(d.label){case 0:return n.isEmpty(t)?[2]:JSON.stringify(t)!==JSON.stringify(i._mediaConstraints)?(i._mediaConstraints=t,i._facingMode=null!==(e=null==t?void 0:t.facingMode)&&void 0!==e?e:i._facingMode,i._selectedDeviceId=null!==(a=null==t?void 0:t.deviceId)&&void 0!==a?a:i._selectedDeviceId,i._mirror=null!==(r=null==t?void 0:t.mirrored)&&void 0!==r?r:i._mirror,i._audioEnabled=null!==(s=null==t?void 0:t.audio)&&void 0!==s?s:i._audioEnabled,i._videoEnabled=null!==(o=null==t?void 0:t.video)&&void 0!==o?o:i._videoEnabled,i._selectedDeviceId=null!==(c=null==t?void 0:t.deviceId)&&void 0!==c?c:i._selectedDeviceId,i._hasUserMedia?[4,i.stream()]:[3,2]):[2];case 1:d.sent(),d.label=2;case 2:return[2]}}))}))()},v.getCurrentMediaConstraints=function(){var e=this._mediaConstraints,t={};this._videoElement.width=(null==e?void 0:e.width)||this._videoElement.width||h.width,this._videoElement.height=(null==e?void 0:e.height)||this._videoElement.height||h.height;var i=!1!==this._videoEnabled,n=!1!==this._audioEnabled;return i&&(""==this._selectedDeviceId&&null!==this._facingMode?t.facingMode=this._facingMode:t.deviceId={exact:this._selectedDeviceId},t.width={exact:this._videoElement.width},t.height={exact:this._videoElement.height}),{video:!!i&&t,audio:n}},v.selectCamera=function(){var e=!0,t=!1,i=void 0;try{for(var n,a=this._cameraList[Symbol.iterator]();!(e=(n=a.next()).done);e=!0){var s=n.value;if(this._facingMode==r.FRONT&&s.label.toLowerCase().includes("front")||this._facingMode==r.BACK&&s.label.toLowerCase().includes("back")){this._selectedDeviceId=s.deviceId;break}}}catch(e){t=!0,i=e}finally{try{e||null==a.return||a.return()}finally{if(t)throw i}}},v.flip=function(){var t=this;return e((function(){return d(this,(function(e){switch(e.label){case 0:return t._facingMode=t._facingMode==r.FRONT?r.BACK:r.FRONT,t._videoElement.style.transform="",t.selectCamera(),t._hasUserMedia?[4,t.stream()]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))()},v.start=function(){var t=this;return e((function(){var n,r;return d(this,(function(s){return n=i.getInstance(),r=function(e){try{t._hasUserMedia&&t.stop()}catch(e){}},n.off(u.AppPaused,r),n.on(u.AppPaused,r),[2,new Promise((o=e((function(e,n){var r;return d(this,(function(s){switch(s.label){case 0:return s.trys.push([0,2,,3]),[4,t.stream()];case 1:return s.sent(),i.getInstance().emit(a.OnStartCallback,0),e(t._selectedDeviceId),[3,3];case 2:return r=s.sent(),n(r),[3,3];case 3:return[2]}}))})),function(e,t){return o.apply(this,arguments)}))];var o}))}))()},v.info=function(){var t=this;return e((function(){return d(this,(function(e){return[2,new Promise((function(e,i){navigator.mediaDevices.enumerateDevices().then((function(i){t.getVideoInputs(i),e(t._cameraList)})).catch((function(e){i(e)}))}))]}))}))()},v.stream=function(){var t=this;return e((function(){return d(this,(function(i){return[2,new Promise((function(i,n){try{t._stop();var a=t.getCurrentMediaConstraints();if(!1===a.video&&!a.audio)return void i(t._facingMode);navigator.mediaDevices.getUserMedia(a).then((r=e((function(e){return d(this,(function(n){switch(n.label){case 0:return[4,t.info()];case 1:return n.sent(),t.selectCamera(),t.handleUserMedia(null,e),i(t._facingMode),[2]}}))})),function(e){return r.apply(this,arguments)})).catch((function(e){t.handleUserMedia(e),n(e)}))}catch(e){n(e)}var r}))]}))}))()},v.handleUserMedia=function(e,t){var i=this;if(!e&&t){this._stream=t;try{this._videoElement&&(this._videoElement.srcObject=t,(this._facingMode==r.FRONT||this._mirror)&&(this._videoElement.style.transform="scale(-1,1)"),this._videoElement.onloadedmetadata=function(){i._userRequestFrameCallback&&i.tick()},this._videoElement.play().then((function(){i._hasUserMedia=!0})).catch((function(e){i._hasUserMedia=!1})))}catch(e){this._hasUserMedia=!1}}else this._hasUserMedia=!1},v.updateTrackEnable=function(t,i){var n=this;return e((function(){return d(this,(function(e){switch(e.label){case 0:if(t===c.VIDEO){if(n._videoEnabled===i)return[2];n._videoEnabled=i}else{if(n._audioEnabled===i)return[2];n._audioEnabled=i}return[4,n.stream()];case 1:return e.sent(),[2]}}))}))()},v.pause=function(t){var i=this;return e((function(){return d(this,(function(e){switch(e.label){case 0:return[4,i.updateTrackEnable(t,!1)];case 1:return e.sent(),[2]}}))}))()},v.resume=function(t){var i=this;return e((function(){return d(this,(function(e){switch(e.label){case 0:return[4,i.updateTrackEnable(t,!0)];case 1:return e.sent(),[2]}}))}))()},v.isUsing=function(){return this._hasUserMedia},v.stop=function(){this._stop(),i.getInstance().emit(a.OnStopCallback,0)},v._stop=function(){o.stopMediaStream(this._stream),this._hasUserMedia=!1},v.setFacingMode=function(e){this._facingMode=e},v.setMirror=function(e){this._mirror=e,this._videoElement&&(this._videoElement.style.transform=e?"scale(-1,1)":"")},v.takePhoto=function(e){if(!this._hasUserMedia)return null;var t=e||{},i=this.getCanvas(t);if(this.drawFrame(t),i){var n=t.format||l.format;return{data:i.toDataURL(n,this.getQualityNumber(t.quality)),width:i.width,height:i.height}}return null},v.haveVideoStream=function(){var e=this._videoElement;return e&&e.videoHeight>0&&this._hasUserMedia},v.getCanvas=function(e){var t=this._videoElement,i=e||{};if(!this.haveVideoStream())return null;if(!this._ctx){var n=t.videoWidth,a=t.videoHeight;if(!i.useVideoSourceSize){var r=n/a;a=(n=i.minScreenshotWidth||t.clientWidth)/r,i.minScreenshotHeight&&a<i.minScreenshotHeight&&(n=(a=i.minScreenshotHeight)*r)}this._canvasElement=document.createElement("canvas"),this._canvasElement.width=(null==i?void 0:i.width)||n,this._canvasElement.height=(null==i?void 0:i.height)||a,this._ctx=this._canvasElement.getContext("2d")}return this._canvasElement},v.drawFrame=function(e){var t=this._videoElement,i=e||{};if(t&&this._ctx&&this._canvasElement){var n=this._canvasElement,a=this._ctx;n.width=(null==i?void 0:i.width)||n.width,n.height=(null==i?void 0:i.height)||n.height,((null==i?void 0:i.mirrored)||this._mirror||this._facingMode===r.FRONT)&&(a.translate(n.width,0),a.scale(-1,1)),a.drawImage(t,0,0,n.width,n.height),((null==i?void 0:i.mirrored)||this._mirror||this._facingMode===r.FRONT)&&(a.scale(-1,1),a.translate(-n.width,0))}},o.stopMediaStream=function(e){e&&(e.getVideoTracks&&e.getAudioTracks?(e.getVideoTracks().map((function(t){e.removeTrack(t),t.stop()})),e.getAudioTracks().map((function(t){e.removeTrack(t),t.stop()}))):e.stop())},o}();export{v as ZMACameraImp};