Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0a8c67d

Browse files
committed
fix: 当播放设备取流卡顿情况下切换设备accesstoken与设备序列号不对应问题
1 parent 2ff6cd8 commit 0a8c67d

File tree

1 file changed

+88
-65
lines changed

1 file changed

+88
-65
lines changed

ezuikit.js

Lines changed: 88 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -275,57 +275,6 @@ var request = function request(url, method, params, header, success, error) {
275275
}
276276
http_request.send(data);
277277
};
278-
// 增加防抖函数
279-
var debouncePromise = function debouncePromise(fn, delay) {
280-
var immdiate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
281-
var timer = null;
282-
var isInvoke = false;
283-
return function _debounce() {
284-
var _this = this;
285-
for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) {
286-
arg[_key] = arguments[_key];
287-
}
288-
return new Promise(function (resolve, reject) {
289-
if (timer) {
290-
console.log("防抖, delay 后执行", timer, delay, fn);
291-
clearTimeout(timer);
292-
}
293-
// 双击执行2次
294-
if (immdiate && !isInvoke) {
295-
console.log("防抖 第一次执行...", isInvoke, fn);
296-
isInvoke = true;
297-
fn.apply(_this, arg).then(function () {
298-
resolve();
299-
})["catch"](function (err) {
300-
console.log("防抖,err", err);
301-
reject();
302-
});
303-
setTimeout(function () {
304-
isInvoke = false;
305-
}, delay);
306-
} else {
307-
if (isInvoke) {
308-
console.log("操作过于频繁,仅支持" + delay + "ms时间内切换一次");
309-
reject({
310-
code: -1,
311-
msg: "操作过于频繁,仅支持" + delay + "ms时间内切换一次"
312-
});
313-
return false;
314-
}
315-
timer = setTimeout(function () {
316-
console.log("防抖 执行...", fn);
317-
fn.apply(_this, arg).then(function () {
318-
resolve();
319-
})["catch"](function (err) {
320-
console.log("防抖,err", err);
321-
reject();
322-
});
323-
isInvoke = false;
324-
}, delay);
325-
}
326-
});
327-
};
328-
};
329278

