@techsee/techsee-media-service 0.10.6 → 0.10.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,6 +37,7 @@ export declare enum KnownMediaStreamKind {
37
37
  }
38
38
  export declare enum KnownMediaStream {
39
39
  AGENT_AUDIO_STREAM = "DASHBOARD_AUDIO_STREAM",
40
+ OBSERVER_AUDIO_STREAM = "OBSERVER_AUDIO_STREAM",
40
41
  USER_AUDIO_STREAM = "MOBILE_CLIENT_AUDIO_STREAM",
41
42
  USER_VIDEO_STREAM = "MOBILE_CLIENT_VIDEO_STREAM",
42
43
  USER_SCREEN_SHARE_STREAM = "USER_SCREEN_SHARE_STREAM"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAEvD,oBAAY,oBAAoB;IAC5B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAClC;AAED,oBAAY,cAAc;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,WAAW;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAED,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;CAC/B;AAED,oBAAY,iBAAiB;IACzB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED,oBAAY,iBAAiB;IACzB,SAAS,cAAc;IACvB,KAAK,eAAe;CACvB;AAED,oBAAY,qBAAqB;IAC7B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;CAChC;AAED,oBAAY,oBAAoB;IAC5B,KAAK,UAAU;IACf,KAAK,UAAU;CAClB;AAED,oBAAY,gBAAgB;IACxB,kBAAkB,2BAA2B;IAC7C,iBAAiB,+BAA+B;IAChD,iBAAiB,+BAA+B;IAChD,wBAAwB,6BAA6B;CACxD;AAED,oBAAY,4BAA4B;IAEpC,gBAAgB,qBAAqB;IACrC,yBAAyB,8BAA8B;IACvD,gCAAgC,qCAAqC;IACrE,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,gBAAgB,qBAAqB;IACrC,0BAA0B,+BAA+B;CAC5D;AAED,oBAAY,2BAA2B;IACnC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CACpC;AAED,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,yCAAyC,KAAK,CAAC;AAC5D,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,eAAO,MAAM,yBAAyB,EAAE,qBAGvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAAqB,EAIhE,CAAC","file":"MediaConstants.d.ts","sourcesContent":["import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}
