@byteplus/veplayer 2.12.2-rc.0 → 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/index.d.ts +0 -2
- package/esm/veplayer.biz.live.development.js +154 -8
- package/esm/veplayer.biz.live.production.js +1 -1
- package/esm/veplayer.d.ts +86 -75
- package/esm/veplayer.development.js +157 -15
- package/esm/veplayer.live.d.ts +86 -75
- package/esm/veplayer.live.development.js +157 -15
- package/esm/veplayer.live.production.js +3 -3
- package/esm/veplayer.production.js +3 -3
- package/esm/veplayer.vod.d.ts +0 -2
- package/esm/veplayer.vod.development.js +1 -7
- package/esm/veplayer.vod.production.js +2 -2
- package/package.json +1 -1
- package/umd/index.d.ts +0 -2
- package/umd/veplayer.biz.live.development.js +154 -8
- package/umd/veplayer.biz.live.production.js +1 -1
- package/umd/veplayer.d.ts +86 -75
- package/umd/veplayer.development.js +157 -15
- package/umd/veplayer.live.d.ts +86 -75
- package/umd/veplayer.live.development.js +157 -15
- package/umd/veplayer.live.production.js +1 -1
- package/umd/veplayer.production.js +1 -1
- package/umd/veplayer.vod.d.ts +0 -2
- package/umd/veplayer.vod.development.js +1 -7
- package/umd/veplayer.vod.production.js +1 -1
- package/veplayer.d.ts +86 -75
- package/veplayer.live.d.ts +86 -75
- package/veplayer.vod.d.ts +0 -2
package/umd/veplayer.live.d.ts
CHANGED
|
@@ -5424,7 +5424,6 @@ declare namespace error {
|
|
|
5424
5424
|
declare namespace event {
|
|
5425
5425
|
const BaseEvents: {
|
|
5426
5426
|
SEI: string;
|
|
5427
|
-
SEI_IN_TIME: string;
|
|
5428
5427
|
PLAYER_CREATE_FINISH: string;
|
|
5429
5428
|
FALLBACK_ERROR: string;
|
|
5430
5429
|
FALLBACK: string;
|
|
@@ -5469,7 +5468,6 @@ declare namespace event {
|
|
|
5469
5468
|
};
|
|
5470
5469
|
const Events: {
|
|
5471
5470
|
SEI: string;
|
|
5472
|
-
SEI_IN_TIME: string;
|
|
5473
5471
|
PLAYER_CREATE_FINISH: string;
|
|
5474
5472
|
FALLBACK_ERROR: string;
|
|
5475
5473
|
FALLBACK: string;
|
|
@@ -6219,6 +6217,7 @@ interface PrepareOptions {
|
|
|
6219
6217
|
logger?: LoggerConfig;
|
|
6220
6218
|
}
|
|
6221
6219
|
interface LiveEN {
|
|
6220
|
+
INVALID_PARAMETER: string;
|
|
6222
6221
|
ERROR_TYPES?: any;
|
|
6223
6222
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
6224
6223
|
[key: string]: string | unknown;
|
|
@@ -7060,9 +7059,11 @@ interface Rtm {
|
|
|
7060
7059
|
checkStatsErrorDelay?: number;
|
|
7061
7060
|
/** {zh}
|
|
7062
7061
|
* @brief 是否打开 RTM SEI
|
|
7062
|
+
* @default true
|
|
7063
7063
|
*/
|
|
7064
7064
|
/** {en}
|
|
7065
7065
|
* @brief enable RTM SEI data.
|
|
7066
|
+
* @default true
|
|
7066
7067
|
*/
|
|
7067
7068
|
enableSei?: boolean;
|
|
7068
7069
|
}
|
|
@@ -7307,6 +7308,32 @@ interface RTMNetWorkInfo {
|
|
|
7307
7308
|
*/
|
|
7308
7309
|
avgLostRate?: number;
|
|
7309
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
|
+
}
|
|
7310
7337
|
/** {zh}
|
|
7311
7338
|
* @list option
|
|
7312
7339
|
* @kind property
|
|
@@ -7317,7 +7344,7 @@ interface RTMNetWorkInfo {
|
|
|
7317
7344
|
* @kind property
|
|
7318
7345
|
* @brief RTM live stream information.
|
|
7319
7346
|
*/
|
|
7320
|
-
interface StatsSnapShoot {
|
|
7347
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
7321
7348
|
/** {en}
|
|
7322
7349
|
* @brief Video information.
|
|
7323
7350
|
*/
|
|
@@ -7548,7 +7575,7 @@ interface StatsSnapShoot {
|
|
|
7548
7575
|
* @kind property
|
|
7549
7576
|
* @brief Basic information for live stream playback.
|
|
7550
7577
|
*/
|
|
7551
|
-
interface Stats$0 {
|
|
7578
|
+
interface Stats$0 extends SEIDelayStats {
|
|
7552
7579
|
/** {zh}
|
|
7553
7580
|
* @brief 音频格式。
|
|
7554
7581
|
* @hidden
|
|
@@ -7706,6 +7733,7 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7706
7733
|
* @hidden
|
|
7707
7734
|
*/
|
|
7708
7735
|
_protocolManager?: ProtocolManager;
|
|
7736
|
+
private _seiDelayStats;
|
|
7709
7737
|
/** {zh}
|
|
7710
7738
|
* @hidden
|
|
7711
7739
|
* @param options
|
|
@@ -7736,6 +7764,13 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7736
7764
|
* @hidden
|
|
7737
7765
|
*/
|
|
7738
7766
|
get hls(): any;
|
|
7767
|
+
/** {zh}
|
|
7768
|
+
* @hidden
|
|
7769
|
+
*/
|
|
7770
|
+
/** {en}
|
|
7771
|
+
* @hidden
|
|
7772
|
+
*/
|
|
7773
|
+
destroy(): void;
|
|
7739
7774
|
/** {zh}
|
|
7740
7775
|
* @brief 调用此方法开启直播日志上报。
|
|
7741
7776
|
*/
|
|
@@ -7888,6 +7923,10 @@ declare class VePlayerLive extends VePlayerBase {
|
|
|
7888
7923
|
*/
|
|
7889
7924
|
source?: string;
|
|
7890
7925
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
7926
|
+
private _resetSEIDelayStats;
|
|
7927
|
+
private _handleSEI;
|
|
7928
|
+
private _getPlayerBufferTime;
|
|
7929
|
+
private _mergeSEIDelayStats;
|
|
7891
7930
|
}
|
|
7892
7931
|
/** {zh}
|
|
7893
7932
|
* @detail api
|
|
@@ -11541,6 +11580,7 @@ declare namespace live {
|
|
|
11541
11580
|
logger?: LoggerConfig;
|
|
11542
11581
|
}
|
|
11543
11582
|
interface LiveEN {
|
|
11583
|
+
INVALID_PARAMETER: string;
|
|
11544
11584
|
ERROR_TYPES?: any;
|
|
11545
11585
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
11546
11586
|
[key: string]: string | unknown;
|
|
@@ -12392,9 +12432,11 @@ declare namespace live {
|
|
|
12392
12432
|
checkStatsErrorDelay?: number;
|
|
12393
12433
|
/** {zh}
|
|
12394
12434
|
* @brief 是否打开 RTM SEI
|
|
12435
|
+
* @default true
|
|
12395
12436
|
*/
|
|
12396
12437
|
/** {en}
|
|
12397
12438
|
* @brief enable RTM SEI data.
|
|
12439
|
+
* @default true
|
|
12398
12440
|
*/
|
|
12399
12441
|
enableSei?: boolean;
|
|
12400
12442
|
}
|
|
@@ -12639,6 +12681,32 @@ declare namespace live {
|
|
|
12639
12681
|
*/
|
|
12640
12682
|
avgLostRate?: number;
|
|
12641
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
|
+
}
|
|
12642
12710
|
/** {zh}
|
|
12643
12711
|
* @list option
|
|
12644
12712
|
* @kind property
|
|
@@ -12649,7 +12717,7 @@ declare namespace live {
|
|
|
12649
12717
|
* @kind property
|
|
12650
12718
|
* @brief RTM live stream information.
|
|
12651
12719
|
*/
|
|
12652
|
-
interface StatsSnapShoot {
|
|
12720
|
+
interface StatsSnapShoot extends SEIDelayStats {
|
|
12653
12721
|
/** {en}
|
|
12654
12722
|
* @brief Video information.
|
|
12655
12723
|
*/
|
|
@@ -12880,7 +12948,7 @@ declare namespace live {
|
|
|
12880
12948
|
* @kind property
|
|
12881
12949
|
* @brief Basic information for live stream playback.
|
|
12882
12950
|
*/
|
|
12883
|
-
interface Stats$0 {
|
|
12951
|
+
interface Stats$0 extends SEIDelayStats {
|
|
12884
12952
|
/** {zh}
|
|
12885
12953
|
* @brief 音频格式。
|
|
12886
12954
|
* @hidden
|
|
@@ -13038,6 +13106,7 @@ declare namespace live {
|
|
|
13038
13106
|
* @hidden
|
|
13039
13107
|
*/
|
|
13040
13108
|
_protocolManager?: ProtocolManager;
|
|
13109
|
+
private _seiDelayStats;
|
|
13041
13110
|
/** {zh}
|
|
13042
13111
|
* @hidden
|
|
13043
13112
|
* @param options
|
|
@@ -13068,6 +13137,13 @@ declare namespace live {
|
|
|
13068
13137
|
* @hidden
|
|
13069
13138
|
*/
|
|
13070
13139
|
get hls(): any;
|
|
13140
|
+
/** {zh}
|
|
13141
|
+
* @hidden
|
|
13142
|
+
*/
|
|
13143
|
+
/** {en}
|
|
13144
|
+
* @hidden
|
|
13145
|
+
*/
|
|
13146
|
+
destroy(): void;
|
|
13071
13147
|
/** {zh}
|
|
13072
13148
|
* @brief 调用此方法开启直播日志上报。
|
|
13073
13149
|
*/
|
|
@@ -13220,6 +13296,10 @@ declare namespace live {
|
|
|
13220
13296
|
*/
|
|
13221
13297
|
source?: string;
|
|
13222
13298
|
}, needUpdateProtocol?: boolean): Promise<void>;
|
|
13299
|
+
private _resetSEIDelayStats;
|
|
13300
|
+
private _handleSEI;
|
|
13301
|
+
private _getPlayerBufferTime;
|
|
13302
|
+
private _mergeSEIDelayStats;
|
|
13223
13303
|
}
|
|
13224
13304
|
/** {zh}
|
|
13225
13305
|
* @detail api
|
|
@@ -13645,13 +13725,6 @@ declare namespace live {
|
|
|
13645
13725
|
* The player parses the SEI information.
|
|
13646
13726
|
*/
|
|
13647
13727
|
SEI = "sei",
|
|
13648
|
-
/** {zh}
|
|
13649
|
-
* SEI 信息与播放进度对齐。SEI 在解析后会被缓存,待播放进度到达该 SEI 对应的时间点时抛出。
|
|
13650
|
-
*/
|
|
13651
|
-
/** {en}
|
|
13652
|
-
* The SEI information is aligned with the playback progress. The player caches the parsed SEI and emits it when the playback progress reaches the timestamp of the SEI.
|
|
13653
|
-
*/
|
|
13654
|
-
SEI_IN_TIME = "seiInTime",
|
|
13655
13728
|
/** {zh}
|
|
13656
13729
|
* 时移状态切换
|
|
13657
13730
|
*/
|
|
@@ -14323,67 +14396,6 @@ declare namespace live {
|
|
|
14323
14396
|
uuid: string;
|
|
14324
14397
|
};
|
|
14325
14398
|
}) => void;
|
|
14326
|
-
/** {zh}
|
|
14327
|
-
* SEI 信息与播放进度对齐。
|
|
14328
|
-
* @param data SEI 信息,与 SEI 事件的回调数据结构一致
|
|
14329
|
-
*/
|
|
14330
|
-
/** {en}
|
|
14331
|
-
* The SEI information is aligned with the playback progress.
|
|
14332
|
-
* @param data The SEI information. The data structure is the same as that of the SEI event.
|
|
14333
|
-
*/
|
|
14334
|
-
[LiveEvents.SEI_IN_TIME]: (data: {
|
|
14335
|
-
/** {zh}
|
|
14336
|
-
* 原始 PTS。视频帧在实际推流中的显示时间戳 PTS。
|
|
14337
|
-
*/
|
|
14338
|
-
/** {en}
|
|
14339
|
-
* The actual presentation timestamp (PTS) of the video frame.
|
|
14340
|
-
*/
|
|
14341
|
-
originPts: number;
|
|
14342
|
-
/** {zh}
|
|
14343
|
-
* 修正后的 PTS。在直播场景中,播放器会根据观众进入直播间时间,从 0 开始重新定义显示时间戳 PTS。
|
|
14344
|
-
*/
|
|
14345
|
-
/** {en}
|
|
14346
|
-
* The adjusted presentation timestamp (PTS). The player adjusts the presentation timestamp based on the time the audience enters the live room.
|
|
14347
|
-
*/
|
|
14348
|
-
pts: number;
|
|
14349
|
-
/** {zh}
|
|
14350
|
-
* 该 SEI 消息在当前直播视频中的时间点,单位为 s。
|
|
14351
|
-
*/
|
|
14352
|
-
/** {en}
|
|
14353
|
-
* The timestamp of the SEI message in the current live stream, in seconds.
|
|
14354
|
-
*/
|
|
14355
|
-
time: number;
|
|
14356
|
-
data: {
|
|
14357
|
-
/** {zh}
|
|
14358
|
-
* SEI 数据。
|
|
14359
|
-
*/
|
|
14360
|
-
/** {en}
|
|
14361
|
-
* The SEI data.
|
|
14362
|
-
*/
|
|
14363
|
-
payload: Uint8Array;
|
|
14364
|
-
/** {zh}
|
|
14365
|
-
* SEI 类型。
|
|
14366
|
-
*/
|
|
14367
|
-
/** {en}
|
|
14368
|
-
* The SEI type.
|
|
14369
|
-
*/
|
|
14370
|
-
type: number;
|
|
14371
|
-
/** {zh}
|
|
14372
|
-
* SEI 大小。
|
|
14373
|
-
*/
|
|
14374
|
-
/** {en}
|
|
14375
|
-
* The SEI size.
|
|
14376
|
-
*/
|
|
14377
|
-
size: number;
|
|
14378
|
-
/** {zh}
|
|
14379
|
-
* SEI UUID,不存在则为空字符串。
|
|
14380
|
-
*/
|
|
14381
|
-
/** {en}
|
|
14382
|
-
* The SEI UUID or an empty string if the SEI UUID doesn't exist.
|
|
14383
|
-
*/
|
|
14384
|
-
uuid: string;
|
|
14385
|
-
};
|
|
14386
|
-
}) => void;
|
|
14387
14399
|
/** {zh}
|
|
14388
14400
|
* @brief 时移状态切换。
|
|
14389
14401
|
* @param isTimeShift 是否是时移状态。
|
|
@@ -14625,7 +14637,6 @@ declare namespace live {
|
|
|
14625
14637
|
HLS_PLAYOUT_LIMIT_REACHED: HLS.Events.PLAYOUT_LIMIT_REACHED;
|
|
14626
14638
|
HLS_EVENT_CUE_ENTER: HLS.Events.EVENT_CUE_ENTER;
|
|
14627
14639
|
SEI: string;
|
|
14628
|
-
SEI_IN_TIME: string;
|
|
14629
14640
|
PLAYER_CREATE_FINISH: string;
|
|
14630
14641
|
FALLBACK_ERROR: string;
|
|
14631
14642
|
FALLBACK: string;
|
|
@@ -10909,8 +10909,6 @@ var __publicField = (obj, key, value) => {
|
|
|
10909
10909
|
const BaseEvents = {
|
|
10910
10910
|
// sei
|
|
10911
10911
|
SEI: "sei",
|
|
10912
|
-
// sei,在播放时间对齐到该 sei 的时间戳时抛出
|
|
10913
|
-
SEI_IN_TIME: "seiInTime",
|
|
10914
10912
|
// 播放器完成创建
|
|
10915
10913
|
PLAYER_CREATE_FINISH: "playerCreateFinish",
|
|
10916
10914
|
FALLBACK_ERROR: "fallbackError",
|
|
@@ -10971,10 +10969,6 @@ var __publicField = (obj, key, value) => {
|
|
|
10971
10969
|
event: "core_event",
|
|
10972
10970
|
shouldCallback: (data2) => (data2 == null ? void 0 : data2.eventName) === "core.sei"
|
|
10973
10971
|
},
|
|
10974
|
-
[BaseEvents.SEI_IN_TIME]: {
|
|
10975
|
-
event: "core_event",
|
|
10976
|
-
shouldCallback: (data2) => (data2 == null ? void 0 : data2.eventName) === "core.seiintime"
|
|
10977
|
-
},
|
|
10978
10972
|
[BaseEvents.RTM_NETWORK]: {
|
|
10979
10973
|
event: "core_event",
|
|
10980
10974
|
shouldCallback: (data2) => (data2 == null ? void 0 : data2.eventName) === "core.rtcnetwork"
|
|
@@ -14721,7 +14715,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14721
14715
|
* @brief Retrieve the player SDK version number.
|
|
14722
14716
|
*/
|
|
14723
14717
|
get playerVersion() {
|
|
14724
|
-
return "2.
|
|
14718
|
+
return "2.13.1-rc.0";
|
|
14725
14719
|
}
|
|
14726
14720
|
/** {zh}
|
|
14727
14721
|
* @brief 获取当前播放视频的清晰度唯一标识(definition)。
|
|
@@ -56516,7 +56510,7 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56516
56510
|
device_id: deviceId,
|
|
56517
56511
|
error_report_stop: true,
|
|
56518
56512
|
ext: {
|
|
56519
|
-
veplayer_version: "2.
|
|
56513
|
+
veplayer_version: "2.13.1-rc.0",
|
|
56520
56514
|
flv_version: "3.0.24-rc.6",
|
|
56521
56515
|
hls_version: "3.0.24-rc.2",
|
|
56522
56516
|
rts_version: "0.2.1-alpha.64"
|
|
@@ -56530,7 +56524,6 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56530
56524
|
return transform2 ? transform2(value) : value.toString();
|
|
56531
56525
|
}
|
|
56532
56526
|
function getDefaultRow(data2) {
|
|
56533
|
-
var _a;
|
|
56534
56527
|
return {
|
|
56535
56528
|
rows: [
|
|
56536
56529
|
{
|
|
@@ -56571,7 +56564,10 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
56571
56564
|
{
|
|
56572
56565
|
key: "bufferEnd",
|
|
56573
56566
|
labelTextKey: "BUFFER_END",
|
|
56574
|
-
value: normalizeNumber(
|
|
56567
|
+
value: normalizeNumber(
|
|
56568
|
+
data2.bufferEnd,
|
|
56569
|
+
(value) => Number(value.toFixed(2)).toString()
|
|
56570
|
+
)
|
|
56575
56571
|
},
|
|
56576
56572
|
{
|
|
56577
56573
|
key: "currentTime",
|
|
@@ -73920,6 +73916,79 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73920
73916
|
}
|
|
73921
73917
|
}
|
|
73922
73918
|
const liveVeStrategy = new LiveVeStrategy();
|
|
73919
|
+
const isNumber = (value) => typeof value === "number" && Number.isFinite(value);
|
|
73920
|
+
const getTimestamp = (delaySEI, currentKey, legacyKey) => {
|
|
73921
|
+
const currentValue = delaySEI[currentKey];
|
|
73922
|
+
if (isNumber(currentValue)) {
|
|
73923
|
+
return currentValue;
|
|
73924
|
+
}
|
|
73925
|
+
const legacyValue = delaySEI[legacyKey];
|
|
73926
|
+
return isNumber(legacyValue) ? legacyValue : void 0;
|
|
73927
|
+
};
|
|
73928
|
+
const utf8ArrayToString = (array) => {
|
|
73929
|
+
let result = "";
|
|
73930
|
+
let index = 0;
|
|
73931
|
+
while (index < array.length) {
|
|
73932
|
+
const first = array[index++];
|
|
73933
|
+
if (first < 128) {
|
|
73934
|
+
result += String.fromCharCode(first);
|
|
73935
|
+
} else if (first < 224) {
|
|
73936
|
+
const second = array[index++];
|
|
73937
|
+
result += String.fromCharCode((first & 31) << 6 | second & 63);
|
|
73938
|
+
} else {
|
|
73939
|
+
const second = array[index++];
|
|
73940
|
+
const third = array[index++];
|
|
73941
|
+
result += String.fromCharCode(
|
|
73942
|
+
(first & 15) << 12 | (second & 63) << 6 | third & 63
|
|
73943
|
+
);
|
|
73944
|
+
}
|
|
73945
|
+
}
|
|
73946
|
+
return result;
|
|
73947
|
+
};
|
|
73948
|
+
const getSEIDelayStats = (sei, bufferTime = 0, now3 = Date.now()) => {
|
|
73949
|
+
if ((sei == null ? void 0 : sei.code) !== 100 || !sei.content) {
|
|
73950
|
+
return;
|
|
73951
|
+
}
|
|
73952
|
+
try {
|
|
73953
|
+
const rawSEI = utf8ArrayToString(sei.content);
|
|
73954
|
+
const jsonStart = rawSEI.indexOf("{");
|
|
73955
|
+
const jsonEnd = rawSEI.lastIndexOf("}");
|
|
73956
|
+
if (jsonStart < 0 || jsonEnd < jsonStart) {
|
|
73957
|
+
return;
|
|
73958
|
+
}
|
|
73959
|
+
const seiContent = JSON.parse(rawSEI.slice(jsonStart, jsonEnd + 1));
|
|
73960
|
+
const delaySEI = seiContent == null ? void 0 : seiContent.video_e2e_delay;
|
|
73961
|
+
if (!delaySEI || typeof delaySEI !== "object") {
|
|
73962
|
+
return;
|
|
73963
|
+
}
|
|
73964
|
+
const push3 = getTimestamp(delaySEI, "push_edge_ts", "push_node");
|
|
73965
|
+
const source = getTimestamp(delaySEI, "source_ts", "source_node");
|
|
73966
|
+
const cmafSource = getTimestamp(
|
|
73967
|
+
delaySEI,
|
|
73968
|
+
"cmaf_source_ts",
|
|
73969
|
+
"cmaf_source_node"
|
|
73970
|
+
);
|
|
73971
|
+
const hlsSource = getTimestamp(
|
|
73972
|
+
delaySEI,
|
|
73973
|
+
"hls_source_ts",
|
|
73974
|
+
"hls_source_node"
|
|
73975
|
+
);
|
|
73976
|
+
const pull = getTimestamp(delaySEI, "pull_edge_ts", "pull_node");
|
|
73977
|
+
const start = push3 ?? source;
|
|
73978
|
+
const end = pull ?? hlsSource ?? cmafSource;
|
|
73979
|
+
if (!isNumber(start) || !isNumber(end)) {
|
|
73980
|
+
return;
|
|
73981
|
+
}
|
|
73982
|
+
const delayS2S = end - start;
|
|
73983
|
+
const safeBufferTime = isNumber(bufferTime) ? Math.max(0, bufferTime) : 0;
|
|
73984
|
+
return {
|
|
73985
|
+
delay_s2s: delayS2S,
|
|
73986
|
+
delay_s2e: delayS2S + Math.max(0, now3 - end) + safeBufferTime
|
|
73987
|
+
};
|
|
73988
|
+
} catch (e2) {
|
|
73989
|
+
return;
|
|
73990
|
+
}
|
|
73991
|
+
};
|
|
73923
73992
|
VeI18n.extend([
|
|
73924
73993
|
{
|
|
73925
73994
|
LANG: "zh-cn",
|
|
@@ -73958,6 +74027,22 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73958
74027
|
* @hidden
|
|
73959
74028
|
*/
|
|
73960
74029
|
__publicField(this, "_protocolManager");
|
|
74030
|
+
__publicField(this, "_seiDelayStats", {});
|
|
74031
|
+
__publicField(this, "_resetSEIDelayStats", () => {
|
|
74032
|
+
this._seiDelayStats = {};
|
|
74033
|
+
});
|
|
74034
|
+
__publicField(this, "_handleSEI", (data2) => {
|
|
74035
|
+
const stats = getSEIDelayStats(data2 == null ? void 0 : data2.sei, this._getPlayerBufferTime());
|
|
74036
|
+
if (stats) {
|
|
74037
|
+
this._seiDelayStats = stats;
|
|
74038
|
+
}
|
|
74039
|
+
});
|
|
74040
|
+
this.on(Events.SEI, this._handleSEI);
|
|
74041
|
+
this.on(Events.URL_CHANGE, this._resetSEIDelayStats);
|
|
74042
|
+
this.on(Events.SOURCE_CHANGE, this._resetSEIDelayStats);
|
|
74043
|
+
this.on(Events.DEFINITION_CHANGE, this._resetSEIDelayStats);
|
|
74044
|
+
this.on(Events.REPLAY, this._resetSEIDelayStats);
|
|
74045
|
+
this.on(Events.FALLBACK, this._resetSEIDelayStats);
|
|
73961
74046
|
}
|
|
73962
74047
|
/** {zh}
|
|
73963
74048
|
* @brief 获取已经播放的时长,不包含暂停和等待时间,单位为秒。
|
|
@@ -73999,6 +74084,22 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
73999
74084
|
var _a, _b;
|
|
74000
74085
|
return (_b = (_a = this._player.plugins) == null ? void 0 : _a.hls) == null ? void 0 : _b.hls;
|
|
74001
74086
|
}
|
|
74087
|
+
/** {zh}
|
|
74088
|
+
* @hidden
|
|
74089
|
+
*/
|
|
74090
|
+
/** {en}
|
|
74091
|
+
* @hidden
|
|
74092
|
+
*/
|
|
74093
|
+
destroy() {
|
|
74094
|
+
this.off(Events.SEI, this._handleSEI);
|
|
74095
|
+
this.off(Events.URL_CHANGE, this._resetSEIDelayStats);
|
|
74096
|
+
this.off(Events.SOURCE_CHANGE, this._resetSEIDelayStats);
|
|
74097
|
+
this.off(Events.DEFINITION_CHANGE, this._resetSEIDelayStats);
|
|
74098
|
+
this.off(Events.REPLAY, this._resetSEIDelayStats);
|
|
74099
|
+
this.off(Events.FALLBACK, this._resetSEIDelayStats);
|
|
74100
|
+
this._resetSEIDelayStats();
|
|
74101
|
+
super.destroy();
|
|
74102
|
+
}
|
|
74002
74103
|
/** {zh}
|
|
74003
74104
|
* @brief 调用此方法开启直播日志上报。
|
|
74004
74105
|
*/
|
|
@@ -74135,7 +74236,8 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74135
74236
|
*/
|
|
74136
74237
|
async getRTMStats() {
|
|
74137
74238
|
var _a, _b, _c;
|
|
74138
|
-
|
|
74239
|
+
const stats = await ((_c = (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.rts) == null ? void 0 : _c.getStatsSnapshoot());
|
|
74240
|
+
return this._mergeSEIDelayStats(stats);
|
|
74139
74241
|
}
|
|
74140
74242
|
/** {zh}
|
|
74141
74243
|
* @brief 获取 FLV 拉流的播放信息。
|
|
@@ -74146,7 +74248,8 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74146
74248
|
*/
|
|
74147
74249
|
getFLVStats() {
|
|
74148
74250
|
var _a, _b, _c;
|
|
74149
|
-
|
|
74251
|
+
const stats = (_c = (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.flv) == null ? void 0 : _c.getStats();
|
|
74252
|
+
return this._mergeSEIDelayStats(stats);
|
|
74150
74253
|
}
|
|
74151
74254
|
/** {zh}
|
|
74152
74255
|
* @brief 获取 HLS 拉流的播放信息。
|
|
@@ -74158,8 +74261,9 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74158
74261
|
* @hidden
|
|
74159
74262
|
*/
|
|
74160
74263
|
getHLSStats() {
|
|
74161
|
-
var _a, _b, _c;
|
|
74162
|
-
|
|
74264
|
+
var _a, _b, _c, _d;
|
|
74265
|
+
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)) ?? {};
|
|
74266
|
+
return this._mergeSEIDelayStats(stats);
|
|
74163
74267
|
}
|
|
74164
74268
|
/** {en}
|
|
74165
74269
|
* @brief This method is used to update the playlist, supporting updates to source, resolution, and related information.
|
|
@@ -74187,6 +74291,40 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74187
74291
|
}
|
|
74188
74292
|
return super.updatePlaylist(playlist, target);
|
|
74189
74293
|
}
|
|
74294
|
+
_getPlayerBufferTime() {
|
|
74295
|
+
var _a, _b, _c, _d, _e2;
|
|
74296
|
+
try {
|
|
74297
|
+
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);
|
|
74298
|
+
if (rtm) {
|
|
74299
|
+
const jitterBufferDelay = rtm.jitterBufferDelay;
|
|
74300
|
+
if (Number.isFinite(jitterBufferDelay) && jitterBufferDelay >= 0) {
|
|
74301
|
+
return jitterBufferDelay;
|
|
74302
|
+
}
|
|
74303
|
+
}
|
|
74304
|
+
} catch (e2) {
|
|
74305
|
+
}
|
|
74306
|
+
const video = (_e2 = this._player) == null ? void 0 : _e2.video;
|
|
74307
|
+
const buffered = video == null ? void 0 : video.buffered;
|
|
74308
|
+
if (!video || !(buffered == null ? void 0 : buffered.length)) {
|
|
74309
|
+
return 0;
|
|
74310
|
+
}
|
|
74311
|
+
try {
|
|
74312
|
+
return Math.trunc(
|
|
74313
|
+
(buffered.end(buffered.length - 1) - video.currentTime) * 1e3
|
|
74314
|
+
);
|
|
74315
|
+
} catch (e2) {
|
|
74316
|
+
return 0;
|
|
74317
|
+
}
|
|
74318
|
+
}
|
|
74319
|
+
_mergeSEIDelayStats(stats) {
|
|
74320
|
+
if (!stats) {
|
|
74321
|
+
return stats;
|
|
74322
|
+
}
|
|
74323
|
+
return {
|
|
74324
|
+
...stats,
|
|
74325
|
+
...this._seiDelayStats
|
|
74326
|
+
};
|
|
74327
|
+
}
|
|
74190
74328
|
}
|
|
74191
74329
|
async function createLivePlayer(options) {
|
|
74192
74330
|
var _a, _b, _c, _d, _e2, _f, _g, _h, _i2, _j, _k;
|
|
@@ -74219,6 +74357,10 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74219
74357
|
playerOptions,
|
|
74220
74358
|
recommendation
|
|
74221
74359
|
);
|
|
74360
|
+
finalOptions.rtm = {
|
|
74361
|
+
enableSei: true,
|
|
74362
|
+
...finalOptions.rtm
|
|
74363
|
+
};
|
|
74222
74364
|
await liveLicenseManager.create();
|
|
74223
74365
|
const licenseFatalError = liveLicenseManager.getLicenseFatalError();
|
|
74224
74366
|
const protocolManager = await ProtocolManager.create(finalOptions);
|
|
@@ -74322,7 +74464,7 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
|
74322
74464
|
}
|
|
74323
74465
|
await ((_a = liveVeStrategy.veStrategyManager) == null ? void 0 : _a.init({
|
|
74324
74466
|
...options,
|
|
74325
|
-
playerVersion: "2.
|
|
74467
|
+
playerVersion: "2.13.1-rc.0",
|
|
74326
74468
|
type: "LIVE"
|
|
74327
74469
|
}));
|
|
74328
74470
|
return liveVeStrategy.veStrategyManager;
|