@byteplus/veplayer 2.12.1 → 2.13.1-rc.0
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.
- package/esm/veplayer.biz.live.development.js +156 -8
- package/esm/veplayer.biz.live.production.js +1 -1
- package/esm/veplayer.d.ts +86 -4
- package/esm/veplayer.development.js +157 -9
- package/esm/veplayer.live.d.ts +86 -4
- package/esm/veplayer.live.development.js +157 -9
- package/esm/veplayer.live.production.js +3 -3
- package/esm/veplayer.production.js +3 -3
- package/esm/veplayer.vod.development.js +1 -1
- package/esm/veplayer.vod.production.js +1 -1
- package/package.json +1 -1
- package/umd/veplayer.biz.live.development.js +156 -8
- package/umd/veplayer.biz.live.production.js +1 -1
- package/umd/veplayer.d.ts +86 -4
- package/umd/veplayer.development.js +157 -9
- package/umd/veplayer.live.d.ts +86 -4
- package/umd/veplayer.live.development.js +157 -9
- package/umd/veplayer.live.production.js +1 -1
- package/umd/veplayer.production.js +1 -1
- package/umd/veplayer.vod.development.js +1 -1
- package/umd/veplayer.vod.production.js +1 -1
- package/veplayer.d.ts +86 -4
- package/veplayer.live.d.ts +86 -4
package/umd/veplayer.d.ts
CHANGED
|
@@ -6217,6 +6217,7 @@ interface PrepareOptions {
|
|
|
6217
6217
|
logger?: LoggerConfig;
|
|
6218
6218
|
}
|
|
6219
6219
|
interface LiveEN {
|
|
6220
|
+
INVALID_PARAMETER: string;
|
|
6220
6221
|
ERROR_TYPES?: any;
|
|
6221
6222
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
6222
6223
|
[key: string]: string | unknown;
|
|
@@ -7058,9 +7059,11 @@ interface Rtm {
|
|
|
7058
7059
|
checkStatsErrorDelay?: number;
|
|
7059
7060
|
/** {zh}
|
|
7060
7061
|
* @brief 是否打开 RTM SEI
|
|
7062
|
+
* @default true
|
|
7061
7063
|
*/
|
|
7062
7064
|
/** {en}
|
|
7063
7065
|
* @brief enable RTM SEI data.
|
|
7066
|
+
* @default true
|
|
7064
7067
|
*/
|
|
7065
7068
|
enableSei?: boolean;
|
|
7066
7069
|
}
|
|
@@ -7305,6 +7308,32 @@ interface RTMNetWorkInfo {
|
|
|
7305
7308
|
*/
|
|
7306
7309
|
avgLostRate?: number;
|
|
7307
7310
|
}
|
|
7311
|
+
/** {zh}
|
|
7312
|
+
* @list option
|
|
7313
|
+
* @kind property
|
|
7314
|
+
* @brief 服务端 SEI 延迟统计。
|
|
7315
|
+
*/
|
|
7316
|
+
/** {en}
|
|
7317
|
+
* @list option
|
|
7318
|
+
* @kind property
|
|
7319
|
+
* @brief Server SEI delay statistics.
|
|
7320
|
+
*/
|
|
7321
|
+
interface SEIDelayStats {
|
|
7322
|
+
/** {zh}
|
|
7323
|
+
* @brief 服务端链路延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
7324
|
+
*/
|
|
7325
|
+
/** {en}
|
|
7326
|
+
* @brief Server-side transfer delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
7327
|
+
*/
|
|
7328
|
+
delay_s2s?: number;
|
|
7329
|
+
/** {zh}
|
|
7330
|
+
* @brief 推流端到播放端的延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
7331
|
+
*/
|
|
7332
|
+
/** {en}
|
|
7333
|
+
* @brief Stream-to-end playback delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
7334
|
+
*/
|
|
7335
|
+
delay_s2e?: number;
|
|
7336
|
+
}
|
|
7308
7337
|
/** {zh}
|
|
7309
7338
|
* @list option
|
|
7310
7339
|
* @kind property
|
|
@@ -7315,7 +7344,7 @@ interface RTMNetWorkInfo {
|
|
|
7315
7344
|
* @kind property
|
|
7316
7345
|
* @brief RTM live stream information.
|
|
7317
7346
|
*/
|
|
7318
|
-
interface StatsSnapShoot {
|
|
7347
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
7319
7348
|
/** {en}
|
|
7320
7349
|
* @brief Video information.
|
|
7321
7350
|
*/
|
|
@@ -7546,7 +7575,7 @@ interface StatsSnapShoot {
|
|
|
7546
7575
|
* @kind property
|
|
7547
7576
|
* @brief Basic information for live stream playback.
|
|
7548
7577
|
*/
|
|
7549
|
-
interface Stats$0 {
|
|
7578
|
+
interface Stats$0 extends SEIDelayStats {
|
|
7550
7579
|
/** {zh}
|
|
7551
7580
|
* @brief 音频格式。
|
|
7552
7581
|
* @hidden
|
|
@@ -7704,6 +7733,7 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7704
7733
|
* @hidden
|
|
7705
7734
|
*/
|
|
7706
7735
|
_protocolManager?: ProtocolManager;
|
|
7736
|
+
private _seiDelayStats;
|
|
7707
7737
|
/** {zh}
|
|
7708
7738
|
* @hidden
|
|
7709
7739
|
* @param options
|
|
@@ -7734,6 +7764,13 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7734
7764
|
* @hidden
|
|
7735
7765
|
*/
|
|
7736
7766
|
get hls(): any;
|
|
7767
|
+
/** {zh}
|
|
7768
|
+
* @hidden
|
|
7769
|
+
*/
|
|
7770
|
+
/** {en}
|
|
7771
|
+
* @hidden
|
|
7772
|
+
*/
|
|
7773
|
+
destroy(): void;
|
|
7737
7774
|
/** {zh}
|
|
7738
7775
|
* @brief 调用此方法开启直播日志上报。
|
|
7739
7776
|
*/
|
|
@@ -7886,6 +7923,10 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7886
7923
|
*/
|
|
7887
7924
|
source?: string;
|
|
7888
7925
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
7926
|
+
private _resetSEIDelayStats;
|
|
7927
|
+
private _handleSEI;
|
|
7928
|
+
private _getPlayerBufferTime;
|
|
7929
|
+
private _mergeSEIDelayStats;
|
|
7889
7930
|
}
|
|
7890
7931
|
/** {zh}
|
|
7891
7932
|
* @detail api
|
|
@@ -11539,6 +11580,7 @@ declare namespace live {
|
|
|
11539
11580
|
logger?: LoggerConfig;
|
|
11540
11581
|
}
|
|
11541
11582
|
interface LiveEN {
|
|
11583
|
+
INVALID_PARAMETER: string;
|
|
11542
11584
|
ERROR_TYPES?: any;
|
|
11543
11585
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
11544
11586
|
[key: string]: string | unknown;
|
|
@@ -12390,9 +12432,11 @@ declare namespace live {
|
|
|
12390
12432
|
checkStatsErrorDelay?: number;
|
|
12391
12433
|
/** {zh}
|
|
12392
12434
|
* @brief 是否打开 RTM SEI
|
|
12435
|
+
* @default true
|
|
12393
12436
|
*/
|
|
12394
12437
|
/** {en}
|
|
12395
12438
|
* @brief enable RTM SEI data.
|
|
12439
|
+
* @default true
|
|
12396
12440
|
*/
|
|
12397
12441
|
enableSei?: boolean;
|
|
12398
12442
|
}
|
|
@@ -12637,6 +12681,32 @@ declare namespace live {
|
|
|
12637
12681
|
*/
|
|
12638
12682
|
avgLostRate?: number;
|
|
12639
12683
|
}
|
|
12684
|
+
/** {zh}
|
|
12685
|
+
* @list option
|
|
12686
|
+
* @kind property
|
|
12687
|
+
* @brief 服务端 SEI 延迟统计。
|
|
12688
|
+
*/
|
|
12689
|
+
/** {en}
|
|
12690
|
+
* @list option
|
|
12691
|
+
* @kind property
|
|
12692
|
+
* @brief Server SEI delay statistics.
|
|
12693
|
+
*/
|
|
12694
|
+
interface SEIDelayStats {
|
|
12695
|
+
/** {zh}
|
|
12696
|
+
* @brief 服务端链路延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
12697
|
+
*/
|
|
12698
|
+
/** {en}
|
|
12699
|
+
* @brief Server-side transfer delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
12700
|
+
*/
|
|
12701
|
+
delay_s2s?: number;
|
|
12702
|
+
/** {zh}
|
|
12703
|
+
* @brief 推流端到播放端的延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
12704
|
+
*/
|
|
12705
|
+
/** {en}
|
|
12706
|
+
* @brief Stream-to-end playback delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
12707
|
+
*/
|
|
12708
|
+
delay_s2e?: number;
|
|
12709
|
+
}
|
|
12640
12710
|
/** {zh}
|
|
12641
12711
|
* @list option
|
|
12642
12712
|
* @kind property
|
|
@@ -12647,7 +12717,7 @@ declare namespace live {
|
|
|
12647
12717
|
* @kind property
|
|
12648
12718
|
* @brief RTM live stream information.
|
|
12649
12719
|
*/
|
|
12650
|
-
interface StatsSnapShoot {
|
|
12720
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
12651
12721
|
/** {en}
|
|
12652
12722
|
* @brief Video information.
|
|
12653
12723
|
*/
|
|
@@ -12878,7 +12948,7 @@ declare namespace live {
|
|
|
12878
12948
|
* @kind property
|
|
12879
12949
|
* @brief Basic information for live stream playback.
|
|
12880
12950
|
*/
|
|
12881
|
-
interface Stats$0 {
|
|
12951
|
+
interface Stats$0 extends SEIDelayStats {
|
|
12882
12952
|
/** {zh}
|
|
12883
12953
|
* @brief 音频格式。
|
|
12884
12954
|
* @hidden
|
|
@@ -13036,6 +13106,7 @@ declare namespace live {
|
|
|
13036
13106
|
* @hidden
|
|
13037
13107
|
*/
|
|
13038
13108
|
_protocolManager?: ProtocolManager;
|
|
13109
|
+
private _seiDelayStats;
|
|
13039
13110
|
/** {zh}
|
|
13040
13111
|
* @hidden
|
|
13041
13112
|
* @param options
|
|
@@ -13066,6 +13137,13 @@ declare namespace live {
|
|
|
13066
13137
|
* @hidden
|
|
13067
13138
|
*/
|
|
13068
13139
|
get hls(): any;
|
|
13140
|
+
/** {zh}
|
|
13141
|
+
* @hidden
|
|
13142
|
+
*/
|
|
13143
|
+
/** {en}
|
|
13144
|
+
* @hidden
|
|
13145
|
+
*/
|
|
13146
|
+
destroy(): void;
|
|
13069
13147
|
/** {zh}
|
|
13070
13148
|
* @brief 调用此方法开启直播日志上报。
|
|
13071
13149
|
*/
|
|
@@ -13218,6 +13296,10 @@ declare namespace live {
|
|
|
13218
13296
|
*/
|
|
13219
13297
|
source?: string;
|
|
13220
13298
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
13299
|
+
private _resetSEIDelayStats;
|
|
13300
|
+
private _handleSEI;
|
|
13301
|
+
private _getPlayerBufferTime;
|
|
13302
|
+
private _mergeSEIDelayStats;
|
|
13221
13303
|
}
|
|
13222
13304
|
/** {zh}
|
|
13223
13305
|
* @detail api
|
|
@@ -14715,7 +14715,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14715
14715
|
* @brief Retrieve the player SDK version number.
|
|
14716
14716
|
*/
|
|
14717
14717
|
get playerVersion() {
|
|
14718
|
-
return "2.
|
|
14718
|
+
return "2.13.1-rc.0";
|
|
14719
14719
|
}
|
|
14720
14720
|
/** {zh}
|
|
14721
14721
|
* @brief 获取当前播放视频的清晰度唯一标识(definition)。
|
|
@@ -56510,7 +56510,7 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56510
56510
|
device_id: deviceId,
|
|
56511
56511
|
error_report_stop: true,
|
|
56512
56512
|
ext: {
|
|
56513
|
-
veplayer_version: "2.
|
|
56513
|
+
veplayer_version: "2.13.1-rc.0",
|
|
56514
56514
|
flv_version: "3.0.24-rc.6",
|
|
56515
56515
|
hls_version: "3.0.24-rc.2",
|
|
56516
56516
|
rts_version: "0.2.1-alpha.64"
|
|
@@ -56524,7 +56524,6 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56524
56524
|
return transform2 ? transform2(value) : value.toString();
|
|
56525
56525
|
}
|
|
56526
56526
|
function getDefaultRow(data2) {
|
|
56527
|
-
var _a;
|
|
56528
56527
|
return {
|
|
56529
56528
|
rows: [
|
|
56530
56529
|
{
|
|
@@ -56565,7 +56564,10 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56565
56564
|
{
|
|
56566
56565
|
key: "bufferEnd",
|
|
56567
56566
|
labelTextKey: "BUFFER_END",
|
|
56568
|
-
value: normalizeNumber(
|
|
56567
|
+
value: normalizeNumber(
|
|
56568
|
+
data2.bufferEnd,
|
|
56569
|
+
(value) => Number(value.toFixed(2)).toString()
|
|
56570
|
+
)
|
|
56569
56571
|
},
|
|
56570
56572
|
{
|
|
56571
56573
|
key: "currentTime",
|
|
@@ -73907,6 +73909,79 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73907
73909
|
}
|
|
73908
73910
|
}
|
|
73909
73911
|
const liveVeStrategy = new LiveVeStrategy();
|
|
73912
|
+
const isNumber = (value) => typeof value === "number" && Number.isFinite(value);
|
|
73913
|
+
const getTimestamp = (delaySEI, currentKey, legacyKey) => {
|
|
73914
|
+
const currentValue = delaySEI[currentKey];
|
|
73915
|
+
if (isNumber(currentValue)) {
|
|
73916
|
+
return currentValue;
|
|
73917
|
+
}
|
|
73918
|
+
const legacyValue = delaySEI[legacyKey];
|
|
73919
|
+
return isNumber(legacyValue) ? legacyValue : void 0;
|
|
73920
|
+
};
|
|
73921
|
+
const utf8ArrayToString = (array) => {
|
|
73922
|
+
let result = "";
|
|
73923
|
+
let index = 0;
|
|
73924
|
+
while (index < array.length) {
|
|
73925
|
+
const first = array[index++];
|
|
73926
|
+
if (first < 128) {
|
|
73927
|
+
result += String.fromCharCode(first);
|
|
73928
|
+
} else if (first < 224) {
|
|
73929
|
+
const second = array[index++];
|
|
73930
|
+
result += String.fromCharCode((first & 31) << 6 | second & 63);
|
|
73931
|
+
} else {
|
|
73932
|
+
const second = array[index++];
|
|
73933
|
+
const third = array[index++];
|
|
73934
|
+
result += String.fromCharCode(
|
|
73935
|
+
(first & 15) << 12 | (second & 63) << 6 | third & 63
|
|
73936
|
+
);
|
|
73937
|
+
}
|
|
73938
|
+
}
|
|
73939
|
+
return result;
|
|
73940
|
+
};
|
|
73941
|
+
const getSEIDelayStats = (sei, bufferTime = 0, now3 = Date.now()) => {
|
|
73942
|
+
if ((sei == null ? void 0 : sei.code) !== 100 || !sei.content) {
|
|
73943
|
+
return;
|
|
73944
|
+
}
|
|
73945
|
+
try {
|
|
73946
|
+
const rawSEI = utf8ArrayToString(sei.content);
|
|
73947
|
+
const jsonStart = rawSEI.indexOf("{");
|
|
73948
|
+
const jsonEnd = rawSEI.lastIndexOf("}");
|
|
73949
|
+
if (jsonStart < 0 || jsonEnd < jsonStart) {
|
|
73950
|
+
return;
|
|
73951
|
+
}
|
|
73952
|
+
const seiContent = JSON.parse(rawSEI.slice(jsonStart, jsonEnd + 1));
|
|
73953
|
+
const delaySEI = seiContent == null ? void 0 : seiContent.video_e2e_delay;
|
|
73954
|
+
if (!delaySEI || typeof delaySEI !== "object") {
|
|
73955
|
+
return;
|
|
73956
|
+
}
|
|
73957
|
+
const push3 = getTimestamp(delaySEI, "push_edge_ts", "push_node");
|
|
73958
|
+
const source = getTimestamp(delaySEI, "source_ts", "source_node");
|
|
73959
|
+
const cmafSource = getTimestamp(
|
|
73960
|
+
delaySEI,
|
|
73961
|
+
"cmaf_source_ts",
|
|
73962
|
+
"cmaf_source_node"
|
|
73963
|
+
);
|
|
73964
|
+
const hlsSource = getTimestamp(
|
|
73965
|
+
delaySEI,
|
|
73966
|
+
"hls_source_ts",
|
|
73967
|
+
"hls_source_node"
|
|
73968
|
+
);
|
|
73969
|
+
const pull = getTimestamp(delaySEI, "pull_edge_ts", "pull_node");
|
|
73970
|
+
const start = push3 ?? source;
|
|
73971
|
+
const end = pull ?? hlsSource ?? cmafSource;
|
|
73972
|
+
if (!isNumber(start) || !isNumber(end)) {
|
|
73973
|
+
return;
|
|
73974
|
+
}
|
|
73975
|
+
const delayS2S = end - start;
|
|
73976
|
+
const safeBufferTime = isNumber(bufferTime) ? Math.max(0, bufferTime) : 0;
|
|
73977
|
+
return {
|
|
73978
|
+
delay_s2s: delayS2S,
|
|
73979
|
+
delay_s2e: delayS2S + Math.max(0, now3 - end) + safeBufferTime
|
|
73980
|
+
};
|
|
73981
|
+
} catch (e2) {
|
|
73982
|
+
return;
|
|
73983
|
+
}
|
|
73984
|
+
};
|
|
73910
73985
|
VeI18n.extend([
|
|
73911
73986
|
{
|
|
73912
73987
|
LANG: "zh-cn",
|
|
@@ -73945,6 +74020,22 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73945
74020
|
* @hidden
|
|
73946
74021
|
*/
|
|
73947
74022
|
__publicField(this, "_protocolManager");
|
|
74023
|
+
__publicField(this, "_seiDelayStats", {});
|
|
74024
|
+
__publicField(this, "_resetSEIDelayStats", () => {
|
|
74025
|
+
this._seiDelayStats = {};
|
|
74026
|
+
});
|
|
74027
|
+
__publicField(this, "_handleSEI", (data2) => {
|
|
74028
|
+
const stats = getSEIDelayStats(data2 == null ? void 0 : data2.sei, this._getPlayerBufferTime());
|
|
74029
|
+
if (stats) {
|
|
74030
|
+
this._seiDelayStats = stats;
|
|
74031
|
+
}
|
|
74032
|
+
});
|
|
74033
|
+
this.on(Events.SEI, this._handleSEI);
|
|
74034
|
+
this.on(Events.URL_CHANGE, this._resetSEIDelayStats);
|
|
74035
|
+
this.on(Events.SOURCE_CHANGE, this._resetSEIDelayStats);
|
|
74036
|
+
this.on(Events.DEFINITION_CHANGE, this._resetSEIDelayStats);
|
|
74037
|
+
this.on(Events.REPLAY, this._resetSEIDelayStats);
|
|
74038
|
+
this.on(Events.FALLBACK, this._resetSEIDelayStats);
|
|
73948
74039
|
}
|
|
73949
74040
|
/** {zh}
|
|
73950
74041
|
* @brief 获取已经播放的时长,不包含暂停和等待时间,单位为秒。
|
|
@@ -73986,6 +74077,22 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73986
74077
|
var _a, _b;
|
|
73987
74078
|
return (_b = (_a = this._player.plugins) == null ? void 0 : _a.hls) == null ? void 0 : _b.hls;
|
|
73988
74079
|
}
|
|
74080
|
+
/** {zh}
|
|
74081
|
+
* @hidden
|
|
74082
|
+
*/
|
|
74083
|
+
/** {en}
|
|
74084
|
+
* @hidden
|
|
74085
|
+
*/
|
|
74086
|
+
destroy() {
|
|
74087
|
+
this.off(Events.SEI, this._handleSEI);
|
|
74088
|
+
this.off(Events.URL_CHANGE, this._resetSEIDelayStats);
|
|
74089
|
+
this.off(Events.SOURCE_CHANGE, this._resetSEIDelayStats);
|
|
74090
|
+
this.off(Events.DEFINITION_CHANGE, this._resetSEIDelayStats);
|
|
74091
|
+
this.off(Events.REPLAY, this._resetSEIDelayStats);
|
|
74092
|
+
this.off(Events.FALLBACK, this._resetSEIDelayStats);
|
|
74093
|
+
this._resetSEIDelayStats();
|
|
74094
|
+
super.destroy();
|
|
74095
|
+
}
|
|
73989
74096
|
/** {zh}
|
|
73990
74097
|
* @brief 调用此方法开启直播日志上报。
|
|
73991
74098
|
*/
|
|
@@ -74122,7 +74229,8 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74122
74229
|
*/
|
|
74123
74230
|
async getRTMStats() {
|
|
74124
74231
|
var _a, _b, _c;
|
|
74125
|
-
|
|
74232
|
+
const stats = await ((_c = (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.rts) == null ? void 0 : _c.getStatsSnapshoot());
|
|
74233
|
+
return this._mergeSEIDelayStats(stats);
|
|
74126
74234
|
}
|
|
74127
74235
|
/** {zh}
|
|
74128
74236
|
* @brief 获取 FLV 拉流的播放信息。
|
|
@@ -74133,7 +74241,8 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74133
74241
|
*/
|
|
74134
74242
|
getFLVStats() {
|
|
74135
74243
|
var _a, _b, _c;
|
|
74136
|
-
|
|
74244
|
+
const stats = (_c = (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.flv) == null ? void 0 : _c.getStats();
|
|
74245
|
+
return this._mergeSEIDelayStats(stats);
|
|
74137
74246
|
}
|
|
74138
74247
|
/** {zh}
|
|
74139
74248
|
* @brief 获取 HLS 拉流的播放信息。
|
|
@@ -74145,8 +74254,9 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74145
74254
|
* @hidden
|
|
74146
74255
|
*/
|
|
74147
74256
|
getHLSStats() {
|
|
74148
|
-
var _a, _b, _c;
|
|
74149
|
-
|
|
74257
|
+
var _a, _b, _c, _d;
|
|
74258
|
+
const stats = ((_d = (_c = (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.hls) == null ? void 0 : _c.getStats) == null ? void 0 : _d.call(_c)) ?? {};
|
|
74259
|
+
return this._mergeSEIDelayStats(stats);
|
|
74150
74260
|
}
|
|
74151
74261
|
/** {en}
|
|
74152
74262
|
* @brief This method is used to update the playlist, supporting updates to source, resolution, and related information.
|
|
@@ -74174,6 +74284,40 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74174
74284
|
}
|
|
74175
74285
|
return super.updatePlaylist(playlist, target);
|
|
74176
74286
|
}
|
|
74287
|
+
_getPlayerBufferTime() {
|
|
74288
|
+
var _a, _b, _c, _d, _e2;
|
|
74289
|
+
try {
|
|
74290
|
+
const rtm = ((_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.rts) ?? ((_d = (_c = this._player) == null ? void 0 : _c.plugins) == null ? void 0 : _d.rtm);
|
|
74291
|
+
if (rtm) {
|
|
74292
|
+
const jitterBufferDelay = rtm.jitterBufferDelay;
|
|
74293
|
+
if (Number.isFinite(jitterBufferDelay) && jitterBufferDelay >= 0) {
|
|
74294
|
+
return jitterBufferDelay;
|
|
74295
|
+
}
|
|
74296
|
+
}
|
|
74297
|
+
} catch (e2) {
|
|
74298
|
+
}
|
|
74299
|
+
const video = (_e2 = this._player) == null ? void 0 : _e2.video;
|
|
74300
|
+
const buffered = video == null ? void 0 : video.buffered;
|
|
74301
|
+
if (!video || !(buffered == null ? void 0 : buffered.length)) {
|
|
74302
|
+
return 0;
|
|
74303
|
+
}
|
|
74304
|
+
try {
|
|
74305
|
+
return Math.trunc(
|
|
74306
|
+
(buffered.end(buffered.length - 1) - video.currentTime) * 1e3
|
|
74307
|
+
);
|
|
74308
|
+
} catch (e2) {
|
|
74309
|
+
return 0;
|
|
74310
|
+
}
|
|
74311
|
+
}
|
|
74312
|
+
_mergeSEIDelayStats(stats) {
|
|
74313
|
+
if (!stats) {
|
|
74314
|
+
return stats;
|
|
74315
|
+
}
|
|
74316
|
+
return {
|
|
74317
|
+
...stats,
|
|
74318
|
+
...this._seiDelayStats
|
|
74319
|
+
};
|
|
74320
|
+
}
|
|
74177
74321
|
}
|
|
74178
74322
|
async function createLivePlayer(options) {
|
|
74179
74323
|
var _a, _b, _c, _d, _e2, _f, _g, _h, _i2, _j, _k;
|
|
@@ -74206,6 +74350,10 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74206
74350
|
playerOptions,
|
|
74207
74351
|
recommendation
|
|
74208
74352
|
);
|
|
74353
|
+
finalOptions.rtm = {
|
|
74354
|
+
enableSei: true,
|
|
74355
|
+
...finalOptions.rtm
|
|
74356
|
+
};
|
|
74209
74357
|
await liveLicenseManager.create();
|
|
74210
74358
|
const licenseFatalError = liveLicenseManager.getLicenseFatalError();
|
|
74211
74359
|
const protocolManager = await ProtocolManager.create(finalOptions);
|
|
@@ -74309,7 +74457,7 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74309
74457
|
}
|
|
74310
74458
|
await ((_a = liveVeStrategy.veStrategyManager) == null ? void 0 : _a.init({
|
|
74311
74459
|
...options,
|
|
74312
|
-
playerVersion: "2.
|
|
74460
|
+
playerVersion: "2.13.1-rc.0",
|
|
74313
74461
|
type: "LIVE"
|
|
74314
74462
|
}));
|
|
74315
74463
|
return liveVeStrategy.veStrategyManager;
|
package/umd/veplayer.live.d.ts
CHANGED
|
@@ -6217,6 +6217,7 @@ interface PrepareOptions {
|
|
|
6217
6217
|
logger?: LoggerConfig;
|
|
6218
6218
|
}
|
|
6219
6219
|
interface LiveEN {
|
|
6220
|
+
INVALID_PARAMETER: string;
|
|
6220
6221
|
ERROR_TYPES?: any;
|
|
6221
6222
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
6222
6223
|
[key: string]: string | unknown;
|
|
@@ -7058,9 +7059,11 @@ interface Rtm {
|
|
|
7058
7059
|
checkStatsErrorDelay?: number;
|
|
7059
7060
|
/** {zh}
|
|
7060
7061
|
* @brief 是否打开 RTM SEI
|
|
7062
|
+
* @default true
|
|
7061
7063
|
*/
|
|
7062
7064
|
/** {en}
|
|
7063
7065
|
* @brief enable RTM SEI data.
|
|
7066
|
+
* @default true
|
|
7064
7067
|
*/
|
|
7065
7068
|
enableSei?: boolean;
|
|
7066
7069
|
}
|
|
@@ -7305,6 +7308,32 @@ interface RTMNetWorkInfo {
|
|
|
7305
7308
|
*/
|
|
7306
7309
|
avgLostRate?: number;
|
|
7307
7310
|
}
|
|
7311
|
+
/** {zh}
|
|
7312
|
+
* @list option
|
|
7313
|
+
* @kind property
|
|
7314
|
+
* @brief 服务端 SEI 延迟统计。
|
|
7315
|
+
*/
|
|
7316
|
+
/** {en}
|
|
7317
|
+
* @list option
|
|
7318
|
+
* @kind property
|
|
7319
|
+
* @brief Server SEI delay statistics.
|
|
7320
|
+
*/
|
|
7321
|
+
interface SEIDelayStats {
|
|
7322
|
+
/** {zh}
|
|
7323
|
+
* @brief 服务端链路延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
7324
|
+
*/
|
|
7325
|
+
/** {en}
|
|
7326
|
+
* @brief Server-side transfer delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
7327
|
+
*/
|
|
7328
|
+
delay_s2s?: number;
|
|
7329
|
+
/** {zh}
|
|
7330
|
+
* @brief 推流端到播放端的延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
7331
|
+
*/
|
|
7332
|
+
/** {en}
|
|
7333
|
+
* @brief Stream-to-end playback delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
7334
|
+
*/
|
|
7335
|
+
delay_s2e?: number;
|
|
7336
|
+
}
|
|
7308
7337
|
/** {zh}
|
|
7309
7338
|
* @list option
|
|
7310
7339
|
* @kind property
|
|
@@ -7315,7 +7344,7 @@ interface RTMNetWorkInfo {
|
|
|
7315
7344
|
* @kind property
|
|
7316
7345
|
* @brief RTM live stream information.
|
|
7317
7346
|
*/
|
|
7318
|
-
interface StatsSnapShoot {
|
|
7347
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
7319
7348
|
/** {en}
|
|
7320
7349
|
* @brief Video information.
|
|
7321
7350
|
*/
|
|
@@ -7546,7 +7575,7 @@ interface StatsSnapShoot {
|
|
|
7546
7575
|
* @kind property
|
|
7547
7576
|
* @brief Basic information for live stream playback.
|
|
7548
7577
|
*/
|
|
7549
|
-
interface Stats$0 {
|
|
7578
|
+
interface Stats$0 extends SEIDelayStats {
|
|
7550
7579
|
/** {zh}
|
|
7551
7580
|
* @brief 音频格式。
|
|
7552
7581
|
* @hidden
|
|
@@ -7704,6 +7733,7 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7704
7733
|
* @hidden
|
|
7705
7734
|
*/
|
|
7706
7735
|
_protocolManager?: ProtocolManager;
|
|
7736
|
+
private _seiDelayStats;
|
|
7707
7737
|
/** {zh}
|
|
7708
7738
|
* @hidden
|
|
7709
7739
|
* @param options
|
|
@@ -7734,6 +7764,13 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7734
7764
|
* @hidden
|
|
7735
7765
|
*/
|
|
7736
7766
|
get hls(): any;
|
|
7767
|
+
/** {zh}
|
|
7768
|
+
* @hidden
|
|
7769
|
+
*/
|
|
7770
|
+
/** {en}
|
|
7771
|
+
* @hidden
|
|
7772
|
+
*/
|
|
7773
|
+
destroy(): void;
|
|
7737
7774
|
/** {zh}
|
|
7738
7775
|
* @brief 调用此方法开启直播日志上报。
|
|
7739
7776
|
*/
|
|
@@ -7886,6 +7923,10 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7886
7923
|
*/
|
|
7887
7924
|
source?: string;
|
|
7888
7925
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
7926
|
+
private _resetSEIDelayStats;
|
|
7927
|
+
private _handleSEI;
|
|
7928
|
+
private _getPlayerBufferTime;
|
|
7929
|
+
private _mergeSEIDelayStats;
|
|
7889
7930
|
}
|
|
7890
7931
|
/** {zh}
|
|
7891
7932
|
* @detail api
|
|
@@ -11539,6 +11580,7 @@ declare namespace live {
|
|
|
11539
11580
|
logger?: LoggerConfig;
|
|
11540
11581
|
}
|
|
11541
11582
|
interface LiveEN {
|
|
11583
|
+
INVALID_PARAMETER: string;
|
|
11542
11584
|
ERROR_TYPES?: any;
|
|
11543
11585
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
11544
11586
|
[key: string]: string | unknown;
|
|
@@ -12390,9 +12432,11 @@ declare namespace live {
|
|
|
12390
12432
|
checkStatsErrorDelay?: number;
|
|
12391
12433
|
/** {zh}
|
|
12392
12434
|
* @brief 是否打开 RTM SEI
|
|
12435
|
+
* @default true
|
|
12393
12436
|
*/
|
|
12394
12437
|
/** {en}
|
|
12395
12438
|
* @brief enable RTM SEI data.
|
|
12439
|
+
* @default true
|
|
12396
12440
|
*/
|
|
12397
12441
|
enableSei?: boolean;
|
|
12398
12442
|
}
|
|
@@ -12637,6 +12681,32 @@ declare namespace live {
|
|
|
12637
12681
|
*/
|
|
12638
12682
|
avgLostRate?: number;
|
|
12639
12683
|
}
|
|
12684
|
+
/** {zh}
|
|
12685
|
+
* @list option
|
|
12686
|
+
* @kind property
|
|
12687
|
+
* @brief 服务端 SEI 延迟统计。
|
|
12688
|
+
*/
|
|
12689
|
+
/** {en}
|
|
12690
|
+
* @list option
|
|
12691
|
+
* @kind property
|
|
12692
|
+
* @brief Server SEI delay statistics.
|
|
12693
|
+
*/
|
|
12694
|
+
interface SEIDelayStats {
|
|
12695
|
+
/** {zh}
|
|
12696
|
+
* @brief 服务端链路延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
12697
|
+
*/
|
|
12698
|
+
/** {en}
|
|
12699
|
+
* @brief Server-side transfer delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
12700
|
+
*/
|
|
12701
|
+
delay_s2s?: number;
|
|
12702
|
+
/** {zh}
|
|
12703
|
+
* @brief 推流端到播放端的延迟,单位为毫秒。没有有效的服务端 SEI 数据时为空。
|
|
12704
|
+
*/
|
|
12705
|
+
/** {en}
|
|
12706
|
+
* @brief Stream-to-end playback delay in milliseconds. Empty when valid server SEI data is unavailable.
|
|
12707
|
+
*/
|
|
12708
|
+
delay_s2e?: number;
|
|
12709
|
+
}
|
|
12640
12710
|
/** {zh}
|
|
12641
12711
|
* @list option
|
|
12642
12712
|
* @kind property
|
|
@@ -12647,7 +12717,7 @@ declare namespace live {
|
|
|
12647
12717
|
* @kind property
|
|
12648
12718
|
* @brief RTM live stream information.
|
|
12649
12719
|
*/
|
|
12650
|
-
interface StatsSnapShoot {
|
|
12720
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
12651
12721
|
/** {en}
|
|
12652
12722
|
* @brief Video information.
|
|
12653
12723
|
*/
|
|
@@ -12878,7 +12948,7 @@ declare namespace live {
|
|
|
12878
12948
|
* @kind property
|
|
12879
12949
|
* @brief Basic information for live stream playback.
|
|
12880
12950
|
*/
|
|
12881
|
-
interface Stats$0 {
|
|
12951
|
+
interface Stats$0 extends SEIDelayStats {
|
|
12882
12952
|
/** {zh}
|
|
12883
12953
|
* @brief 音频格式。
|
|
12884
12954
|
* @hidden
|
|
@@ -13036,6 +13106,7 @@ declare namespace live {
|
|
|
13036
13106
|
* @hidden
|
|
13037
13107
|
*/
|
|
13038
13108
|
_protocolManager?: ProtocolManager;
|
|
13109
|
+
private _seiDelayStats;
|
|
13039
13110
|
/** {zh}
|
|
13040
13111
|
* @hidden
|
|
13041
13112
|
* @param options
|
|
@@ -13066,6 +13137,13 @@ declare namespace live {
|
|
|
13066
13137
|
* @hidden
|
|
13067
13138
|
*/
|
|
13068
13139
|
get hls(): any;
|
|
13140
|
+
/** {zh}
|
|
13141
|
+
* @hidden
|
|
13142
|
+
*/
|
|
13143
|
+
/** {en}
|
|
13144
|
+
* @hidden
|
|
13145
|
+
*/
|
|
13146
|
+
destroy(): void;
|
|
13069
13147
|
/** {zh}
|
|
13070
13148
|
* @brief 调用此方法开启直播日志上报。
|
|
13071
13149
|
*/
|
|
@@ -13218,6 +13296,10 @@ declare namespace live {
|
|
|
13218
13296
|
*/
|
|
13219
13297
|
source?: string;
|
|
13220
13298
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
13299
|
+
private _resetSEIDelayStats;
|
|
13300
|
+
private _handleSEI;
|
|
13301
|
+
private _getPlayerBufferTime;
|
|
13302
|
+
private _mergeSEIDelayStats;
|
|
13221
13303
|
}
|
|
13222
13304
|
/** {zh}
|
|
13223
13305
|
* @detail api
|