@galacean/effects-plugin-multimedia 2.8.0-alpha.5 → 2.8.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/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects player multimedia plugin
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 云垣
6
- * Version: v2.8.0-alpha.5
6
+ * Version: v2.8.0
7
7
  */
8
8
 
9
9
  'use strict';
@@ -269,7 +269,13 @@ var multimediaErrorDisplayMessageMap = {
269
269
  2000: "音视频自动播放权限未开启"
270
270
  };
271
271
 
272
- function processMultimedia(media, type, options) {
272
+ /**
273
+ * 处理多媒体资源加载
274
+ * @param media - 多媒体资源数组
275
+ * @param type - 多媒体类型(视频或音频)
276
+ * @param options - 场景加载选项
277
+ * @returns 加载完成的多媒体资源数组
278
+ */ function processMultimedia(media, type, options) {
273
279
  return _processMultimedia.apply(this, arguments);
274
280
  }
275
281
  function _processMultimedia() {
@@ -279,11 +285,13 @@ function _processMultimedia() {
279
285
  renderLevel = options.renderLevel;
280
286
  jobs = media.map(function(medium) {
281
287
  if (EFFECTS.passRenderLevel(medium.renderLevel, renderLevel)) {
282
- var url = new URL(medium.url, location.href).href;
283
288
  if (type === EFFECTS.spec.MultimediaType.video) {
289
+ var videoURL = getVideoUrl(medium, options);
290
+ var url = new URL(videoURL, location.href).href;
284
291
  return EFFECTS.loadVideo(url);
285
292
  } else if (type === EFFECTS.spec.MultimediaType.audio) {
286
- return loadAudio(url);
293
+ var url1 = new URL(medium.url, location.href).href;
294
+ return loadAudio(url1);
287
295
  }
288
296
  }
289
297
  throw new Error("Invalid " + type + " source: " + JSON.stringify(media) + ".");
@@ -298,6 +306,7 @@ function _processMultimedia() {
298
306
  }
299
307
  /**
300
308
  * 判断音视频浏览器是否允许播放
309
+ * @throws {MultimediaError} 当浏览器不允许自动播放时抛出错误
301
310
  */ function checkAutoplayPermission() {
302
311
  return _checkAutoplayPermission.apply(this, arguments);
303
312
  }
@@ -344,7 +353,9 @@ function _checkAutoplayPermission() {
344
353
  }
345
354
  /**
346
355
  * 异步加载一个音频文件
347
- * @param url - 音频文件的 URL 或 MediaProvider 对象
356
+ * @param url - 音频文件的 URL
357
+ * @returns 返回 AudioBuffer(如果支持 AudioContext)或 HTMLAudioElement
358
+ * @throws {Error} 当音频加载失败时抛出错误
348
359
  */ function loadAudio(url) {
349
360
  return _loadAudio.apply(this, arguments);
350
361
  }
@@ -416,7 +427,9 @@ function _loadAudio() {
416
427
  });
417
428
  return _loadAudio.apply(this, arguments);
418
429
  }
419
- var MultimediaError = /*#__PURE__*/ function(Error1) {
430
+ /**
431
+ * 多媒体错误类
432
+ */ var MultimediaError = /*#__PURE__*/ function(Error1) {
420
433
  _inherits(MultimediaError, Error1);
421
434
  function MultimediaError(code, message) {
422
435
  var _this;
@@ -430,6 +443,63 @@ var MultimediaError = /*#__PURE__*/ function(Error1) {
430
443
  }
431
444
  return MultimediaError;
432
445
  }(_wrap_native_super(Error));
446
+ /**
447
+ * 检查浏览器是否支持播放指定的 HEVC 编解码器
448
+ * @param codec - HEVC 编解码器
449
+ * @returns 如果浏览器可能或确定支持该编解码器,则返回 true,否则返回 false
450
+ */ function canPlayHevcCodec(codec) {
451
+ var video = document.createElement("video");
452
+ var contentType = 'video/mp4; codecs="' + codec + '"';
453
+ var result = video.canPlayType(contentType);
454
+ return result === "probably" || result === "maybe";
455
+ }
456
+ /**
457
+ * 将编解码器字符串解析为 HEVC 视频编解码器枚举值
458
+ * @param codec - 编解码器字符串(可以是枚举值或枚举名称)
459
+ * @returns 对应的 HEVC 视频编解码器枚举值,如果无效则返回 undefined
460
+ */ function parseCodec(codec) {
461
+ // 传入的是完整的枚举值
462
+ if (isCodecValue(codec)) {
463
+ return codec;
464
+ }
465
+ // 传入的是枚举名称
466
+ if (isCodecKey(codec)) {
467
+ return EFFECTS.spec.HevcVideoCodec[codec];
468
+ }
469
+ return undefined;
470
+ }
471
+ /**
472
+ * 检查给定字符串是否为有效的 HEVC 枚举值
473
+ * @param codec - 待检查的字符串
474
+ * @returns 如果是有效的枚举值则返回 true
475
+ */ function isCodecValue(codec) {
476
+ return Object.keys(EFFECTS.spec.HevcVideoCodec).some(function(key) {
477
+ return EFFECTS.spec.HevcVideoCodec[key] === codec;
478
+ });
479
+ }
480
+ /**
481
+ * 检查给定字符串是否为有效的 HEVC 枚举键名
482
+ * @param codec - 待检查的字符串
483
+ * @returns 如果是有效的枚举键名则返回 true
484
+ */ function isCodecKey(codec) {
485
+ return codec in EFFECTS.spec.HevcVideoCodec;
486
+ }
487
+ /**
488
+ * 获取视频 URL,根据配置和浏览器能力选择最优的视频源
489
+ * @param medium - 媒体资源对象
490
+ * @param options - 场景加载选项
491
+ * @returns 最优的视频 URL(优先返回 HEVC 格式,如果支持的话)
492
+ */ function getVideoUrl(medium, options) {
493
+ if (!options.useHevcVideo) {
494
+ return medium.url;
495
+ }
496
+ var hevc = medium.hevc;
497
+ if (!(hevc == null ? void 0 : hevc.url) || !(hevc == null ? void 0 : hevc.codec)) {
498
+ return medium.url;
499
+ }
500
+ var codec = parseCodec(hevc.codec);
501
+ return codec && canPlayHevcCodec(codec) ? hevc.url : medium.url;
502
+ }
433
503
 
434
504
  /**
435
505
  * 视频加载插件
@@ -1142,7 +1212,7 @@ exports.AudioComponent = __decorate([
1142
1212
 
1143
1213
  /**
1144
1214
  * 插件版本号
1145
- */ var version = "2.8.0-alpha.5";
1215
+ */ var version = "2.8.0";
1146
1216
  EFFECTS.registerPlugin("video", VideoLoader);
1147
1217
  EFFECTS.registerPlugin("audio", AudioLoader);
1148
1218
  EFFECTS.logger.info("Plugin multimedia version: " + version + ".");
@@ -1152,10 +1222,12 @@ if (version !== EFFECTS__namespace.version) {
1152
1222
 
1153
1223
  exports.AudioPlayer = AudioPlayer;
1154
1224
  exports.MultimediaError = MultimediaError;
1225
+ exports.canPlayHevcCodec = canPlayHevcCodec;
1155
1226
  exports.checkAutoplayPermission = checkAutoplayPermission;
1156
1227
  exports.loadAudio = loadAudio;
1157
1228
  exports.multimediaErrorDisplayMessageMap = multimediaErrorDisplayMessageMap;
1158
1229
  exports.multimediaErrorMessageMap = multimediaErrorMessageMap;
1230
+ exports.parseCodec = parseCodec;
1159
1231
  exports.processMultimedia = processMultimedia;
1160
1232
  exports.version = version;
1161
1233
  //# sourceMappingURL=index.js.map