1
+ {"version":3,"sources":["../src/MediaConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAEvD,oBAAY,oBAAoB;IAC5B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAClC;AAED,oBAAY,cAAc;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,WAAW;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAED,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;CAC/B;AAED,oBAAY,iBAAiB;IACzB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED,oBAAY,iBAAiB;IACzB,SAAS,cAAc;IACvB,KAAK,eAAe;CACvB;AAED,oBAAY,qBAAqB;IAC7B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;CAChC;AAED,oBAAY,oBAAoB;IAC5B,KAAK,UAAU;IACf,KAAK,UAAU;CAClB;AAED,oBAAY,gBAAgB;IACxB,kBAAkB,2BAA2B;IAC7C,qBAAqB,0BAA0B;IAC/C,iBAAiB,+BAA+B;IAChD,iBAAiB,+BAA+B;IAChD,wBAAwB,6BAA6B;CACxD;AAED,oBAAY,4BAA4B;IAEpC,gBAAgB,qBAAqB;IACrC,yBAAyB,8BAA8B;IACvD,gCAAgC,qCAAqC;IACrE,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,gBAAgB,qBAAqB;IACrC,0BAA0B,+BAA+B;CAC5D;AAED,oBAAY,2BAA2B;IACnC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CACpC;AAED,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,yCAAyC,KAAK,CAAC;AAC5D,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,eAAO,MAAM,yBAAyB,EAAE,qBAGvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAAqB,EAIhE,CAAC","file":"MediaConstants.d.ts","sourcesContent":["import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n OBSERVER_AUDIO_STREAM = 'OBSERVER_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}
@@ -48,6 +48,7 @@ var KnownMediaStreamKind;
48
48
  var KnownMediaStream;
49
49
  (function (KnownMediaStream) {
50
50
  KnownMediaStream["AGENT_AUDIO_STREAM"] = "DASHBOARD_AUDIO_STREAM";
51
+ KnownMediaStream["OBSERVER_AUDIO_STREAM"] = "OBSERVER_AUDIO_STREAM";
51
52
  KnownMediaStream["USER_AUDIO_STREAM"] = "MOBILE_CLIENT_AUDIO_STREAM";
52
53
  KnownMediaStream["USER_VIDEO_STREAM"] = "MOBILE_CLIENT_VIDEO_STREAM";
53
54
  KnownMediaStream["USER_SCREEN_SHARE_STREAM"] = "USER_SCREEN_SHARE_STREAM";
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaConstants.js","../src/MediaConstants.ts"],"names":["Object","defineProperty","exports","value","LocalVideoSourceType","ConstraintType","CameraTypes","MediaServiceType","SessionClientRole","SessionClientType","MediaRequestErrorCode","KnownMediaStreamKind","KnownMediaStream","MediaSessionDisconnectReason","MediaStreamUnregisterReason","DEFAULT_VIDEO_RESOLUTION","DEFAULT_VIDEO_CONSTRAINT_TYPE","IDEAL","DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS","DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS","DEFAULT_VIDEO_CONSTRAINTS","resolution","constraintType","POSSIBLE_LOOPBACK_RESOLUTIONS","MIN"],"mappings":"AAAA;;AACAA,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;ACCA,IAAYC,oBAAZ;AAAA,CAAA,UAAYA,oBAAZ,EAAgC;AAC5BA,yBAAA,QAAA,IAAA,QAAA;AACAA,yBAAA,cAAA,IAAA,cAAA;AACAA,yBAAA,eAAA,IAAA,eAAA;AACH,CAJD,EAAYA,uBAAAF,QAAAE,oBAAA,KAAAF,QAAAE,oBAAA,GAAoB,EAApB,CAAZ;AAMA,IAAYC,cAAZ;AAAA,CAAA,UAAYA,cAAZ,EAA0B;AACtBA,mBAAA,KAAA,IAAA,KAAA;AACAA,mBAAA,OAAA,IAAA,OAAA;AACH,CAHD,EAAYA,iBAAAH,QAAAG,cAAA,KAAAH,QAAAG,cAAA,GAAc,EAAd,CAAZ;AAKA,IAAYC,WAAZ;AAAA,CAAA,UAAYA,WAAZ,EAAuB;AACnBA,gBAAA,OAAA,IAAA,OAAA;AACAA,gBAAA,MAAA,IAAA,MAAA;AACH,CAHD,EAAYA,cAAAJ,QAAAI,WAAA,KAAAJ,QAAAI,WAAA,GAAW,EAAX,CAAZ;AAKA,IAAYC,gBAAZ;AAAA,CAAA,UAAYA,gBAAZ,EAA4B;AACxBA,qBAAA,SAAA,IAAA,SAAA;AACAA,qBAAA,YAAA,IAAA,aAAA;AACAA,qBAAA,aAAA,IAAA,cAAA;AACH,CAJD,EAAYA,mBAAAL,QAAAK,gBAAA,KAAAL,QAAAK,gBAAA,GAAgB,EAAhB,CAAZ;AAMA,IAAYC,iBAAZ;AAAA,CAAA,UAAYA,iBAAZ,EAA6B;AACzBA,sBAAA,OAAA,IAAA,OAAA;AACAA,sBAAA,UAAA,IAAA,UAAA;AACAA,sBAAA,MAAA,IAAA,MAAA;AACH,CAJD,EAAYA,oBAAAN,QAAAM,iBAAA,KAAAN,QAAAM,iBAAA,GAAiB,EAAjB,CAAZ;AAMA,IAAYC,iBAAZ;AAAA,CAAA,UAAYA,iBAAZ,EAA6B;AACzBA,sBAAA,WAAA,IAAA,WAAA;AACAA,sBAAA,OAAA,IAAA,YAAA;AACH,CAHD,EAAYA,oBAAAP,QAAAO,iBAAA,KAAAP,QAAAO,iBAAA,GAAiB,EAAjB,CAAZ;AAKA,IAAYC,qBAAZ;AAAA,CAAA,UAAYA,qBAAZ,EAAiC;AAC7BA,0BAAA,iBAAA,IAAA,iBAAA;AACAA,0BAAA,kBAAA,IAAA,kBAAA;AACAA,0BAAA,cAAA,IAAA,cAAA;AACH,CAJD,EAAYA,wBAAAR,QAAAQ,qBAAA,KAAAR,QAAAQ,qBAAA,GAAqB,EAArB,CAAZ;AAMA,IAAYC,oBAAZ;AAAA,CAAA,UAAYA,oBAAZ,EAAgC;AAC5BA,yBAAA,OAAA,IAAA,OAAA;AACAA,yBAAA,OAAA,IAAA,OAAA;AACH,CAHD,EAAYA,uBAAAT,QAAAS,oBAAA,KAAAT,QAAAS,oBAAA,GAAoB,EAApB,CAAZ;AAKA,IAAYC,gBAAZ;AAAA,CAAA,UAAYA,gBAAZ,EAA4B;AACxBA,qBAAA,oBAAA,IAAA,wBAAA;AACAA,qBAAA,mBAAA,IAAA,4BAAA;AACAA,qBAAA,mBAAA,IAAA,4BAAA;AACAA,qBAAA,0BAAA,IAAA,0BAAA;AACH,CALD,EAAYA,mBAAAV,QAAAU,gBAAA,KAAAV,QAAAU,gBAAA,GAAgB,EAAhB,CAAZ;AAOA,IAAYC,4BAAZ;AAAA,CAAA,UAAYA,4BAAZ,EAAwC;AACpC;AACAA,iCAAA,kBAAA,IAAA,kBAAA;AACAA,iCAAA,2BAAA,IAAA,2BAAA;AACAA,iCAAA,kCAAA,IAAA,kCAAA;AACAA,iCAAA,0BAAA,IAAA,0BAAA;AACAA,iCAAA,0BAAA,IAAA,0BAAA;AACAA,iCAAA,kBAAA,IAAA,kBAAA;AACAA,iCAAA,4BAAA,IAAA,4BAAA;AACH,CATD,EAAYA,+BAAAX,QAAAW,4BAAA,KAAAX,QAAAW,4BAAA,GAA4B,EAA5B,CAAZ;AAWA,IAAYC,2BAAZ;AAAA,CAAA,UAAYA,2BAAZ,EAAuC;AACnCA,gCAAA,aAAA,IAAA,aAAA;AACAA,gCAAA,iBAAA,IAAA,iBAAA;AACAA,gCAAA,gBAAA,IAAA,gBAAA;AACAA,gCAAA,gBAAA,IAAA,gBAAA;AACH,CALD,EAAYA,8BAAAZ,QAAAY,2BAAA,KAAAZ,QAAAY,2BAAA,GAA2B,EAA3B,CAAZ;AAOaZ,QAAAa,wBAAA,GAA2B,SAA3B;AACAb,QAAAc,6BAAA,GAAgCX,eAAeY,KAA/C;AACAf,QAAAgB,yCAAA,GAA4C,EAA5C;AACAhB,QAAAiB,kCAAA,GAAqC,EAArC;AAEAjB,QAAAkB,yBAAA,GAAmD;AAC5DC,gBAAYnB,QAAAa,wBADgD;AAE5DO,oBAAgBpB,QAAAc;AAF4C,CAAnD;AAKAd,QAAAqB,6BAAA,GAAyD,CAClE,EAACF,YAAY,WAAb,EAA0BC,gBAAgBjB,eAAemB,GAAzD,EADkE,EAElE,EAACH,YAAY,UAAb,EAAyBC,gBAAgBjB,eAAemB,GAAxD,EAFkE,EAGlEtB,QAAAkB,yBAHkE,CAGxC;AAHwC,CAAzD;;ADIb","file":"MediaConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LocalVideoSourceType;\n(function (LocalVideoSourceType) {\n LocalVideoSourceType[\"CAMERA\"] = \"CAMERA\";\n LocalVideoSourceType[\"CAMERA_FRONT\"] = \"CAMERA_FRONT\";\n LocalVideoSourceType[\"DESKTOP_SHARE\"] = \"DESKTOP_SHARE\";\n})(LocalVideoSourceType = exports.LocalVideoSourceType || (exports.LocalVideoSourceType = {}));\nvar ConstraintType;\n(function (ConstraintType) {\n ConstraintType[\"MIN\"] = \"min\";\n ConstraintType[\"IDEAL\"] = \"ideal\";\n})(ConstraintType = exports.ConstraintType || (exports.ConstraintType = {}));\nvar CameraTypes;\n(function (CameraTypes) {\n CameraTypes[\"FRONT\"] = \"front\";\n CameraTypes[\"BACK\"] = \"back\";\n})(CameraTypes = exports.CameraTypes || (exports.CameraTypes = {}));\nvar MediaServiceType;\n(function (MediaServiceType) {\n MediaServiceType[\"OPENTOK\"] = \"OPENTOK\";\n MediaServiceType[\"TURNSERVER\"] = \"TURN_SERVER\";\n MediaServiceType[\"MEDIASERVER\"] = \"MEDIA_SERVER\";\n})(MediaServiceType = exports.MediaServiceType || (exports.MediaServiceType = {}));\nvar SessionClientRole;\n(function (SessionClientRole) {\n SessionClientRole[\"AGENT\"] = \"AGENT\";\n SessionClientRole[\"OBSERVER\"] = \"OBSERVER\";\n SessionClientRole[\"USER\"] = \"USER\";\n})(SessionClientRole = exports.SessionClientRole || (exports.SessionClientRole = {}));\nvar SessionClientType;\n(function (SessionClientType) {\n SessionClientType[\"INITIATOR\"] = \"publisher\";\n SessionClientType[\"GUEST\"] = \"subscriber\";\n})(SessionClientType = exports.SessionClientType || (exports.SessionClientType = {}));\nvar MediaRequestErrorCode;\n(function (MediaRequestErrorCode) {\n MediaRequestErrorCode[\"Overconstrained\"] = \"Overconstrained\";\n MediaRequestErrorCode[\"PermissionDenied\"] = \"PermissionDenied\";\n MediaRequestErrorCode[\"GeneralError\"] = \"GeneralError\";\n})(MediaRequestErrorCode = exports.MediaRequestErrorCode || (exports.MediaRequestErrorCode = {}));\nvar KnownMediaStreamKind;\n(function (KnownMediaStreamKind) {\n KnownMediaStreamKind[\"Audio\"] = \"audio\";\n KnownMediaStreamKind[\"Video\"] = \"video\";\n})(KnownMediaStreamKind = exports.KnownMediaStreamKind || (exports.KnownMediaStreamKind = {}));\nvar KnownMediaStream;\n(function (KnownMediaStream) {\n KnownMediaStream[\"AGENT_AUDIO_STREAM\"] = \"DASHBOARD_AUDIO_STREAM\";\n KnownMediaStream[\"USER_AUDIO_STREAM\"] = \"MOBILE_CLIENT_AUDIO_STREAM\";\n KnownMediaStream[\"USER_VIDEO_STREAM\"] = \"MOBILE_CLIENT_VIDEO_STREAM\";\n KnownMediaStream[\"USER_SCREEN_SHARE_STREAM\"] = \"USER_SCREEN_SHARE_STREAM\";\n})(KnownMediaStream = exports.KnownMediaStream || (exports.KnownMediaStream = {}));\nvar MediaSessionDisconnectReason;\n(function (MediaSessionDisconnectReason) {\n //Raised on initiator peer when guest peer was disconnected from signaling\n MediaSessionDisconnectReason[\"PeerDisconnected\"] = \"PeerDisconnected\";\n MediaSessionDisconnectReason[\"PeerConnectionInterrupted\"] = \"PeerConnectionInterrupted\";\n MediaSessionDisconnectReason[\"PeerConnectionStateChangeTimeout\"] = \"PeerConnectionStateChangeTimeout\";\n MediaSessionDisconnectReason[\"InitiatorPeerReconnected\"] = \"InitiatorPeerReconnected\";\n MediaSessionDisconnectReason[\"PublishedStreamDestroyed\"] = \"PublishedStreamDestroyed\";\n MediaSessionDisconnectReason[\"ForcedByConsumer\"] = \"ForcedByConsumer\";\n MediaSessionDisconnectReason[\"SignalingChannelDisconnect\"] = \"SignalingChannelDisconnect\";\n})(MediaSessionDisconnectReason = exports.MediaSessionDisconnectReason || (exports.MediaSessionDisconnectReason = {}));\nvar MediaStreamUnregisterReason;\n(function (MediaStreamUnregisterReason) {\n MediaStreamUnregisterReason[\"NativeEvent\"] = \"NativeEvent\";\n MediaStreamUnregisterReason[\"ReplacingStream\"] = \"ReplacingStream\";\n MediaStreamUnregisterReason[\"ClosedRemotely\"] = \"ClosedRemotely\";\n MediaStreamUnregisterReason[\"ServiceCleanUp\"] = \"ServiceCleanUp\";\n})(MediaStreamUnregisterReason = exports.MediaStreamUnregisterReason || (exports.MediaStreamUnregisterReason = {}));\nexports.DEFAULT_VIDEO_RESOLUTION = '640x480';\nexports.DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\nexports.DEFAULT_VIDEO_CONSTRAINTS = {\n resolution: exports.DEFAULT_VIDEO_RESOLUTION,\n constraintType: exports.DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\nexports.POSSIBLE_LOOPBACK_RESOLUTIONS = [\n { resolution: '1920x1080', constraintType: ConstraintType.MIN },\n { resolution: '1280x720', constraintType: ConstraintType.MIN },\n exports.DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n\n//# sourceMappingURL=MediaConstants.js.map\n","import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}
1
+ {"version":3,"sources":["MediaConstants.js","../src/MediaConstants.ts"],"names":["Object","defineProperty","exports","value","LocalVideoSourceType","ConstraintType","CameraTypes","MediaServiceType","SessionClientRole","SessionClientType","MediaRequestErrorCode","KnownMediaStreamKind","KnownMediaStream","MediaSessionDisconnectReason","MediaStreamUnregisterReason","DEFAULT_VIDEO_RESOLUTION","DEFAULT_VIDEO_CONSTRAINT_TYPE","IDEAL","DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS","DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS","DEFAULT_VIDEO_CONSTRAINTS","resolution","constraintType","POSSIBLE_LOOPBACK_RESOLUTIONS","MIN"],"mappings":"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","file":"MediaConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LocalVideoSourceType;\n(function (LocalVideoSourceType) {\n LocalVideoSourceType[\"CAMERA\"] = \"CAMERA\";\n LocalVideoSourceType[\"CAMERA_FRONT\"] = \"CAMERA_FRONT\";\n LocalVideoSourceType[\"DESKTOP_SHARE\"] = \"DESKTOP_SHARE\";\n})(LocalVideoSourceType = exports.LocalVideoSourceType || (exports.LocalVideoSourceType = {}));\nvar ConstraintType;\n(function (ConstraintType) {\n ConstraintType[\"MIN\"] = \"min\";\n ConstraintType[\"IDEAL\"] = \"ideal\";\n})(ConstraintType = exports.ConstraintType || (exports.ConstraintType = {}));\nvar CameraTypes;\n(function (CameraTypes) {\n CameraTypes[\"FRONT\"] = \"front\";\n CameraTypes[\"BACK\"] = \"back\";\n})(CameraTypes = exports.CameraTypes || (exports.CameraTypes = {}));\nvar MediaServiceType;\n(function (MediaServiceType) {\n MediaServiceType[\"OPENTOK\"] = \"OPENTOK\";\n MediaServiceType[\"TURNSERVER\"] = \"TURN_SERVER\";\n MediaServiceType[\"MEDIASERVER\"] = \"MEDIA_SERVER\";\n})(MediaServiceType = exports.MediaServiceType || (exports.MediaServiceType = {}));\nvar SessionClientRole;\n(function (SessionClientRole) {\n SessionClientRole[\"AGENT\"] = \"AGENT\";\n SessionClientRole[\"OBSERVER\"] = \"OBSERVER\";\n SessionClientRole[\"USER\"] = \"USER\";\n})(SessionClientRole = exports.SessionClientRole || (exports.SessionClientRole = {}));\nvar SessionClientType;\n(function (SessionClientType) {\n SessionClientType[\"INITIATOR\"] = \"publisher\";\n SessionClientType[\"GUEST\"] = \"subscriber\";\n})(SessionClientType = exports.SessionClientType || (exports.SessionClientType = {}));\nvar MediaRequestErrorCode;\n(function (MediaRequestErrorCode) {\n MediaRequestErrorCode[\"Overconstrained\"] = \"Overconstrained\";\n MediaRequestErrorCode[\"PermissionDenied\"] = \"PermissionDenied\";\n MediaRequestErrorCode[\"GeneralError\"] = \"GeneralError\";\n})(MediaRequestErrorCode = exports.MediaRequestErrorCode || (exports.MediaRequestErrorCode = {}));\nvar KnownMediaStreamKind;\n(function (KnownMediaStreamKind) {\n KnownMediaStreamKind[\"Audio\"] = \"audio\";\n KnownMediaStreamKind[\"Video\"] = \"video\";\n})(KnownMediaStreamKind = exports.KnownMediaStreamKind || (exports.KnownMediaStreamKind = {}));\nvar KnownMediaStream;\n(function (KnownMediaStream) {\n KnownMediaStream[\"AGENT_AUDIO_STREAM\"] = \"DASHBOARD_AUDIO_STREAM\";\n KnownMediaStream[\"OBSERVER_AUDIO_STREAM\"] = \"OBSERVER_AUDIO_STREAM\";\n KnownMediaStream[\"USER_AUDIO_STREAM\"] = \"MOBILE_CLIENT_AUDIO_STREAM\";\n KnownMediaStream[\"USER_VIDEO_STREAM\"] = \"MOBILE_CLIENT_VIDEO_STREAM\";\n KnownMediaStream[\"USER_SCREEN_SHARE_STREAM\"] = \"USER_SCREEN_SHARE_STREAM\";\n})(KnownMediaStream = exports.KnownMediaStream || (exports.KnownMediaStream = {}));\nvar MediaSessionDisconnectReason;\n(function (MediaSessionDisconnectReason) {\n //Raised on initiator peer when guest peer was disconnected from signaling\n MediaSessionDisconnectReason[\"PeerDisconnected\"] = \"PeerDisconnected\";\n MediaSessionDisconnectReason[\"PeerConnectionInterrupted\"] = \"PeerConnectionInterrupted\";\n MediaSessionDisconnectReason[\"PeerConnectionStateChangeTimeout\"] = \"PeerConnectionStateChangeTimeout\";\n MediaSessionDisconnectReason[\"InitiatorPeerReconnected\"] = \"InitiatorPeerReconnected\";\n MediaSessionDisconnectReason[\"PublishedStreamDestroyed\"] = \"PublishedStreamDestroyed\";\n MediaSessionDisconnectReason[\"ForcedByConsumer\"] = \"ForcedByConsumer\";\n MediaSessionDisconnectReason[\"SignalingChannelDisconnect\"] = \"SignalingChannelDisconnect\";\n})(MediaSessionDisconnectReason = exports.MediaSessionDisconnectReason || (exports.MediaSessionDisconnectReason = {}));\nvar MediaStreamUnregisterReason;\n(function (MediaStreamUnregisterReason) {\n MediaStreamUnregisterReason[\"NativeEvent\"] = \"NativeEvent\";\n MediaStreamUnregisterReason[\"ReplacingStream\"] = \"ReplacingStream\";\n MediaStreamUnregisterReason[\"ClosedRemotely\"] = \"ClosedRemotely\";\n MediaStreamUnregisterReason[\"ServiceCleanUp\"] = \"ServiceCleanUp\";\n})(MediaStreamUnregisterReason = exports.MediaStreamUnregisterReason || (exports.MediaStreamUnregisterReason = {}));\nexports.DEFAULT_VIDEO_RESOLUTION = '640x480';\nexports.DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\nexports.DEFAULT_VIDEO_CONSTRAINTS = {\n resolution: exports.DEFAULT_VIDEO_RESOLUTION,\n constraintType: exports.DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\nexports.POSSIBLE_LOOPBACK_RESOLUTIONS = [\n { resolution: '1920x1080', constraintType: ConstraintType.MIN },\n { resolution: '1280x720', constraintType: ConstraintType.MIN },\n exports.DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n\n//# sourceMappingURL=MediaConstants.js.map\n","import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n OBSERVER_AUDIO_STREAM = 'OBSERVER_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSession/MediaServer.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EACH,UAAU,EAGV,SAAS,EAGT,UAAU,EACb,MAAM,2BAA2B,CAAC;AAQnC,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CACpC;AAED,oBAAY,eAAe;IACvB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC/F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,iBAAiB,CAAa;qBAE1B,SAAS;gBAIT,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C,iBAAiB;IAMjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B,OAAO,CAAC,kBAAkB;IAiB1B,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK5E,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpE,OAAO,CAAC,oBAAoB;IAW5B,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,iCAAiC;IAiBzC,OAAO,CAAC,gCAAgC;IAcxC,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,wBAAwB;IAwEhC,OAAO,CAAC,kBAAkB;CAK7B","file":"MediaServer.d.ts","sourcesContent":["import {\n IMediaSession,\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\nimport {IMediaSessionPeer, MediaSessionBase} from './MediaSessionBase';\nimport {SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {Nullable} from '@techsee/techsee-common';\nimport {\n Connection,\n OpenVidu,\n OpenViduError,\n Publisher,\n PublisherProperties,\n Session,\n Subscriber\n} from '@techsee/openvidu-browser';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {Promise} from 'bluebird';\nimport get from 'lodash/get';\n\nconst trace = getMediaTracer('MediaServerSession');\n\ninterface OVStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\ninterface OVPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OVStreamSource>;\n connection: Nullable<Connection>;\n publisher: Nullable<Publisher>;\n subscriber: Nullable<Subscriber>;\n}\n\nexport enum recordingEvents {\n RECORD_STARTED = 'RECORD_STARTED',\n RECORD_STOPPED = 'RECORD_STOPPED',\n RECONNECTING = 'RECONNECTING'\n}\n\nexport class MediaServerSession extends MediaSessionBase<OVPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n private OV: Nullable<OpenVidu> = null;\n private _session: Nullable<Session> = null;\n private _lastStreamEvents: any[] = [];\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n this._credentials = sessionParams.credentials;\n\n this.connect = this.connect.bind(this);\n this.disconnect = this.disconnect.bind(this);\n this.onMediaStreamDestroyed = this.onMediaStreamDestroyed.bind(this);\n this.onPublisherDestroyed = this.onPublisherDestroyed.bind(this);\n this.onMediaStreamRenewed = this.onMediaStreamRenewed.bind(this);\n\n this.createStreamForPublishing = this.createStreamForPublishing.bind(this);\n this.createMediaPublisher = this.createMediaPublisher.bind(this);\n this.connectionCreatedHandler = this.connectionCreatedHandler.bind(this);\n this.connectionDestroyedHandler = this.connectionDestroyedHandler.bind(this);\n this.streamCreatedHandler = this.streamCreatedHandler.bind(this);\n this.streamDestroyedHandler = this.streamDestroyedHandler.bind(this);\n }\n\n connect(connectOnly?: boolean): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n // const iceServers = this._credentials.ice.map((item: any) => ({\n // urls: item.url,\n // username: item.login,\n // credential: item.password\n // }));\n\n this.OV = new OpenVidu();\n // this.OV.setAdvancedConfiguration({ iceServers });\n this._session = this.OV.initSession();\n\n this.initSessionEvents();\n\n return this._session.connect(this._credentials.token, {clientRole: this._sessionParams.clientRole})\n .catch((err) => {\n trace.error('Error to connect to session Media Server: ', err);\n\n throw err;\n });\n }\n\n sessionDisconnect() {\n if (this._session) {\n return this._session.disconnect();\n }\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n\n const promiseDisconnect: any[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n promiseDisconnect.push(this.destroyPeerConnection(peerConnection));\n });\n\n return Promise.all(promiseDisconnect).then(() => {\n if (!this._session) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n\n this.removeSessionEvent();\n this._session.disconnect();\n\n this._lastStreamEvents = [];\n delete this._session;\n delete this.OV;\n\n resolve();\n });\n });\n }\n\n private removeSessionEvent() {\n if (!this._session) {\n return;\n }\n\n this._session.off('connectionCreated');\n this._session.off('streamCreated');\n this._session.off('streamDestroyed');\n this._session.off('connectionDestroyed');\n this._session.off('sessionDisconnected');\n this._session.off('recordingStarted');\n this._session.off('recordingStopped');\n this._sessionParams.removeHandlers && this._sessionParams.removeHandlers();\n\n trace.info('Remove Events Listener');\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n // @ts-ignore\n return Promise.resolve(undefined);\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n trace.info('onMediaStreamDestroyed');\n\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => trace.info('onMediaStreamDestroyed: Success'));\n }\n\n private onPublisherDestroyed(connectionId: string) {\n trace.info('onPublisherDestroyed');\n const peerConnection = this._peerConnections.get(connectionId);\n\n if (!peerConnection) {\n return Promise.resolve();\n }\n\n return this.destroyPublisherOnPeerConnection(peerConnection);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n return Promise.resolve(undefined);\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>): Promise<void> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n private initSessionEvents() {\n if (!this._session) {\n return;\n }\n\n this._sessionParams.initHandlers && this._sessionParams.initHandlers();\n\n this._lastStreamEvents = [];\n\n this._session!.on('connectionCreated', this.connectionCreatedHandler);\n\n this._session.on('streamCreated', this.streamCreatedHandler);\n\n this._session.on('streamDestroyed', this.streamDestroyedHandler);\n\n this._session.on('connectionDestroyed', this.connectionDestroyedHandler);\n\n this._session.on('recordingStarted', (event) => {\n trace.info('recordingStarted event', event);\n this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n\n this._session.on('recordingStopped', (event) => {\n trace.info('recordingStopped event', event);\n this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n\n this._session.on('reconnecting', () => {\n trace.info('reconnecting event');\n this.emitEvent(recordingEvents.RECONNECTING);\n });\n\n this._session.on('sessionDisconnected', this.disconnect);\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n }\n\n private destroyPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroyPeerConnection');\n this._peerConnections.delete(peerConnection.peerId);\n\n return Promise.all([this.destroyPublisherOnPeerConnection(peerConnection),\n this.destroySubscriberOnPeerConnection(peerConnection)]).then(() => undefined)\n .catch(() => {\n trace.warn('destroyPeerConnection - something wrong with destroy');\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroySubscriberOnPeerConnection', peerConnection);\n\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n trace.info('destroySubscriberOnPeerConnection- before unregisterPeersRemoteMediaTracks');\n\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n .then(() => {\n trace.info('destroySubscriberOnPeerConnection- unregisterPeersRemoteMediaTracks successfully');\n peerConnection.subscriber = null;\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroyPublisherOnPeerConnection');\n\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n trace.info('destroyPublisherOnPeerConnection- unpublish!');\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n private createMediaSubscriber(remoteStream: any): Promise<Subscriber> {\n trace.info('createMediaSubscriber');\n\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n return reject('Session not exists');\n }\n\n trace.info('Before create subscriber');\n const subscriber: Subscriber = this._session!.subscribe(remoteStream, '', {}, (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n\n return reject(err);\n }\n\n trace.info('create subscriber successfully', subscriber);\n\n return resolve(subscriber);\n });\n });\n }\n\n private streamCreatedHandler(event: any): Promise<void> {\n if (!event) {\n return Promise.resolve();\n }\n\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return Promise.resolve();\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist, add to streams to subscribe list', event);\n this._lastStreamEvents.push(event);\n\n return Promise.resolve();\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n return this.createMediaSubscriber(stream).then((subscriber: Subscriber) => {\n peerConnection.subscriber = subscriber;\n\n trace.info('Registering remote media tracks', peerConnection.subscriber);\n subscriber.stream.getMediaStream().getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n return this.registerPeersRemoteTracks(peerConnection);\n });\n }\n\n private createStreamForPublishing(destinationRole: SessionClientRole): Promise<OVStreamSource> {\n trace.info('createStreamForPublishing');\n\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n\n const stream: OVStreamSource = {videoSource: null, audioSource: null};\n\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OVStreamSource): Promise<Publisher> {\n const ovParams: PublisherProperties = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource\n };\n\n return new Promise((resolve, reject) => {\n const ovPublisher = this.OV!.initPublisher('', ovParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n\n ovPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n const connectionId = get(event, 'stream.connection.connectionId');\n\n this.onPublisherDestroyed(connectionId);\n\n //We preventing the default, in order to prevent stop the stream by OV.\n //We managing streams by ourselves and if we allow OV to close the stream, it cannot be reused.\n event.preventDefault();\n });\n\n resolve(ovPublisher);\n });\n });\n }\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const destinationRole = JSON.parse(connection.data).clientRole;\n\n this.createStreamForPublishing(destinationRole)\n .then((streams: OVStreamSource) => {\n const peerConnection: OVPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (connection.connectionId !== this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n return this.createMediaPublisher(streams)\n .then((publisher: Publisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OVPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (connection.connectionId === this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n\n return this._lastStreamEvents.reduce((promiseChain: any, streamEvent: any) => promiseChain.then(() => this.streamCreatedHandler(streamEvent)),\n Promise.resolve()).then(() => {\n if (peerConnection.publisher) {\n trace.info('Starting publish to peerConnection.publisher');\n\n return this._session!.publish(peerConnection.publisher)\n .catch((err: OpenViduError) => {\n trace.info('Error during publish', peerConnection.publisher);\n\n if (peerConnection.publisher) {\n trace.info('Error during publish- unpublish');\n this._session!.unpublish(peerConnection.publisher);\n }\n\n throw err;\n });\n }\n\n return Promise.resolve();\n });\n }\n })\n .catch((error: OpenViduError) => {\n trace.error('Error handling new peer connection', error);\n });\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no MediaServer session exists', shouldThrow);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/MediaSession/MediaServer.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EACH,UAAU,EAGV,SAAS,EAGT,UAAU,EACb,MAAM,2BAA2B,CAAC;AAQnC,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CACpC;AAED,oBAAY,eAAe;IACvB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC/F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,iBAAiB,CAAa;qBAE1B,SAAS;gBAIT,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C,iBAAiB;IAMjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B,OAAO,CAAC,kBAAkB;IAiB1B,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK5E,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpE,OAAO,CAAC,oBAAoB;IAW5B,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,iCAAiC;IAiBzC,OAAO,CAAC,gCAAgC;IAcxC,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,wBAAwB;IAwEhC,OAAO,CAAC,kBAAkB;CAK7B","file":"MediaServer.d.ts","sourcesContent":["import {\n IMediaSession,\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\nimport {IMediaSessionPeer, MediaSessionBase} from './MediaSessionBase';\nimport {SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {Nullable} from '@techsee/techsee-common';\nimport {\n Connection,\n OpenVidu,\n OpenViduError,\n Publisher,\n PublisherProperties,\n Session,\n Subscriber\n} from '@techsee/openvidu-browser';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {Promise} from 'bluebird';\nimport get from 'lodash/get';\n\nconst trace = getMediaTracer('MediaServerSession');\n\ninterface OVStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\ninterface OVPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OVStreamSource>;\n connection: Nullable<Connection>;\n publisher: Nullable<Publisher>;\n subscriber: Nullable<Subscriber>;\n}\n\nexport enum recordingEvents {\n RECORD_STARTED = 'RECORD_STARTED',\n RECORD_STOPPED = 'RECORD_STOPPED',\n RECONNECTING = 'RECONNECTING'\n}\n\nexport class MediaServerSession extends MediaSessionBase<OVPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n private OV: Nullable<OpenVidu> = null;\n private _session: Nullable<Session> = null;\n private _lastStreamEvents: any[] = [];\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n this._credentials = sessionParams.credentials;\n\n this.connect = this.connect.bind(this);\n this.disconnect = this.disconnect.bind(this);\n this.onMediaStreamDestroyed = this.onMediaStreamDestroyed.bind(this);\n this.onPublisherDestroyed = this.onPublisherDestroyed.bind(this);\n this.onMediaStreamRenewed = this.onMediaStreamRenewed.bind(this);\n\n this.createStreamForPublishing = this.createStreamForPublishing.bind(this);\n this.createMediaPublisher = this.createMediaPublisher.bind(this);\n this.connectionCreatedHandler = this.connectionCreatedHandler.bind(this);\n this.connectionDestroyedHandler = this.connectionDestroyedHandler.bind(this);\n this.streamCreatedHandler = this.streamCreatedHandler.bind(this);\n this.streamDestroyedHandler = this.streamDestroyedHandler.bind(this);\n }\n\n connect(connectOnly?: boolean): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n // const iceServers = this._credentials.ice.map((item: any) => ({\n // urls: item.url,\n // username: item.login,\n // credential: item.password\n // }));\n\n this.OV = new OpenVidu();\n // this.OV.setAdvancedConfiguration({ iceServers });\n this._session = this.OV.initSession();\n\n this.initSessionEvents();\n\n return this._session.connect(this._credentials.token, {clientRole: this._sessionParams.clientRole})\n .catch((err) => {\n trace.error('Error to connect to session Media Server: ', err);\n\n throw err;\n });\n }\n\n sessionDisconnect() {\n if (this._session) {\n return this._session.disconnect(true);\n }\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n\n const promiseDisconnect: any[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n promiseDisconnect.push(this.destroyPeerConnection(peerConnection));\n });\n\n return Promise.all(promiseDisconnect).then(() => {\n if (!this._session) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n\n this.removeSessionEvent();\n this._session.disconnect();\n\n this._lastStreamEvents = [];\n delete this._session;\n delete this.OV;\n\n resolve();\n });\n });\n }\n\n private removeSessionEvent() {\n if (!this._session) {\n return;\n }\n\n this._session.off('connectionCreated');\n this._session.off('streamCreated');\n this._session.off('streamDestroyed');\n this._session.off('connectionDestroyed');\n this._session.off('sessionDisconnected');\n this._session.off('recordingStarted');\n this._session.off('recordingStopped');\n this._sessionParams.removeHandlers && this._sessionParams.removeHandlers();\n\n trace.info('Remove Events Listener');\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n // @ts-ignore\n return Promise.resolve(undefined);\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n trace.info('onMediaStreamDestroyed');\n\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => trace.info('onMediaStreamDestroyed: Success'));\n }\n\n private onPublisherDestroyed(connectionId: string) {\n trace.info('onPublisherDestroyed');\n const peerConnection = this._peerConnections.get(connectionId);\n\n if (!peerConnection) {\n return Promise.resolve();\n }\n\n return this.destroyPublisherOnPeerConnection(peerConnection);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n return Promise.resolve(undefined);\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>): Promise<void> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n private initSessionEvents() {\n if (!this._session) {\n return;\n }\n\n this._sessionParams.initHandlers && this._sessionParams.initHandlers();\n\n this._lastStreamEvents = [];\n\n this._session!.on('connectionCreated', this.connectionCreatedHandler);\n\n this._session.on('streamCreated', this.streamCreatedHandler);\n\n this._session.on('streamDestroyed', this.streamDestroyedHandler);\n\n this._session.on('connectionDestroyed', this.connectionDestroyedHandler);\n\n this._session.on('recordingStarted', (event) => {\n trace.info('recordingStarted event', event);\n this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n\n this._session.on('recordingStopped', (event) => {\n trace.info('recordingStopped event', event);\n this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n\n this._session.on('reconnecting', () => {\n trace.info('reconnecting event');\n this.emitEvent(recordingEvents.RECONNECTING);\n });\n\n this._session.on('sessionDisconnected', this.disconnect);\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n }\n\n private destroyPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroyPeerConnection');\n this._peerConnections.delete(peerConnection.peerId);\n\n return Promise.all([this.destroyPublisherOnPeerConnection(peerConnection),\n this.destroySubscriberOnPeerConnection(peerConnection)]).then(() => undefined)\n .catch(() => {\n trace.warn('destroyPeerConnection - something wrong with destroy');\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroySubscriberOnPeerConnection', peerConnection);\n\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n trace.info('destroySubscriberOnPeerConnection- before unregisterPeersRemoteMediaTracks');\n\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n .then(() => {\n trace.info('destroySubscriberOnPeerConnection- unregisterPeersRemoteMediaTracks successfully');\n peerConnection.subscriber = null;\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OVPeerConnection): Promise<void> {\n trace.info('destroyPublisherOnPeerConnection');\n\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n trace.info('destroyPublisherOnPeerConnection- unpublish!');\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n private createMediaSubscriber(remoteStream: any): Promise<Subscriber> {\n trace.info('createMediaSubscriber');\n\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n return reject('Session not exists');\n }\n\n trace.info('Before create subscriber');\n const subscriber: Subscriber = this._session!.subscribe(remoteStream, '', {}, (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n\n return reject(err);\n }\n\n trace.info('create subscriber successfully', subscriber);\n\n return resolve(subscriber);\n });\n });\n }\n\n private streamCreatedHandler(event: any): Promise<void> {\n if (!event) {\n return Promise.resolve();\n }\n\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return Promise.resolve();\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist, add to streams to subscribe list', event);\n this._lastStreamEvents.push(event);\n\n return Promise.resolve();\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n return this.createMediaSubscriber(stream).then((subscriber: Subscriber) => {\n peerConnection.subscriber = subscriber;\n\n trace.info('Registering remote media tracks', peerConnection.subscriber);\n subscriber.stream.getMediaStream().getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n return this.registerPeersRemoteTracks(peerConnection);\n });\n }\n\n private createStreamForPublishing(destinationRole: SessionClientRole): Promise<OVStreamSource> {\n trace.info('createStreamForPublishing');\n\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n\n const stream: OVStreamSource = {videoSource: null, audioSource: null};\n\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OVStreamSource): Promise<Publisher> {\n const ovParams: PublisherProperties = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource\n };\n\n return new Promise((resolve, reject) => {\n const ovPublisher = this.OV!.initPublisher('', ovParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n\n ovPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n const connectionId = get(event, 'stream.connection.connectionId');\n\n this.onPublisherDestroyed(connectionId);\n\n //We preventing the default, in order to prevent stop the stream by OV.\n //We managing streams by ourselves and if we allow OV to close the stream, it cannot be reused.\n event.preventDefault();\n });\n\n resolve(ovPublisher);\n });\n });\n }\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const destinationRole = JSON.parse(connection.data).clientRole;\n\n this.createStreamForPublishing(destinationRole)\n .then((streams: OVStreamSource) => {\n const peerConnection: OVPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (connection.connectionId !== this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n return this.createMediaPublisher(streams)\n .then((publisher: Publisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OVPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (connection.connectionId === this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n\n return this._lastStreamEvents.reduce((promiseChain: any, streamEvent: any) => promiseChain.then(() => this.streamCreatedHandler(streamEvent)),\n Promise.resolve()).then(() => {\n if (peerConnection.publisher) {\n trace.info('Starting publish to peerConnection.publisher');\n\n return this._session!.publish(peerConnection.publisher)\n .catch((err: OpenViduError) => {\n trace.info('Error during publish', peerConnection.publisher);\n\n if (peerConnection.publisher) {\n trace.info('Error during publish- unpublish');\n this._session!.unpublish(peerConnection.publisher);\n }\n\n throw err;\n });\n }\n\n return Promise.resolve();\n });\n }\n })\n .catch((error: OpenViduError) => {\n trace.error('Error handling new peer connection', error);\n });\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no MediaServer session exists', shouldThrow);\n }\n}\n"]}
@@ -87,7 +87,7 @@ var MediaServerSession = /** @class */function (_super) {
87
87
  };
88
88
  MediaServerSession.prototype.sessionDisconnect = function () {
89
89
  if (this._session) {
90
- return this._session.disconnect();
90
+ return this._session.disconnect(true);
91
91
  }
92
92
  };
93
93
  MediaServerSession.prototype.disconnect = function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/MediaServer.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__importDefault","mod","__esModule","defineProperty","exports","value","MediaSessionBase_1","require","MediaConstants_1","openvidu_browser_1","MediaTracer_1","guards_1","bluebird_1","get_1","trace","getMediaTracer","recordingEvents","MediaServerSession","_super","sessionParams","streamFactory","_this","call","OV","_session","_lastStreamEvents","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onPublisherDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","connection","connectionId","enumerable","configurable","connectOnly","info","error","Promise","reject","OpenVidu","initSession","initSessionEvents","token","clientRole","_sessionParams","catch","err","sessionDisconnect","resolve","promiseDisconnect","_peerConnections","forEach","peerConnection","push","destroyPeerConnection","all","then","removeSessionEvent","off","removeHandlers","getRemoteTrackStats","mediaTrack","undefined","promises","peerRole","destroyPublisherOnPeerConnection","mediaStream","replaceStreamTracks","Error","initHandlers","on","event","emitEvent","RECORD_STARTED","RECORD_STOPPED","RECONNECTING","stream","sessionExistsGuard","warn","destroySubscriberOnPeerConnection","has","delete","peerId","subscriber","unsubscribe","unregisterPeersRemoteMediaTracks","publisher","unpublish","localStream","createMediaSubscriber","remoteStream","subscribe","ownPeerId","getMediaStream","getTracks","addRemoteTrackToPeer","registerPeersRemoteTracks","destinationRole","_sessionStreamsManager","getMediaStreamForRole","videoSource","audioSource","track","kind","SessionClientRole","USER","ovParams","publishAudio","publishVideo","ovPublisher","initPublisher","default","preventDefault","JSON","parse","data","streams","peerType","clientType","SessionClientType","INITIATOR","GUEST","remoteMediaTracks","connectionTimoutPrt","set","reduce","promiseChain","streamEvent","publish","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"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","file":"MediaServer.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar openvidu_browser_1 = require(\"@techsee/openvidu-browser\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar bluebird_1 = require(\"bluebird\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar trace = MediaTracer_1.getMediaTracer('MediaServerSession');\nvar recordingEvents;\n(function (recordingEvents) {\n recordingEvents[\"RECORD_STARTED\"] = \"RECORD_STARTED\";\n recordingEvents[\"RECORD_STOPPED\"] = \"RECORD_STOPPED\";\n recordingEvents[\"RECONNECTING\"] = \"RECONNECTING\";\n})(recordingEvents = exports.recordingEvents || (exports.recordingEvents = {}));\nvar MediaServerSession = /** @class */ (function (_super) {\n __extends(MediaServerSession, _super);\n function MediaServerSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this.OV = null;\n _this._session = null;\n _this._lastStreamEvents = [];\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onPublisherDestroyed = _this.onPublisherDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(MediaServerSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: true,\n configurable: true\n });\n MediaServerSession.prototype.connect = function (connectOnly) {\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return bluebird_1.Promise.reject('Cannot connect to session while another session is active');\n }\n // const iceServers = this._credentials.ice.map((item: any) => ({\n // urls: item.url,\n // username: item.login,\n // credential: item.password\n // }));\n this.OV = new openvidu_browser_1.OpenVidu();\n // this.OV.setAdvancedConfiguration({ iceServers });\n this._session = this.OV.initSession();\n this.initSessionEvents();\n return this._session.connect(this._credentials.token, { clientRole: this._sessionParams.clientRole })\n .catch(function (err) {\n trace.error('Error to connect to session Media Server: ', err);\n throw err;\n });\n };\n MediaServerSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n return this._session.disconnect();\n }\n };\n MediaServerSession.prototype.disconnect = function () {\n var _this = this;\n return new bluebird_1.Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var promiseDisconnect = [];\n _this._peerConnections.forEach(function (peerConnection) {\n promiseDisconnect.push(_this.destroyPeerConnection(peerConnection));\n });\n return bluebird_1.Promise.all(promiseDisconnect).then(function () {\n if (!_this._session) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n _this.removeSessionEvent();\n _this._session.disconnect();\n _this._lastStreamEvents = [];\n delete _this._session;\n delete _this.OV;\n resolve();\n });\n });\n };\n MediaServerSession.prototype.removeSessionEvent = function () {\n if (!this._session) {\n return;\n }\n this._session.off('connectionCreated');\n this._session.off('streamCreated');\n this._session.off('streamDestroyed');\n this._session.off('connectionDestroyed');\n this._session.off('sessionDisconnected');\n this._session.off('recordingStarted');\n this._session.off('recordingStopped');\n this._sessionParams.removeHandlers && this._sessionParams.removeHandlers();\n trace.info('Remove Events Listener');\n };\n MediaServerSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n // @ts-ignore\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n trace.info('onMediaStreamDestroyed');\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return bluebird_1.Promise.all(promises).then(function () { return trace.info('onMediaStreamDestroyed: Success'); });\n };\n MediaServerSession.prototype.onPublisherDestroyed = function (connectionId) {\n trace.info('onPublisherDestroyed');\n var peerConnection = this._peerConnections.get(connectionId);\n if (!peerConnection) {\n return bluebird_1.Promise.resolve();\n }\n return this.destroyPublisherOnPeerConnection(peerConnection);\n };\n MediaServerSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.replaceStreamTracks = function (mediaStream) {\n return bluebird_1.Promise.reject(new Error('Not implemented'));\n };\n MediaServerSession.prototype.initSessionEvents = function () {\n var _this = this;\n if (!this._session) {\n return;\n }\n this._sessionParams.initHandlers && this._sessionParams.initHandlers();\n this._lastStreamEvents = [];\n this._session.on('connectionCreated', this.connectionCreatedHandler);\n this._session.on('streamCreated', this.streamCreatedHandler);\n this._session.on('streamDestroyed', this.streamDestroyedHandler);\n this._session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this._session.on('recordingStarted', function (event) {\n trace.info('recordingStarted event', event);\n _this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n this._session.on('recordingStopped', function (event) {\n trace.info('recordingStopped event', event);\n _this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n this._session.on('reconnecting', function () {\n trace.info('reconnecting event');\n _this.emitEvent(recordingEvents.RECONNECTING);\n });\n this._session.on('sessionDisconnected', this.disconnect);\n };\n MediaServerSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n MediaServerSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n var peerConnection = this._peerConnections.get(connection.connectionId);\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n }\n };\n MediaServerSession.prototype.destroyPeerConnection = function (peerConnection) {\n trace.info('destroyPeerConnection');\n this._peerConnections.delete(peerConnection.peerId);\n return bluebird_1.Promise.all([this.destroyPublisherOnPeerConnection(peerConnection),\n this.destroySubscriberOnPeerConnection(peerConnection)]).then(function () { return undefined; })\n .catch(function () {\n trace.warn('destroyPeerConnection - something wrong with destroy');\n });\n };\n MediaServerSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n trace.info('destroySubscriberOnPeerConnection', peerConnection);\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n trace.info('destroySubscriberOnPeerConnection- before unregisterPeersRemoteMediaTracks');\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(function () { return trace.warn('Error removing remote streams from peerConnection'); })\n .then(function () {\n trace.info('destroySubscriberOnPeerConnection- unregisterPeersRemoteMediaTracks successfully');\n peerConnection.subscriber = null;\n });\n };\n MediaServerSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n trace.info('destroyPublisherOnPeerConnection');\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n trace.info('destroyPublisherOnPeerConnection- unpublish!');\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return bluebird_1.Promise.resolve();\n };\n MediaServerSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n trace.info('createMediaSubscriber');\n return new bluebird_1.Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n return reject('Session not exists');\n }\n trace.info('Before create subscriber');\n var subscriber = _this._session.subscribe(remoteStream, '', {}, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n return reject(err);\n }\n trace.info('create subscriber successfully', subscriber);\n return resolve(subscriber);\n });\n });\n };\n MediaServerSession.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n if (!event) {\n return bluebird_1.Promise.resolve();\n }\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return bluebird_1.Promise.resolve();\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist, add to streams to subscribe list', event);\n this._lastStreamEvents.push(event);\n return bluebird_1.Promise.resolve();\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n return this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n trace.info('Registering remote media tracks', peerConnection.subscriber);\n subscriber.stream.getMediaStream().getTracks().forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n return _this.registerPeersRemoteTracks(peerConnection);\n });\n };\n MediaServerSession.prototype.createStreamForPublishing = function (destinationRole) {\n var _this = this;\n trace.info('createStreamForPublishing');\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n var stream = { videoSource: null, audioSource: null };\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n MediaServerSession.prototype.createMediaPublisher = function (stream) {\n var _this = this;\n var ovParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource\n };\n return new bluebird_1.Promise(function (resolve, reject) {\n var ovPublisher = _this.OV.initPublisher('', ovParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n ovPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n var connectionId = get_1.default(event, 'stream.connection.connectionId');\n _this.onPublisherDestroyed(connectionId);\n //We preventing the default, in order to prevent stop the stream by OV.\n //We managing streams by ourselves and if we allow OV to close the stream, it cannot be reused.\n event.preventDefault();\n });\n resolve(ovPublisher);\n });\n });\n };\n MediaServerSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var destinationRole = JSON.parse(connection.data).clientRole;\n this.createStreamForPublishing(destinationRole)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n return _this.createMediaPublisher(streams)\n .then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (connection.connectionId === _this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) { return promiseChain.then(function () { return _this.streamCreatedHandler(streamEvent); }); }, bluebird_1.Promise.resolve()).then(function () {\n if (peerConnection.publisher) {\n trace.info('Starting publish to peerConnection.publisher');\n return _this._session.publish(peerConnection.publisher)\n .catch(function (err) {\n trace.info('Error during publish', peerConnection.publisher);\n if (peerConnection.publisher) {\n trace.info('Error during publish- unpublish');\n _this._session.unpublish(peerConnection.publisher);\n }\n throw err;\n });\n }\n return bluebird_1.Promise.resolve();\n });\n }\n })\n .catch(function (error) {\n trace.error('Error handling new peer connection', error);\n });\n };\n MediaServerSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no MediaServer session exists', shouldThrow);\n };\n return MediaServerSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.MediaServerSession = MediaServerSession;\n\n//# sourceMappingURL=MediaServer.js.map\n"]}
1
+ {"version":3,"sources":["MediaSession/MediaServer.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__importDefault","mod","__esModule","defineProperty","exports","value","MediaSessionBase_1","require","MediaConstants_1","openvidu_browser_1","MediaTracer_1","guards_1","bluebird_1","get_1","trace","getMediaTracer","recordingEvents","MediaServerSession","_super","sessionParams","streamFactory","_this","call","OV","_session","_lastStreamEvents","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onPublisherDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","connection","connectionId","enumerable","configurable","connectOnly","info","error","Promise","reject","OpenVidu","initSession","initSessionEvents","token","clientRole","_sessionParams","catch","err","sessionDisconnect","resolve","promiseDisconnect","_peerConnections","forEach","peerConnection","push","destroyPeerConnection","all","then","removeSessionEvent","off","removeHandlers","getRemoteTrackStats","mediaTrack","undefined","promises","peerRole","destroyPublisherOnPeerConnection","mediaStream","replaceStreamTracks","Error","initHandlers","on","event","emitEvent","RECORD_STARTED","RECORD_STOPPED","RECONNECTING","stream","sessionExistsGuard","warn","destroySubscriberOnPeerConnection","has","delete","peerId","subscriber","unsubscribe","unregisterPeersRemoteMediaTracks","publisher","unpublish","localStream","createMediaSubscriber","remoteStream","subscribe","ownPeerId","getMediaStream","getTracks","addRemoteTrackToPeer","registerPeersRemoteTracks","destinationRole","_sessionStreamsManager","getMediaStreamForRole","videoSource","audioSource","track","kind","SessionClientRole","USER","ovParams","publishAudio","publishVideo","ovPublisher","initPublisher","default","preventDefault","JSON","parse","data","streams","peerType","clientType","SessionClientType","INITIATOR","GUEST","remoteMediaTracks","connectionTimoutPrt","set","reduce","promiseChain","streamEvent","publish","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"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","file":"MediaServer.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar openvidu_browser_1 = require(\"@techsee/openvidu-browser\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar bluebird_1 = require(\"bluebird\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar trace = MediaTracer_1.getMediaTracer('MediaServerSession');\nvar recordingEvents;\n(function (recordingEvents) {\n recordingEvents[\"RECORD_STARTED\"] = \"RECORD_STARTED\";\n recordingEvents[\"RECORD_STOPPED\"] = \"RECORD_STOPPED\";\n recordingEvents[\"RECONNECTING\"] = \"RECONNECTING\";\n})(recordingEvents = exports.recordingEvents || (exports.recordingEvents = {}));\nvar MediaServerSession = /** @class */ (function (_super) {\n __extends(MediaServerSession, _super);\n function MediaServerSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this.OV = null;\n _this._session = null;\n _this._lastStreamEvents = [];\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onPublisherDestroyed = _this.onPublisherDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(MediaServerSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: true,\n configurable: true\n });\n MediaServerSession.prototype.connect = function (connectOnly) {\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return bluebird_1.Promise.reject('Cannot connect to session while another session is active');\n }\n // const iceServers = this._credentials.ice.map((item: any) => ({\n // urls: item.url,\n // username: item.login,\n // credential: item.password\n // }));\n this.OV = new openvidu_browser_1.OpenVidu();\n // this.OV.setAdvancedConfiguration({ iceServers });\n this._session = this.OV.initSession();\n this.initSessionEvents();\n return this._session.connect(this._credentials.token, { clientRole: this._sessionParams.clientRole })\n .catch(function (err) {\n trace.error('Error to connect to session Media Server: ', err);\n throw err;\n });\n };\n MediaServerSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n return this._session.disconnect(true);\n }\n };\n MediaServerSession.prototype.disconnect = function () {\n var _this = this;\n return new bluebird_1.Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var promiseDisconnect = [];\n _this._peerConnections.forEach(function (peerConnection) {\n promiseDisconnect.push(_this.destroyPeerConnection(peerConnection));\n });\n return bluebird_1.Promise.all(promiseDisconnect).then(function () {\n if (!_this._session) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n _this.removeSessionEvent();\n _this._session.disconnect();\n _this._lastStreamEvents = [];\n delete _this._session;\n delete _this.OV;\n resolve();\n });\n });\n };\n MediaServerSession.prototype.removeSessionEvent = function () {\n if (!this._session) {\n return;\n }\n this._session.off('connectionCreated');\n this._session.off('streamCreated');\n this._session.off('streamDestroyed');\n this._session.off('connectionDestroyed');\n this._session.off('sessionDisconnected');\n this._session.off('recordingStarted');\n this._session.off('recordingStopped');\n this._sessionParams.removeHandlers && this._sessionParams.removeHandlers();\n trace.info('Remove Events Listener');\n };\n MediaServerSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n // @ts-ignore\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n trace.info('onMediaStreamDestroyed');\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return bluebird_1.Promise.all(promises).then(function () { return trace.info('onMediaStreamDestroyed: Success'); });\n };\n MediaServerSession.prototype.onPublisherDestroyed = function (connectionId) {\n trace.info('onPublisherDestroyed');\n var peerConnection = this._peerConnections.get(connectionId);\n if (!peerConnection) {\n return bluebird_1.Promise.resolve();\n }\n return this.destroyPublisherOnPeerConnection(peerConnection);\n };\n MediaServerSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.replaceStreamTracks = function (mediaStream) {\n return bluebird_1.Promise.reject(new Error('Not implemented'));\n };\n MediaServerSession.prototype.initSessionEvents = function () {\n var _this = this;\n if (!this._session) {\n return;\n }\n this._sessionParams.initHandlers && this._sessionParams.initHandlers();\n this._lastStreamEvents = [];\n this._session.on('connectionCreated', this.connectionCreatedHandler);\n this._session.on('streamCreated', this.streamCreatedHandler);\n this._session.on('streamDestroyed', this.streamDestroyedHandler);\n this._session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this._session.on('recordingStarted', function (event) {\n trace.info('recordingStarted event', event);\n _this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n this._session.on('recordingStopped', function (event) {\n trace.info('recordingStopped event', event);\n _this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n this._session.on('reconnecting', function () {\n trace.info('reconnecting event');\n _this.emitEvent(recordingEvents.RECONNECTING);\n });\n this._session.on('sessionDisconnected', this.disconnect);\n };\n MediaServerSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n MediaServerSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n var peerConnection = this._peerConnections.get(connection.connectionId);\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n }\n };\n MediaServerSession.prototype.destroyPeerConnection = function (peerConnection) {\n trace.info('destroyPeerConnection');\n this._peerConnections.delete(peerConnection.peerId);\n return bluebird_1.Promise.all([this.destroyPublisherOnPeerConnection(peerConnection),\n this.destroySubscriberOnPeerConnection(peerConnection)]).then(function () { return undefined; })\n .catch(function () {\n trace.warn('destroyPeerConnection - something wrong with destroy');\n });\n };\n MediaServerSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n trace.info('destroySubscriberOnPeerConnection', peerConnection);\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n trace.info('destroySubscriberOnPeerConnection- before unregisterPeersRemoteMediaTracks');\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(function () { return trace.warn('Error removing remote streams from peerConnection'); })\n .then(function () {\n trace.info('destroySubscriberOnPeerConnection- unregisterPeersRemoteMediaTracks successfully');\n peerConnection.subscriber = null;\n });\n };\n MediaServerSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n trace.info('destroyPublisherOnPeerConnection');\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n trace.info('destroyPublisherOnPeerConnection- unpublish!');\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return bluebird_1.Promise.resolve();\n };\n MediaServerSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n trace.info('createMediaSubscriber');\n return new bluebird_1.Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n return reject('Session not exists');\n }\n trace.info('Before create subscriber');\n var subscriber = _this._session.subscribe(remoteStream, '', {}, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n return reject(err);\n }\n trace.info('create subscriber successfully', subscriber);\n return resolve(subscriber);\n });\n });\n };\n MediaServerSession.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n if (!event) {\n return bluebird_1.Promise.resolve();\n }\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return bluebird_1.Promise.resolve();\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist, add to streams to subscribe list', event);\n this._lastStreamEvents.push(event);\n return bluebird_1.Promise.resolve();\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n return this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n trace.info('Registering remote media tracks', peerConnection.subscriber);\n subscriber.stream.getMediaStream().getTracks().forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n return _this.registerPeersRemoteTracks(peerConnection);\n });\n };\n MediaServerSession.prototype.createStreamForPublishing = function (destinationRole) {\n var _this = this;\n trace.info('createStreamForPublishing');\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n var stream = { videoSource: null, audioSource: null };\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n MediaServerSession.prototype.createMediaPublisher = function (stream) {\n var _this = this;\n var ovParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource\n };\n return new bluebird_1.Promise(function (resolve, reject) {\n var ovPublisher = _this.OV.initPublisher('', ovParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n ovPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n var connectionId = get_1.default(event, 'stream.connection.connectionId');\n _this.onPublisherDestroyed(connectionId);\n //We preventing the default, in order to prevent stop the stream by OV.\n //We managing streams by ourselves and if we allow OV to close the stream, it cannot be reused.\n event.preventDefault();\n });\n resolve(ovPublisher);\n });\n });\n };\n MediaServerSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var destinationRole = JSON.parse(connection.data).clientRole;\n this.createStreamForPublishing(destinationRole)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n return _this.createMediaPublisher(streams)\n .then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (connection.connectionId === _this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) { return promiseChain.then(function () { return _this.streamCreatedHandler(streamEvent); }); }, bluebird_1.Promise.resolve()).then(function () {\n if (peerConnection.publisher) {\n trace.info('Starting publish to peerConnection.publisher');\n return _this._session.publish(peerConnection.publisher)\n .catch(function (err) {\n trace.info('Error during publish', peerConnection.publisher);\n if (peerConnection.publisher) {\n trace.info('Error during publish- unpublish');\n _this._session.unpublish(peerConnection.publisher);\n }\n throw err;\n });\n }\n return bluebird_1.Promise.resolve();\n });\n }\n })\n .catch(function (error) {\n trace.error('Error handling new peer connection', error);\n });\n };\n MediaServerSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no MediaServer session exists', shouldThrow);\n };\n return MediaServerSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.MediaServerSession = MediaServerSession;\n\n//# sourceMappingURL=MediaServer.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSession/MediaSessionBase.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAyC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EACH,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,mBAAmB,EAAE,GAAG,CAAC;CAC5B;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,iBAAkB,SAAQ,iBAAiB;KAEpD;CACJ;AAID,8BAAsB,gBAAgB,CAAC,QAAQ,SAAS,iBAAiB;IACrE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAClE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IAClF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAE1C,SAAS,aAAa,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAQ1H,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/E,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI;IAMzD,SAAS,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB;IAsBpG,SAAS,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,iBAAiB;IAgB3E,SAAS,CAAC,gCAAgC,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnF,SAAS,CAAC,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC;CAiB5F","file":"MediaSessionBase.d.ts","sourcesContent":["import {IMediaSessionPeer} from './MediaSessionBase';\nimport {KnownMediaStream, KnownMediaStreamKind, SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteMediaTrack\n} from '../MediaContracts';\n\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {Nullable} from '@techsee/techsee-common';\nimport {EventEmitter} from 'events';\n\nexport interface IMediaSessionPeer {\n peerId: string;\n peerType: SessionClientType;\n peerRole: SessionClientRole;\n remoteMediaTracks: RemoteMediaTrack[];\n connectionTimoutPrt: any;\n}\n\ndeclare global {\n interface RTCPeerConnection extends IMediaSessionPeer {\n\n }\n}\n\nconst trace = getMediaTracer('MediaSessionBase');\n\nexport abstract class MediaSessionBase<PeerType extends IMediaSessionPeer> {\n protected readonly _peerConnections: Map<string, PeerType>;\n protected readonly _sessionStreamsManager: ISessionStreamsManager;\n protected readonly _sessionParams: MediaSessionParams & MediaSessionConfiguration;\n protected readonly _emitter: EventEmitter;\n\n protected constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new EventEmitter();\n\n this._peerConnections = new Map();\n }\n\n registerEventCallback(event: string, callback: (eventArgs?: any) => void): void {\n this._emitter.on(event, callback);\n }\n\n protected emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n protected addRemoteTrackToPeer(sourcePeerConnection: IMediaSessionPeer, mediaTrack: MediaStreamTrack) {\n if (mediaTrack.kind === KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n\n let trackType: Nullable<KnownMediaStream> = null;\n\n if (mediaTrack.kind.toLowerCase() === KnownMediaStreamKind.Audio) {\n trackType = sourcePeerConnection.peerRole === SessionClientRole.AGENT\n ? KnownMediaStream.AGENT_AUDIO_STREAM : KnownMediaStream.USER_AUDIO_STREAM;\n\n } else {\n trackType = KnownMediaStream.USER_VIDEO_STREAM;\n }\n\n const remoteMediaTrack: RemoteMediaTrack = {mediaTrack, trackType, isRegistered: false};\n\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n }\n\n protected registerPeersRemoteTracks(sourcePeerConnection: IMediaSessionPeer) {\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach((remoteMediaTrack: RemoteMediaTrack) => {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(() => {\n remoteMediaTrack.isRegistered = true;\n })\n .catch((error: any) => {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n }\n\n protected unregisterPeersRemoteMediaTracks(peerConnection: PeerType): Promise<void> {\n const promises: Promise<any>[] = [];\n\n peerConnection.remoteMediaTracks.forEach((remoteMediaTrack) => {\n const removalPromise = this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(() => remoteMediaTrack.isRegistered = false)\n .catch(() => trace.warn('Error while removing remote media track', remoteMediaTrack));\n\n promises.push(removalPromise);\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n protected getPeerConnectionByMediaTrack(mediaTrack: MediaStreamTrack): Nullable<PeerType> {\n let peerConnectionOfTrack: Nullable<PeerType> = null;\n\n this._peerConnections.forEach((peerConnection: PeerType) => {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n\n const remoteTrack = peerConnection.remoteMediaTracks.filter((track) => track.mediaTrack.id === mediaTrack.id);\n\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n\n return peerConnectionOfTrack;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/MediaSession/MediaSessionBase.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAyC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EACH,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,mBAAmB,EAAE,GAAG,CAAC;CAC5B;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,iBAAkB,SAAQ,iBAAiB;KAEpD;CACJ;AAID,8BAAsB,gBAAgB,CAAC,QAAQ,SAAS,iBAAiB;IACrE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAClE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IAClF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAE1C,SAAS,aAAa,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAQ1H,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/E,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI;IAMzD,SAAS,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB;IA+BpG,SAAS,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,iBAAiB;IAgB3E,SAAS,CAAC,gCAAgC,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnF,SAAS,CAAC,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC;CAiB5F","file":"MediaSessionBase.d.ts","sourcesContent":["import {IMediaSessionPeer} from './MediaSessionBase';\nimport {KnownMediaStream, KnownMediaStreamKind, SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteMediaTrack\n} from '../MediaContracts';\n\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {Nullable} from '@techsee/techsee-common';\nimport {EventEmitter} from 'events';\n\nexport interface IMediaSessionPeer {\n peerId: string;\n peerType: SessionClientType;\n peerRole: SessionClientRole;\n remoteMediaTracks: RemoteMediaTrack[];\n connectionTimoutPrt: any;\n}\n\ndeclare global {\n interface RTCPeerConnection extends IMediaSessionPeer {\n\n }\n}\n\nconst trace = getMediaTracer('MediaSessionBase');\n\nexport abstract class MediaSessionBase<PeerType extends IMediaSessionPeer> {\n protected readonly _peerConnections: Map<string, PeerType>;\n protected readonly _sessionStreamsManager: ISessionStreamsManager;\n protected readonly _sessionParams: MediaSessionParams & MediaSessionConfiguration;\n protected readonly _emitter: EventEmitter;\n\n protected constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new EventEmitter();\n\n this._peerConnections = new Map();\n }\n\n registerEventCallback(event: string, callback: (eventArgs?: any) => void): void {\n this._emitter.on(event, callback);\n }\n\n protected emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n protected addRemoteTrackToPeer(sourcePeerConnection: IMediaSessionPeer, mediaTrack: MediaStreamTrack) {\n if (mediaTrack.kind === KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n\n let trackType: Nullable<KnownMediaStream> = null;\n\n if (mediaTrack.kind.toLowerCase() === KnownMediaStreamKind.Audio) {\n switch (sourcePeerConnection.peerRole) {\n case SessionClientRole.AGENT:\n trackType = KnownMediaStream.AGENT_AUDIO_STREAM;\n break;\n case SessionClientRole.OBSERVER:\n trackType = KnownMediaStream.OBSERVER_AUDIO_STREAM;\n break;\n default:\n trackType = KnownMediaStream.USER_AUDIO_STREAM;\n break;\n }\n\n } else {\n trackType = KnownMediaStream.USER_VIDEO_STREAM;\n }\n\n const remoteMediaTrack: RemoteMediaTrack = {mediaTrack, trackType, isRegistered: false};\n\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n }\n\n protected registerPeersRemoteTracks(sourcePeerConnection: IMediaSessionPeer) {\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach((remoteMediaTrack: RemoteMediaTrack) => {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(() => {\n remoteMediaTrack.isRegistered = true;\n })\n .catch((error: any) => {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n }\n\n protected unregisterPeersRemoteMediaTracks(peerConnection: PeerType): Promise<void> {\n const promises: Promise<any>[] = [];\n\n peerConnection.remoteMediaTracks.forEach((remoteMediaTrack) => {\n const removalPromise = this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(() => remoteMediaTrack.isRegistered = false)\n .catch(() => trace.warn('Error while removing remote media track', remoteMediaTrack));\n\n promises.push(removalPromise);\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n protected getPeerConnectionByMediaTrack(mediaTrack: MediaStreamTrack): Nullable<PeerType> {\n let peerConnectionOfTrack: Nullable<PeerType> = null;\n\n this._peerConnections.forEach((peerConnection: PeerType) => {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n\n const remoteTrack = peerConnection.remoteMediaTracks.filter((track) => track.mediaTrack.id === mediaTrack.id);\n\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n\n return peerConnectionOfTrack;\n }\n}\n"]}
@@ -28,7 +28,17 @@ var MediaSessionBase = /** @class */function () {
28
28
  }
29
29
  var trackType = null;
30
30
  if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {
31
- trackType = sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT ? MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM : MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;
31
+ switch (sourcePeerConnection.peerRole) {
32
+ case MediaConstants_1.SessionClientRole.AGENT:
33
+ trackType = MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM;
34
+ break;
35
+ case MediaConstants_1.SessionClientRole.OBSERVER:
36
+ trackType = MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM;
37
+ break;
38
+ default:
39
+ trackType = MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;
40
+ break;
41
+ }
32
42
  } else {
33
43
  trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;
34
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/MediaSessionBase.js"],"names":["Object","defineProperty","exports","value","MediaConstants_1","require","MediaTracer_1","events_1","trace","getMediaTracer","MediaSessionBase","sessionParams","streamFactory","_sessionParams","_sessionStreamsManager","_emitter","EventEmitter","_peerConnections","Map","prototype","registerEventCallback","event","callback","on","emitEvent","eventArgs","_this","setTimeout","emit","addRemoteTrackToPeer","sourcePeerConnection","mediaTrack","kind","KnownMediaStreamKind","Video","peerRole","SessionClientRole","AGENT","trackType","toLowerCase","Audio","KnownMediaStream","AGENT_AUDIO_STREAM","USER_AUDIO_STREAM","USER_VIDEO_STREAM","remoteMediaTrack","isRegistered","remoteMediaTracks","push","registerPeersRemoteTracks","info","forEach","addRemoteMediaTrack","then","catch","error","warn","unregisterPeersRemoteMediaTracks","peerConnection","promises","removalPromise","removeMediaTrack","Promise","all","undefined","getPeerConnectionByMediaTrack","peerConnectionOfTrack","remoteTrack","filter","track","id","length"],"mappings":"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","file":"MediaSessionBase.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar events_1 = require(\"events\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSessionBase');\nvar MediaSessionBase = /** @class */ (function () {\n function MediaSessionBase(sessionParams, streamFactory) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new events_1.EventEmitter();\n this._peerConnections = new Map();\n }\n MediaSessionBase.prototype.registerEventCallback = function (event, callback) {\n this._emitter.on(event, callback);\n };\n MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {\n if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n var trackType = null;\n if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {\n trackType = sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT\n ? MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM : MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;\n }\n else {\n trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n }\n var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n };\n MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {\n var _this = this;\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n _this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(function () {\n remoteMediaTrack.isRegistered = true;\n })\n .catch(function (error) {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n };\n MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {\n var _this = this;\n var promises = [];\n peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n var removalPromise = _this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(function () { return remoteMediaTrack.isRegistered = false; })\n .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });\n promises.push(removalPromise);\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {\n var peerConnectionOfTrack = null;\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n return peerConnectionOfTrack;\n };\n return MediaSessionBase;\n}());\nexports.MediaSessionBase = MediaSessionBase;\n\n//# sourceMappingURL=MediaSessionBase.js.map\n"]}
1
+ {"version":3,"sources":["MediaSession/MediaSessionBase.js"],"names":["Object","defineProperty","exports","value","MediaConstants_1","require","MediaTracer_1","events_1","trace","getMediaTracer","MediaSessionBase","sessionParams","streamFactory","_sessionParams","_sessionStreamsManager","_emitter","EventEmitter","_peerConnections","Map","prototype","registerEventCallback","event","callback","on","emitEvent","eventArgs","_this","setTimeout","emit","addRemoteTrackToPeer","sourcePeerConnection","mediaTrack","kind","KnownMediaStreamKind","Video","peerRole","SessionClientRole","AGENT","trackType","toLowerCase","Audio","KnownMediaStream","AGENT_AUDIO_STREAM","OBSERVER","OBSERVER_AUDIO_STREAM","USER_AUDIO_STREAM","USER_VIDEO_STREAM","remoteMediaTrack","isRegistered","remoteMediaTracks","push","registerPeersRemoteTracks","info","forEach","addRemoteMediaTrack","then","catch","error","warn","unregisterPeersRemoteMediaTracks","peerConnection","promises","removalPromise","removeMediaTrack","Promise","all","undefined","getPeerConnectionByMediaTrack","peerConnectionOfTrack","remoteTrack","filter","track","id","length"],"mappings":"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","file":"MediaSessionBase.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar events_1 = require(\"events\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSessionBase');\nvar MediaSessionBase = /** @class */ (function () {\n function MediaSessionBase(sessionParams, streamFactory) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new events_1.EventEmitter();\n this._peerConnections = new Map();\n }\n MediaSessionBase.prototype.registerEventCallback = function (event, callback) {\n this._emitter.on(event, callback);\n };\n MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {\n if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n var trackType = null;\n if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {\n switch (sourcePeerConnection.peerRole) {\n case MediaConstants_1.SessionClientRole.AGENT:\n trackType = MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM;\n break;\n case MediaConstants_1.SessionClientRole.OBSERVER:\n trackType = MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM;\n break;\n default:\n trackType = MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;\n break;\n }\n }\n else {\n trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n }\n var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n };\n MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {\n var _this = this;\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n _this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(function () {\n remoteMediaTrack.isRegistered = true;\n })\n .catch(function (error) {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n };\n MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {\n var _this = this;\n var promises = [];\n peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n var removalPromise = _this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(function () { return remoteMediaTrack.isRegistered = false; })\n .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });\n promises.push(removalPromise);\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {\n var peerConnectionOfTrack = null;\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n return peerConnectionOfTrack;\n };\n return MediaSessionBase;\n}());\nexports.MediaSessionBase = MediaSessionBase;\n\n//# sourceMappingURL=MediaSessionBase.js.map\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techsee/techsee-media-service",
3
- "version": "0.10.6",
3
+ "version": "0.10.8",
4
4
  "description": "Techsee Media Service Client",
5
5
  "author": "TechSee",
6
6
  "main": "lib/index.js",
@@ -18,8 +18,8 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@techsee/kurento-utils-temasys-mod": "6.6.3-dev-3",
21
- "@techsee/openvidu-browser": "~12.15.5",
22
- "@techsee/techsee-common": "^0.19.40",
21
+ "@techsee/openvidu-browser": "~12.15.6",
22
+ "@techsee/techsee-common": "^0.19.44",
23
23
  "bluebird": "~3.7.2",
24
24
  "kurento-utils": "6.6.2",
25
25
  "lodash": "4.13.1",