@besovideo/webrtc-player 0.9.82 → 0.9.83

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.
@@ -117,7 +117,7 @@ var bvPlayerCore = (() => {
117
117
  var define_processenv_default;
118
118
  var init_define_processenv = __esm({
119
119
  "<define:processenv>"() {
120
- define_processenv_default = { NODE_ENV: "production", SH_LIB_NAME: "@besovideo/webrtc-player", SH_LIB_VERSION: "0.9.82", PROJECT_NAMESPACE: "bvplayer" };
120
+ define_processenv_default = { NODE_ENV: "production", SH_LIB_NAME: "@besovideo/webrtc-player", SH_LIB_VERSION: "0.9.83", PROJECT_NAMESPACE: "bvplayer" };
121
121
  }
122
122
  });
123
123
 
@@ -15971,10 +15971,16 @@ ${event.candidate ? event.candidate.candidate : "(null)"}`
15971
15971
  let iCount = 1;
15972
15972
  const intervalToken = setInterval(() => {
15973
15973
  if (pc.connectionState == "connected") {
15974
- invokeTrack();
15975
- r();
15974
+ try {
15975
+ invokeTrack();
15976
+ r();
15977
+ } catch (e) {
15978
+ }
15976
15979
  } else if (iCount > 500) {
15977
- closeDialog2 && closeDialog2();
15980
+ try {
15981
+ closeDialog2 && closeDialog2();
15982
+ } catch (e) {
15983
+ }
15978
15984
  j(t("connect-failed"));
15979
15985
  } else {
15980
15986
  iCount++;
@@ -20013,6 +20019,9 @@ ${event.candidate ? event.candidate.candidate : "(null)"}`
20013
20019
  if (!stream)
20014
20020
  return;
20015
20021
  logger_default.debug("webrtc\u6D41", stream, stream.getVideoTracks());
20022
+ if (!this._video) {
20023
+ return;
20024
+ }
20016
20025
  this._video.srcObject = stream;
20017
20026
  const videoTrack = stream.getTracks()[0];
20018
20027
  videoTrack.onended = (e) => {
@@ -20035,6 +20044,7 @@ ${event.candidate ? event.candidate.candidate : "(null)"}`
20035
20044
  (_b = (_a = this.panel) == null ? void 0 : _a.controller.RecordButton) == null ? void 0 : _b.dispatch("click");
20036
20045
  }
20037
20046
  this.dispatch("close");
20047
+ this.clearEventListener("close");
20038
20048
  this.closeWebrtc();
20039
20049
  });
20040
20050
  }
@@ -23536,6 +23546,57 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23536
23546
  return instanceState;
23537
23547
  }
23538
23548
 
23549
+ // src/components/dialogManager.ts
23550
+ init_define_processenv();
23551
+ init_jsx_shim();
23552
+ var DialogManager = class {
23553
+ constructor() {
23554
+ this.dialogState = 4 /* CLOSED */;
23555
+ this.waitPromisesInvoke = [];
23556
+ }
23557
+ tryInOpening(force) {
23558
+ if (this.dialogState == 4 /* CLOSED */ || force) {
23559
+ this.dialogState = 1 /* OPENING */;
23560
+ return true;
23561
+ }
23562
+ return false;
23563
+ }
23564
+ enterOpeningCanClose() {
23565
+ if (this.dialogState == 1 /* OPENING */) {
23566
+ this.dialogState = 1.1 /* OPENING_CAN_CLOSE */;
23567
+ return this.invokeWaitPromises();
23568
+ }
23569
+ return false;
23570
+ }
23571
+ enterClosed() {
23572
+ this.dialogState = 4 /* CLOSED */;
23573
+ }
23574
+ invokeWaitPromises() {
23575
+ if (this.dialogState != 1 /* OPENING */) {
23576
+ if (this.waitPromisesInvoke.length > 0) {
23577
+ this.waitPromisesInvoke.forEach((resolve) => {
23578
+ try {
23579
+ resolve();
23580
+ } catch (e) {
23581
+ }
23582
+ });
23583
+ this.waitPromisesInvoke.splice(0, this.waitPromisesInvoke.length);
23584
+ return true;
23585
+ }
23586
+ }
23587
+ return false;
23588
+ }
23589
+ waitForCanClose() {
23590
+ return new Promise((resolve) => {
23591
+ if (this.dialogState == 1 /* OPENING */) {
23592
+ this.waitPromisesInvoke.push(resolve);
23593
+ } else {
23594
+ resolve();
23595
+ }
23596
+ });
23597
+ }
23598
+ };
23599
+
23539
23600
  // src/components/puPlayer.tsx
23540
23601
  var createProductRemoteSdp = (puOption, tempToken, callBack, signal) => (localDescription) => __async(void 0, null, function* () {
23541
23602
  if (localDescription.type !== "offer")
@@ -23788,6 +23849,7 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23788
23849
  player.mask.visible = true;
23789
23850
  player.mask.text = t("lost-connection");
23790
23851
  player.close();
23852
+ dlgMgr.enterClosed();
23791
23853
  onDisConnected && onDisConnected();
23792
23854
  useRecntMgr == null ? void 0 : useRecntMgr.reconnect();
23793
23855
  },
@@ -23834,8 +23896,10 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23834
23896
  return;
23835
23897
  }
23836
23898
  logger_default.debug("PuPlayer close", dialogId);
23837
- player.mask.visible = true;
23838
- player.mask.text = t("video-closed");
23899
+ if (player.mask) {
23900
+ player.mask.visible = true;
23901
+ player.mask.text = t("video-closed");
23902
+ }
23839
23903
  onClose && onClose();
23840
23904
  if (dialogId) {
23841
23905
  try {
@@ -23853,6 +23917,7 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23853
23917
  throw err;
23854
23918
  }
23855
23919
  }
23920
+ const dlgMgr = new DialogManager();
23856
23921
  const instance2 = {
23857
23922
  getVideoElement: () => {
23858
23923
  const el = player.video.getVideoEl();
@@ -23866,6 +23931,9 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23866
23931
  open: function() {
23867
23932
  return __async(this, arguments, function* (muted2 = false, protocol = type) {
23868
23933
  var _a2, _b;
23934
+ if (!dlgMgr.tryInOpening()) {
23935
+ return;
23936
+ }
23869
23937
  muted2 = arguments.length == 0 ? currentMuted : muted2;
23870
23938
  console.log("open with muted: ", muted2);
23871
23939
  player.clearEventListener("close");
@@ -23876,8 +23944,10 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23876
23944
  yield handleClose();
23877
23945
  player.addEventListener("close", () => __async(this, null, function* () {
23878
23946
  console.log("\u5173\u95ED\u89C6\u9891");
23947
+ yield dlgMgr.waitForCanClose();
23879
23948
  abortController.abort();
23880
23949
  yield handleClose();
23950
+ dlgMgr.enterClosed();
23881
23951
  }));
23882
23952
  logger_default.debug("PuPlayer close before open");
23883
23953
  player.mask.visible = false;
@@ -23886,11 +23956,15 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23886
23956
  let hplayer = null;
23887
23957
  try {
23888
23958
  if (protocol === "ws-bvrtc") {
23959
+ dlgMgr.enterClosed();
23889
23960
  throw "protocol == ws-bvrtc";
23890
23961
  }
23891
23962
  player.enableCanvas(false);
23892
23963
  this.protocol = "webrtc";
23893
23964
  yield player.prepareWebrtc();
23965
+ if (dlgMgr.enterOpeningCanClose()) {
23966
+ return;
23967
+ }
23894
23968
  if (noVideoRendeAudioWaveform && player.video.srcObject && !defaultMediaOption.video) {
23895
23969
  audioWaveShow.setMediaStream(player.video.srcObject);
23896
23970
  audioWaveShow.setEle(playerEl);
@@ -23911,8 +23985,14 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23911
23985
  player.mask.visible = true;
23912
23986
  player.mask.text = e.toString();
23913
23987
  onConnectedFailed && onConnectedFailed();
23988
+ if (dlgMgr.enterOpeningCanClose()) {
23989
+ return;
23990
+ }
23991
+ dlgMgr.enterClosed();
23914
23992
  reconnectMgr == null ? void 0 : reconnectMgr.reconnect();
23915
23993
  return;
23994
+ } else {
23995
+ dlgMgr.enterClosed();
23916
23996
  }
23917
23997
  try {
23918
23998
  let DisplayVolumn2 = function(volume) {
@@ -23927,6 +24007,9 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23927
24007
  }
23928
24008
  };
23929
24009
  var DisplayVolumn = DisplayVolumn2;
24010
+ if (!dlgMgr.tryInOpening()) {
24011
+ return;
24012
+ }
23930
24013
  logger_default.debug("error\u7684\u7C7B\u578B", e.name, e instanceof OpenDialogError);
23931
24014
  if (e instanceof OpenDialogError)
23932
24015
  throw e;
@@ -23946,6 +24029,9 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23946
24029
  hplayer.setPrefix(apiPrefix);
23947
24030
  }
23948
24031
  yield hplayer.open(5e3, 3, "");
24032
+ if (dlgMgr.enterOpeningCanClose()) {
24033
+ return;
24034
+ }
23949
24035
  if (typeof bvrtcConfig.realTimeLevel == "number") {
23950
24036
  if (bvrtcConfig.realTimeLevel >= 0 && bvrtcConfig.realTimeLevel <= 10) {
23951
24037
  yield hplayer.setRealTimeIndex(bvrtcConfig.realTimeLevel);
@@ -23992,6 +24078,9 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
23992
24078
  }
23993
24079
  throw t("da-kai-shi-bai");
23994
24080
  }
24081
+ if (dlgMgr.enterOpeningCanClose()) {
24082
+ return;
24083
+ }
23995
24084
  player.statsInfosV1 = () => {
23996
24085
  return GetBvrtcIStatsInfosV1(hplayer);
23997
24086
  };
@@ -24102,6 +24191,7 @@ registerProcessor('bv-audio-processor', BVAudioProcessor);
24102
24191
  player.mask.text = e2.toString();
24103
24192
  hplayer == null ? void 0 : hplayer.close();
24104
24193
  onConnectedFailed && onConnectedFailed();
24194
+ dlgMgr.enterClosed();
24105
24195
  reconnectMgr == null ? void 0 : reconnectMgr.reconnect();
24106
24196
  throw e2;
24107
24197
  }
package/dist/main.es.js CHANGED
@@ -111,7 +111,7 @@ var __async = (__this, __arguments, generator) => {
111
111
  var define_processenv_default;
112
112
  var init_define_processenv = __esm({
113
113
  "<define:processenv>"() {
114
- define_processenv_default = { NODE_ENV: "production", SH_LIB_NAME: "@besovideo/webrtc-player", SH_LIB_VERSION: "0.9.82", PROJECT_NAMESPACE: "bvplayer" };
114
+ define_processenv_default = { NODE_ENV: "production", SH_LIB_NAME: "@besovideo/webrtc-player", SH_LIB_VERSION: "0.9.83", PROJECT_NAMESPACE: "bvplayer" };
115
115
  }
116
116
  });
117
117
 
@@ -15955,10 +15955,16 @@ var connect = (param, onGotStream) => __async(void 0, null, function* () {
15955
15955
  let iCount = 1;
15956
15956
  const intervalToken = setInterval(() => {
15957
15957
  if (pc.connectionState == "connected") {
15958
- invokeTrack();
15959
- r();
15958
+ try {
15959
+ invokeTrack();
15960
+ r();
15961
+ } catch (e) {
15962
+ }
15960
15963
  } else if (iCount > 500) {
15961
- closeDialog2 && closeDialog2();
15964
+ try {
15965
+ closeDialog2 && closeDialog2();
15966
+ } catch (e) {
15967
+ }
15962
15968
  j(t("connect-failed"));
15963
15969
  } else {
15964
15970
  iCount++;
@@ -19997,6 +20003,9 @@ var PlayerPlugin = class extends Plugin {
19997
20003
  if (!stream)
19998
20004
  return;
19999
20005
  logger_default.debug("webrtc\u6D41", stream, stream.getVideoTracks());
20006
+ if (!this._video) {
20007
+ return;
20008
+ }
20000
20009
  this._video.srcObject = stream;
20001
20010
  const videoTrack = stream.getTracks()[0];
20002
20011
  videoTrack.onended = (e) => {
@@ -20019,6 +20028,7 @@ var PlayerPlugin = class extends Plugin {
20019
20028
  (_b = (_a = this.panel) == null ? void 0 : _a.controller.RecordButton) == null ? void 0 : _b.dispatch("click");
20020
20029
  }
20021
20030
  this.dispatch("close");
20031
+ this.clearEventListener("close");
20022
20032
  this.closeWebrtc();
20023
20033
  });
20024
20034
  }
@@ -23520,6 +23530,57 @@ function CreatePlayerState(player) {
23520
23530
  return instanceState;
23521
23531
  }
23522
23532
 
23533
+ // src/components/dialogManager.ts
23534
+ init_define_processenv();
23535
+ init_jsx_shim();
23536
+ var DialogManager = class {
23537
+ constructor() {
23538
+ this.dialogState = 4 /* CLOSED */;
23539
+ this.waitPromisesInvoke = [];
23540
+ }
23541
+ tryInOpening(force) {
23542
+ if (this.dialogState == 4 /* CLOSED */ || force) {
23543
+ this.dialogState = 1 /* OPENING */;
23544
+ return true;
23545
+ }
23546
+ return false;
23547
+ }
23548
+ enterOpeningCanClose() {
23549
+ if (this.dialogState == 1 /* OPENING */) {
23550
+ this.dialogState = 1.1 /* OPENING_CAN_CLOSE */;
23551
+ return this.invokeWaitPromises();
23552
+ }
23553
+ return false;
23554
+ }
23555
+ enterClosed() {
23556
+ this.dialogState = 4 /* CLOSED */;
23557
+ }
23558
+ invokeWaitPromises() {
23559
+ if (this.dialogState != 1 /* OPENING */) {
23560
+ if (this.waitPromisesInvoke.length > 0) {
23561
+ this.waitPromisesInvoke.forEach((resolve) => {
23562
+ try {
23563
+ resolve();
23564
+ } catch (e) {
23565
+ }
23566
+ });
23567
+ this.waitPromisesInvoke.splice(0, this.waitPromisesInvoke.length);
23568
+ return true;
23569
+ }
23570
+ }
23571
+ return false;
23572
+ }
23573
+ waitForCanClose() {
23574
+ return new Promise((resolve) => {
23575
+ if (this.dialogState == 1 /* OPENING */) {
23576
+ this.waitPromisesInvoke.push(resolve);
23577
+ } else {
23578
+ resolve();
23579
+ }
23580
+ });
23581
+ }
23582
+ };
23583
+
23523
23584
  // src/components/puPlayer.tsx
23524
23585
  var createProductRemoteSdp = (puOption, tempToken, callBack, signal) => (localDescription) => __async(void 0, null, function* () {
23525
23586
  if (localDescription.type !== "offer")
@@ -23772,6 +23833,7 @@ var PuPlayer = (props) => {
23772
23833
  player.mask.visible = true;
23773
23834
  player.mask.text = t("lost-connection");
23774
23835
  player.close();
23836
+ dlgMgr.enterClosed();
23775
23837
  onDisConnected && onDisConnected();
23776
23838
  useRecntMgr == null ? void 0 : useRecntMgr.reconnect();
23777
23839
  },
@@ -23818,8 +23880,10 @@ var PuPlayer = (props) => {
23818
23880
  return;
23819
23881
  }
23820
23882
  logger_default.debug("PuPlayer close", dialogId);
23821
- player.mask.visible = true;
23822
- player.mask.text = t("video-closed");
23883
+ if (player.mask) {
23884
+ player.mask.visible = true;
23885
+ player.mask.text = t("video-closed");
23886
+ }
23823
23887
  onClose && onClose();
23824
23888
  if (dialogId) {
23825
23889
  try {
@@ -23837,6 +23901,7 @@ var PuPlayer = (props) => {
23837
23901
  throw err;
23838
23902
  }
23839
23903
  }
23904
+ const dlgMgr = new DialogManager();
23840
23905
  const instance2 = {
23841
23906
  getVideoElement: () => {
23842
23907
  const el = player.video.getVideoEl();
@@ -23850,6 +23915,9 @@ var PuPlayer = (props) => {
23850
23915
  open: function() {
23851
23916
  return __async(this, arguments, function* (muted2 = false, protocol = type) {
23852
23917
  var _a2, _b;
23918
+ if (!dlgMgr.tryInOpening()) {
23919
+ return;
23920
+ }
23853
23921
  muted2 = arguments.length == 0 ? currentMuted : muted2;
23854
23922
  console.log("open with muted: ", muted2);
23855
23923
  player.clearEventListener("close");
@@ -23860,8 +23928,10 @@ var PuPlayer = (props) => {
23860
23928
  yield handleClose();
23861
23929
  player.addEventListener("close", () => __async(this, null, function* () {
23862
23930
  console.log("\u5173\u95ED\u89C6\u9891");
23931
+ yield dlgMgr.waitForCanClose();
23863
23932
  abortController.abort();
23864
23933
  yield handleClose();
23934
+ dlgMgr.enterClosed();
23865
23935
  }));
23866
23936
  logger_default.debug("PuPlayer close before open");
23867
23937
  player.mask.visible = false;
@@ -23870,11 +23940,15 @@ var PuPlayer = (props) => {
23870
23940
  let hplayer = null;
23871
23941
  try {
23872
23942
  if (protocol === "ws-bvrtc") {
23943
+ dlgMgr.enterClosed();
23873
23944
  throw "protocol == ws-bvrtc";
23874
23945
  }
23875
23946
  player.enableCanvas(false);
23876
23947
  this.protocol = "webrtc";
23877
23948
  yield player.prepareWebrtc();
23949
+ if (dlgMgr.enterOpeningCanClose()) {
23950
+ return;
23951
+ }
23878
23952
  if (noVideoRendeAudioWaveform && player.video.srcObject && !defaultMediaOption.video) {
23879
23953
  audioWaveShow.setMediaStream(player.video.srcObject);
23880
23954
  audioWaveShow.setEle(playerEl);
@@ -23895,8 +23969,14 @@ var PuPlayer = (props) => {
23895
23969
  player.mask.visible = true;
23896
23970
  player.mask.text = e.toString();
23897
23971
  onConnectedFailed && onConnectedFailed();
23972
+ if (dlgMgr.enterOpeningCanClose()) {
23973
+ return;
23974
+ }
23975
+ dlgMgr.enterClosed();
23898
23976
  reconnectMgr == null ? void 0 : reconnectMgr.reconnect();
23899
23977
  return;
23978
+ } else {
23979
+ dlgMgr.enterClosed();
23900
23980
  }
23901
23981
  try {
23902
23982
  let DisplayVolumn2 = function(volume) {
@@ -23911,6 +23991,9 @@ var PuPlayer = (props) => {
23911
23991
  }
23912
23992
  };
23913
23993
  var DisplayVolumn = DisplayVolumn2;
23994
+ if (!dlgMgr.tryInOpening()) {
23995
+ return;
23996
+ }
23914
23997
  logger_default.debug("error\u7684\u7C7B\u578B", e.name, e instanceof OpenDialogError);
23915
23998
  if (e instanceof OpenDialogError)
23916
23999
  throw e;
@@ -23930,6 +24013,9 @@ var PuPlayer = (props) => {
23930
24013
  hplayer.setPrefix(apiPrefix);
23931
24014
  }
23932
24015
  yield hplayer.open(5e3, 3, "");
24016
+ if (dlgMgr.enterOpeningCanClose()) {
24017
+ return;
24018
+ }
23933
24019
  if (typeof bvrtcConfig.realTimeLevel == "number") {
23934
24020
  if (bvrtcConfig.realTimeLevel >= 0 && bvrtcConfig.realTimeLevel <= 10) {
23935
24021
  yield hplayer.setRealTimeIndex(bvrtcConfig.realTimeLevel);
@@ -23976,6 +24062,9 @@ var PuPlayer = (props) => {
23976
24062
  }
23977
24063
  throw t("da-kai-shi-bai");
23978
24064
  }
24065
+ if (dlgMgr.enterOpeningCanClose()) {
24066
+ return;
24067
+ }
23979
24068
  player.statsInfosV1 = () => {
23980
24069
  return GetBvrtcIStatsInfosV1(hplayer);
23981
24070
  };
@@ -24086,6 +24175,7 @@ var PuPlayer = (props) => {
24086
24175
  player.mask.text = e2.toString();
24087
24176
  hplayer == null ? void 0 : hplayer.close();
24088
24177
  onConnectedFailed && onConnectedFailed();
24178
+ dlgMgr.enterClosed();
24089
24179
  reconnectMgr == null ? void 0 : reconnectMgr.reconnect();
24090
24180
  throw e2;
24091
24181
  }
@@ -0,0 +1,10 @@
1
+ export declare class DialogManager {
2
+ private dialogState;
3
+ constructor();
4
+ tryInOpening(force?: boolean): boolean;
5
+ enterOpeningCanClose(): boolean;
6
+ enterClosed(): void;
7
+ private waitPromisesInvoke;
8
+ private invokeWaitPromises;
9
+ waitForCanClose(): Promise<void>;
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@besovideo/webrtc-player",
3
- "version": "0.9.82",
3
+ "version": "0.9.83",
4
4
  "description": "@besovideo/webrtc-player desc",
5
5
  "type": "module",
6
6
  "types": "./dist/types/main.d.ts",