330279
var HLS = /*#__PURE__*/function () {
331280
function HLS(videoId, url) {
@@ -31141,6 +31090,62 @@ var Monitor = /*#__PURE__*/function () {
3114131090
});
3114231091
var EZUIKitV3$1 = EZUIKitV3;
3114331092

31093+
/* global setTimeout, clearTimeout */
31094+
var dist = function debounce(fn) {
31095+
var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
31096+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
31097+
var lastCallAt = void 0;
31098+
var deferred = void 0;
31099+
var timer = void 0;
31100+
var pendingArgs = [];
31101+
return function debounced() {
31102+
var currentWait = getWait(wait);
31103+
var currentTime = new Date().getTime();
31104+
var isCold = !lastCallAt || currentTime - lastCallAt > currentWait;
31105+
lastCallAt = currentTime;
31106+
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
31107+
args[_key] = arguments[_key];
31108+
}
31109+
if (isCold && options.leading) {
31110+
return options.accumulate ? Promise.resolve(fn.call(this, [args])).then(function (result) {
31111+
return result[0];
31112+
}) : Promise.resolve(fn.call.apply(fn, [this].concat(args)));
31113+
}
31114+
if (deferred) {
31115+
clearTimeout(timer);
31116+
} else {
31117+
deferred = defer();
31118+
}
31119+
pendingArgs.push(args);
31120+
timer = setTimeout(flush.bind(this), currentWait);
31121+
if (options.accumulate) {
31122+
var argsIndex = pendingArgs.length - 1;
31123+
return deferred.promise.then(function (results) {
31124+
return results[argsIndex];
31125+
});
31126+
}
31127+
return deferred.promise;
31128+
};
31129+
function flush() {
31130+
var thisDeferred = deferred;
31131+
clearTimeout(timer);
31132+
Promise.resolve(options.accumulate ? fn.call(this, pendingArgs) : fn.apply(this, pendingArgs[pendingArgs.length - 1])).then(thisDeferred.resolve, thisDeferred.reject);
31133+
pendingArgs = [];
31134+
deferred = null;
31135+
}
31136+
};
31137+
function getWait(wait) {
31138+
return typeof wait === 'function' ? wait() : wait;
31139+
}
31140+
function defer() {
31141+
var deferred = {};
31142+
deferred.promise = new Promise(function (resolve, reject) {
31143+
deferred.resolve = resolve;
31144+
deferred.reject = reject;
31145+
});
31146+
return deferred;
31147+
}
31148+
3114431149
/**
3114531150
* Created by wangweijie5 on 2016/12/16.
3114631151
*/
@@ -31737,6 +31742,9 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3173731742
function EZUIKitPlayer(params) {
3173831743
var _this = this;
3173931744
_classCallCheck$1(this, EZUIKitPlayer);
31745+
// 解决当ws连接建立但是没有推流导致未触发播放成功事件,
31746+
// 此时切换设备执行 播放器 stop 时触发了播放成功事件导致设备序列号重置
31747+
this.isStoping = false; // 是否在播放前 stop 执行过程中
3174031748
var _params$autoplay = params.autoplay,
3174131749
autoplay = _params$autoplay === void 0 ? true : _params$autoplay;
3174231750
// 如果设置了模板(除精简版),此处不自动播放,根据模板判断是否执行自动播放:
@@ -31967,14 +31975,15 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3196731975
return new EZUIKitV3$1.EZUIKitPlayer(params);
3196831976
}
3196931977
// this.stop = debouncePromise(()=>this._stop(),0,true);
31970-
this.play = debouncePromise(function (options) {
31978+
this.play = dist(function (options) {
3197131979
return _this._play(options);
31972-
}, 1000, true);
31973-
// this.pause = debouncePromise(()=>this._pause(),1000,true);
31974-
this.resume = debouncePromise(function (time) {
31980+
}, 500, true);
31981+
this.resume = dist(function (time) {
3197531982
return _this._resume(time);
31976-
}, 1000, true);
31977-
//this.changePlayUrl = debouncePromise((time)=>this._changePlayUrl(time),1000,true);
31983+
}, 500, true);
31984+
this.changePlayUrl = dist(function (options) {
31985+
return _this._changePlayUrl(options);
31986+
}, 500);
3197831987
// 监听到页面退出
3197931988
// 研究院反馈,播放过程中退出页面需要执行停止视频,否则可能导致浏览器崩溃
3198031989
window.addEventListener("beforeunload", function () {
@@ -32211,6 +32220,7 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3221132220
key: "_getRealUrlPromise",
3221232221
value: function _getRealUrlPromise(accessToken, url) {
3221332222
var _this3 = this;
32223+
console.log("\u83B7\u53D6\u64AD\u653E\u5730\u5740 url => ".concat(url, " ").concat(this.accessToken));
3221432224
var apiDomain = this.env.domain;
3221532225
if (this.env) {
3221632226
apiDomain = this.env.domain;
@@ -32520,7 +32530,7 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3252032530
key: "_pluginPlay",
3252132531
value: function _pluginPlay(data, successCallback, errorCallback) {
3252232532
var _this4 = this;
32523-
console.log("get real url result ===", data);
32533+
console.log("执行播放 _pluginPlay", data);
3252432534
if (!data) {
3252532535
return false;
3252632536
}
@@ -32543,8 +32553,17 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3254332553
var wsParams = {
3254432554
playURL: getPlayParams(data).websocketStreamingParam
3254532555
};
32556+
console.log('播放前 stop 阶段 结束');
32557+
this.isStoping = false;
32558+
var now = Date.now();
32559+
console.log('执行播放 ... this.jSPlugin.JS_Play at ', now);
3254632560
this.jSPlugin.JS_Play(wsUrl, wsParams, 0).then(function () {
32547-
console.log("播放成功");
32561+
console.log("执行播放 ... this.jSPlugin.JS_Play 播放成功", wsUrl, wsParams);
32562+
console.log("执行播放耗时 ", Date.now() - now);
32563+
if (_this4.isStoping) {
32564+
console.log('现在在播放前 stop 阶段,此次应为无效播放成功触发。不执行后续回调, 此次耗时无效');
32565+
return;
32566+
}
3254832567
if (_this4.validateCode && typeof _this4.jSPlugin.decoderVersion !== 'undefined' && _this4.jSPlugin.decoderVersion === '2.0') {
3254932568
_this4.jSPlugin.JS_SetSecretKey(0, _this4.validateCode);
3255032569
}
@@ -32646,6 +32665,7 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3264632665
key: "_play",
3264732666
value: function _play(options) {
3264832667
var _this5 = this;
32668+
console.log("\u6267\u884C\u64AD\u653E play options.url =>", options);
3264932669
this.pluginStatus.setPlayStatus({
3265032670
play: false,
3265132671
loading: true
@@ -32672,8 +32692,10 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3267232692
}
3267332693
}
3267432694
var promise = new Promise(function (resolve, reject) {
32695+
console.log('执行 播放前 stop');
32696+
_this5.isStoping = true;
3267532697
_this5.jSPlugin.JS_Stop(0).then(function () {
32676-
console.log("play_stop- success");
32698+
console.log("\u64AD\u653E\u524D stop \u6267\u884C\u6210\u529F this.url => ".concat(_this5.url, " ").concat(_this5.accessToken));
3267732699
_this5._getRealUrlPromise(_this5.accessToken, _this5.url).then(function (data) {
3267832700
_this5._pluginPlay(data, function () {
3267932701
return resolve(true);
@@ -32787,26 +32809,27 @@ var EZUIKitPlayer = /*#__PURE__*/function () {
3278732809
}
3278832810
}
3278932811
}, {
32790-
key: "changePlayUrl",
32791-
value: function changePlayUrl(options) {
32812+
key: "_changePlayUrl",
32813+
value: function _changePlayUrl(options) {
3279232814
var _this8 = this;
32815+
console.log('_changePlayUrl');
3279332816
this.reSetTheme();
3279432817
var initUrl = this.url;
3279532818
var url = matchUrl(initUrl, options);
3279632819
if (options.accessToken) {
3279732820
this.accessToken = options.accessToken;
3279832821
}
32822+
this.url = url;
3279932823
var promise = new Promise(function (resolve, reject) {
32800-
console.log("changePlayUrl stop success");
3280132824
var changePlayUrlParams = {
3280232825
url: url
3280332826
};
3280432827
if (options.accessToken) {
3280532828
changePlayUrlParams["accessToken"] = options.accessToken;
3280632829
}
32807-
console.log("changePlayUrlParams", changePlayUrlParams);
32830+
console.log("切换播放地址 参数 ", changePlayUrlParams);
3280832831
return _this8.play(changePlayUrlParams).then(function () {
32809-
console.log("changePlayUrl replay success");
32832+
console.log("切换播放地址 play 执行成功 ", url);
3281032833
_this8.url = url;
3281132834
// 当前处于网页全屏状态
3281232835
if (_this8.Theme && _this8.Theme.decoderState.state.webExpend) {

0 commit comments

Comments
 (0)