@shijiu/jsview-vue 0.9.490 → 0.9.590

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.
Files changed (220) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
  2. package/dom/bin/jsview-dom.min.js +1 -1
  3. package/dom/target_core_revision.js +4 -3
  4. package/index.js +10 -0
  5. package/package.json +8 -1
  6. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +20 -6
  7. package/samples/AnimPicture/App.vue +89 -106
  8. package/samples/Basic/App.vue +65 -68
  9. package/samples/Basic/components/ContentBlock.vue +31 -36
  10. package/samples/Basic/components/anim/AnimGroup.vue +61 -75
  11. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +54 -43
  12. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +25 -31
  13. package/samples/Basic/components/anim/AnimTransition.vue +142 -105
  14. package/samples/Basic/components/div/DivBackground.vue +38 -16
  15. package/samples/Basic/components/div/DivClip.vue +143 -78
  16. package/samples/Basic/components/div/DivCssScoped.vue +10 -10
  17. package/samples/Basic/components/div/DivCssVar.vue +40 -42
  18. package/samples/Basic/components/div/DivGroup1.vue +45 -39
  19. package/samples/Basic/components/div/DivGroup2.vue +56 -45
  20. package/samples/Basic/components/div/DivLayout.vue +34 -5
  21. package/samples/Basic/components/div/DivRadius.vue +51 -42
  22. package/samples/Basic/components/div/DivTransform.vue +21 -16
  23. package/samples/Basic/components/panel/Panel1.vue +46 -44
  24. package/samples/Basic/components/panel/Panel2.vue +22 -26
  25. package/samples/Basic/components/panel/TitleBar.vue +12 -12
  26. package/samples/Basic/components/text/TextAlign.vue +54 -44
  27. package/samples/Basic/components/text/TextEmoji.vue +16 -20
  28. package/samples/Basic/components/text/TextFontStyle.vue +77 -53
  29. package/samples/Basic/components/text/TextGroup1.vue +46 -38
  30. package/samples/Basic/components/text/TextGroup2.vue +25 -28
  31. package/samples/Basic/components/text/TextOverflow.vue +76 -57
  32. package/samples/BasicFocusControl/App.vue +22 -43
  33. package/samples/BasicFocusControl/components/BaseBlock.vue +42 -43
  34. package/samples/BasicFocusControl/components/MainArea.vue +55 -70
  35. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +11 -15
  36. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +21 -24
  37. package/samples/BasicFocusControl/components/SideBar.vue +32 -47
  38. package/samples/BasicFocusControl/components/SideBarBlock.vue +20 -23
  39. package/samples/ColorSpace/App.vue +15 -24
  40. package/samples/DemoHomepage/App.vue +7 -11
  41. package/samples/DemoHomepage/components/BodyFrame.vue +19 -9
  42. package/samples/DemoHomepage/components/TabFrame.vue +7 -8
  43. package/samples/DemoHomepage/router.js +33 -34
  44. package/samples/DemoHomepage/views/Homepage.vue +24 -8
  45. package/samples/FilterDemo/AnimatePic.vue +58 -0
  46. package/samples/FilterDemo/App.vue +99 -61
  47. package/samples/FilterDemo/VideoLayer.vue +62 -0
  48. package/samples/FlipCard/App.vue +32 -41
  49. package/samples/FlipCard/FlipCard.vue +48 -54
  50. package/samples/GridDemo/App.vue +109 -77
  51. package/samples/GridDemo/ButtonBlock.vue +50 -49
  52. package/samples/GridDemo/FocusItem.vue +19 -38
  53. package/samples/GridDemo/Item.vue +46 -54
  54. package/samples/HashHistory/App.vue +63 -79
  55. package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
  56. package/samples/HashHistory/components/Item.vue +42 -56
  57. package/samples/HashHistory/router.js +23 -12
  58. package/samples/HashHistory/views/MainPage.vue +35 -46
  59. package/samples/HashHistory/views/SubPage.vue +34 -47
  60. package/samples/Input/App.vue +2 -3
  61. package/samples/Input/FullKeyboard.vue +2 -6
  62. package/samples/Input/InputPanel.vue +2 -3
  63. package/samples/Input/KeyboardItem.vue +1 -1
  64. package/samples/LongImage/App.vue +11 -27
  65. package/samples/LongImage/Button.vue +50 -145
  66. package/samples/LongImage/ButtonItem.vue +44 -0
  67. package/samples/LongImage/LongImageScroll.vue +71 -106
  68. package/samples/LongImage/Scroll.vue +7 -9
  69. package/samples/LongText/App.vue +13 -28
  70. package/samples/LongText/Button.vue +43 -145
  71. package/samples/LongText/ButtonItem.vue +44 -0
  72. package/samples/LongText/LongTextScroll.vue +68 -101
  73. package/samples/LongText/Scroll.vue +7 -9
  74. package/samples/Marquee/App.vue +34 -37
  75. package/samples/MaskClip/App.vue +17 -30
  76. package/samples/MetroWidgetDemos/Advanced/App.vue +211 -0
  77. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  78. package/samples/MetroWidgetDemos/Item.vue +67 -0
  79. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  80. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  81. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  82. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  83. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  84. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  85. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  97. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  98. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  99. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  100. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  101. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  102. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +58 -0
  103. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +69 -0
  104. package/samples/MetroWidgetDemos/PingPong/Item.vue +92 -0
  105. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  106. package/samples/MetroWidgetDemos/Simple/App.vue +194 -0
  107. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  108. package/samples/MetroWidgetDemos/data.js +204 -0
  109. package/samples/NinePatchDemo/App.vue +114 -115
  110. package/samples/NinePatchDemo/Item.vue +7 -8
  111. package/samples/NinePatchDemo/assets/border.png +0 -0
  112. package/samples/Preload/App.vue +61 -63
  113. package/samples/Preload/Item.vue +21 -29
  114. package/samples/QrcodeDemo/App.vue +24 -29
  115. package/samples/SoundPool/App.vue +77 -106
  116. package/samples/SprayView/App.vue +10 -8
  117. package/samples/SpriteImage/App.vue +1 -2
  118. package/samples/TextBox/App.vue +86 -101
  119. package/samples/TextBox/RenderCenter.vue +1 -1
  120. package/samples/TextBox/RenderLeft.vue +1 -1
  121. package/samples/TextBox/RenderOneLine.vue +1 -1
  122. package/samples/TextBox/RenderRight.vue +1 -1
  123. package/samples/TextShadowDemo/App.vue +1 -2
  124. package/samples/TextureAnimation/App.vue +16 -13
  125. package/samples/TextureSize/App.vue +15 -25
  126. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  127. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  128. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  129. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  130. package/samples/TouchSample/App.vue +2 -3
  131. package/samples/TouchSample/Item.vue +15 -13
  132. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  133. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  134. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  135. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  136. package/samples/TransitPage/App.vue +20 -32
  137. package/samples/VideoDemo/App.vue +65 -81
  138. package/samples/VideoDemo/components/Button.vue +41 -52
  139. package/samples/VideoDemo/components/Controllor.vue +171 -169
  140. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  141. package/samples/VisibleSensorDemo/App.vue +167 -0
  142. package/scripts/jsview-jsmap-serve.js +42 -0
  143. package/scripts/jsview-post-build.js +6 -1
  144. package/scripts/jsview-post-install.js +1 -1
  145. package/tsconfig.json +3 -0
  146. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  147. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  148. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1557 -1656
  149. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  150. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  151. package/utils/JsViewEngineWidget/SimpleWidget/SimpleWidget.vue +2 -0
  152. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  153. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  154. package/utils/JsViewEngineWidget/index.js +4 -4
  155. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  156. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +284 -57
  157. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
  158. package/utils/JsViewPlugin/JsvPlayer/JsvPlayerBrowser.vue +25 -12
  159. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  160. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  161. package/utils/JsViewVueTools/index.js +19 -0
  162. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +25 -10
  163. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +1 -1
  164. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  165. package/utils/JsViewVueWidget/JsvGrid.vue +140 -42
  166. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  167. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  168. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  169. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  170. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  171. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
  172. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +13 -4
  173. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  174. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  175. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
  176. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  177. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  178. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  179. package/utils/JsViewVueWidget/index.js +42 -0
  180. package/samples/AdvanceMetroWidget/App.vue +0 -123
  181. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  182. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  183. package/samples/AdvanceMetroWidget/data.js +0 -137
  184. package/samples/ClassNameDemo/App.vue +0 -119
  185. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  186. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  187. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  188. package/samples/ClassNameDemo/data.js +0 -24
  189. package/samples/FlowMultiWidget/App.vue +0 -91
  190. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  191. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  192. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  193. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  194. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  195. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  196. package/samples/FlowMultiWidget/data.js +0 -446
  197. package/samples/HashHistory/views/BasePage.vue +0 -19
  198. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  199. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  200. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  201. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  202. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  203. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  204. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  205. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  206. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  207. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  208. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  209. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  210. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  211. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  212. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  213. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  214. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  215. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  216. package/samples/SimpleWidgetDemo/data.js +0 -124
  217. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  218. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  219. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  220. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -1,6 +1,21 @@
1
1
  /* eslint-disable no-prototype-builtins */
2
2
  import {getPluginInfo} from './GetVersion'
3
3
 
4
+ let EVENT_STATUS_NONE = 0;
5
+ let EVENT_STATUS_LOADSTART = 1;
6
+ let EVENT_STATUS_LOAD = 2;
7
+ let EVENT_STATUS_SEEK = 3;
8
+ let EVENT_STATUS_SEEKED = 4;
9
+ let EVENT_STATUS_STALLED = 5;
10
+ let EVENT_STATUS_RESUME = 6;
11
+ let EVENT_STATUS_DISPLAY = 7;
12
+ let EVENT_STATUS_TIMESHIFT = 8;
13
+ let EVENT_STATUS_TIMESHIFTED = 9;
14
+ let EVENT_STATUS_BACKLIVE = 10;
15
+ let EVENT_STATUS_BACKLIVED = 11;
16
+ let EVENT_STATUS_END = 12;
17
+
18
+
4
19
  let MediaPluginInfo = getPluginInfo();
5
20
 
6
21
  var mediaArray = [];
@@ -12,7 +27,7 @@ let LOG_LEVEL_ERROR = 4;
12
27
  let LOG_LEVEL_WARNING = 3;
13
28
  let LOG_LEVEL_DEBUG = 2;
14
29
  let LOG_LEVEL_TRACE = 1;
15
- let LogLevel = LOG_LEVEL_DEBUG;
30
+ let LogLevel = LOG_LEVEL_TRACE;
16
31
  function logPrint(level, message){
17
32
  if(level >= LogLevel){
18
33
  console.log(message);
@@ -175,7 +190,9 @@ function findMediaObjectByKey(key){
175
190
  }
176
191
 
177
192
  class JsvBaseMedia {
178
- constructor(type, hole_id, player_type, key, background, design_map_width) {
193
+ constructor(type, hole_id, player_type, key, background, design_map_width, decode_type) {
194
+ logTrace("Create JsvBaseMedia, type="+type+", hole_id="+hole_id+", player_type="+player_type+", key="+key+", background="+background+", design_map_width="+design_map_width+", decode_type="+decode_type);
195
+
179
196
  this.state = {
180
197
  muted: false,
181
198
  paused: true,
@@ -207,9 +224,12 @@ class JsvBaseMedia {
207
224
  this.holeIdModify = hole_id;
208
225
  this.playerType = player_type;
209
226
  this.designMapWidth = design_map_width;
227
+ this.decodeType = decode_type;
210
228
  this.channelID = -1;
211
229
  this.ref = 1;
212
230
  this.appVisible = window.JsView&&window.JsView.getVisibility?(window.JsView.getVisibility()==="show"):true;
231
+ this.eventReport = true;
232
+ this.currentEventStatus = EVENT_STATUS_NONE;
213
233
  this._onEvent = this.onEvent.bind(this);
214
234
  this._onVisibilityChangeCallBack = this.onVisibilityChangeCallBack.bind(this);
215
235
 
@@ -236,6 +256,8 @@ class JsvBaseMedia {
236
256
  * 私有接口,外部不需要调用此接口。
237
257
  */
238
258
  buildPlatformInstance() {
259
+ logTrace("buildPlatformInstance, key="+this.key);
260
+
239
261
  if(typeof window.jsvPlayerBridge=='undefined' || !window.jsvPlayerBridge){
240
262
  logError("no jsvPlayerBridge");
241
263
  return;
@@ -243,7 +265,7 @@ class JsvBaseMedia {
243
265
 
244
266
  let share_view = true;
245
267
 
246
- let result = window.jsvPlayerBridge.CreatePlayer(this.key, this.holeId, this.background, this.designMapWidth, share_view, this.playerType, "top.CreatePlayerResult");
268
+ let result = window.jsvPlayerBridge.CreatePlayer(this.key, this.holeId, this.background, this.designMapWidth, share_view, this.playerType, this.decodeType, "top.CreatePlayerResult");
247
269
  if(result > 0){
248
270
  this.initPlayer();
249
271
  }
@@ -256,6 +278,8 @@ class JsvBaseMedia {
256
278
  if(this.playerCreate)
257
279
  return;
258
280
 
281
+ logDebug("InitPlayer:1, key="+this.key);
282
+
259
283
  this.playerCreate = true;
260
284
 
261
285
  window.JMD.subscribe(this.key, this._onEvent);
@@ -264,7 +288,6 @@ class JsvBaseMedia {
264
288
  window.JsView.onVisibilityChange(this._onVisibilityChangeCallBack);
265
289
  }
266
290
 
267
- logDebug("InitPlayer:1");
268
291
  if(this.holeIdModify !== this.holeId){
269
292
  window.jsvPlayerBridge.setHoleID(this.key, this.holeIdModify);
270
293
  this.holeId = this.holeIdModify;
@@ -278,8 +301,10 @@ class JsvBaseMedia {
278
301
  }
279
302
 
280
303
  initParams(){
304
+ logDebug("InitPlayer:2, key="+this.key);
305
+
281
306
  if(this.channelID >= 0){
282
- this.joinChannel(this.channelID);
307
+ this.joinChannelPrivate(this.channelID);
283
308
  }else if(this.state["src"]){
284
309
  this.setState("src", this.state["src"], "string");
285
310
  if(this.state["currentTime"]){
@@ -289,7 +314,6 @@ class JsvBaseMedia {
289
314
  }
290
315
  }
291
316
 
292
- logDebug("InitPlayer:2");
293
317
  if(this.state["paused"] == false){
294
318
  this.setState("paused", this.state["paused"], "boolean");
295
319
  }
@@ -321,7 +345,14 @@ class JsvBaseMedia {
321
345
 
322
346
  onVisibilityChangeCallBack(){
323
347
  let visible = window.JsView&&window.JsView.getVisibility?(window.JsView.getVisibility()==="show"):true;
348
+
324
349
  logDebug("playerKey:"+this.key+", 小程序可见状态: "+visible);
350
+
351
+ if(visible === this.appVisible){
352
+ logDebug("playerKey:"+this.key+", 小程序可见状态未发生变化,不执行动作");
353
+ return;
354
+ }
355
+
325
356
  if(visible){
326
357
  this.appVisible = visible;
327
358
  this.state.paused = this.local.paused;
@@ -331,6 +362,7 @@ class JsvBaseMedia {
331
362
  }else{
332
363
  logDebug("playerKey:"+this.key+", playerCreate: "+this.playerCreate+", channelID: "+this.channelID+", src: "+this.state["src"]);
333
364
  if(this.playerCreate){
365
+ this.eventReport = false;
334
366
  if(this.channelID > 0){
335
367
  logDebug("leaveChannel");
336
368
  window.jsvPlayerBridge.leaveChannel(this.key);
@@ -339,7 +371,7 @@ class JsvBaseMedia {
339
371
  this.local.currentTime = this.currentTime;
340
372
  this.local.paused = this.paused;
341
373
  logDebug("currentTime: "+this.local.currentTime);
342
- this.unload();
374
+ this.unloadPrivate();
343
375
  }
344
376
  }
345
377
  this.appVisible = visible;
@@ -358,6 +390,7 @@ class JsvBaseMedia {
358
390
  * 释放播放器,一般不需要应用逻辑调用,在JsvPlayer高阶组件unmounted处理时调用此接口释放。
359
391
  */
360
392
  releasePlayer(){
393
+ logTrace("releasePlayer, key="+this.key+", ref="+this.ref);
361
394
  this.ref--;
362
395
  if(this.ref === 0){
363
396
  if(typeof window.jsvPlayerBridge != "undefined" && window.jsvPlayerBridge){
@@ -379,7 +412,7 @@ class JsvBaseMedia {
379
412
  }
380
413
 
381
414
  setHoleID(hole_id){
382
-
415
+ logTrace("setHoleID, key="+this.key+", hole_id="+hole_id);
383
416
  if(this.playerCreate){
384
417
  this.holeId = hole_id;
385
418
  this.holeIdModify = hole_id;
@@ -389,6 +422,102 @@ class JsvBaseMedia {
389
422
  }
390
423
  }
391
424
 
425
+ needReportEvent(event){
426
+ let ret = true;
427
+ if(!this.eventReport){
428
+ ret = false;
429
+ switch(this.currentEventStatus){
430
+ case EVENT_STATUS_NONE:
431
+ this.eventReport = true;
432
+ ret = true;
433
+ break;
434
+ case EVENT_STATUS_LOADSTART:
435
+ if(event == EVENT_STATUS_LOADSTART || event == EVENT_STATUS_LOAD || event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED){
436
+ this.eventReport = true;
437
+ }
438
+ if(event == EVENT_STATUS_LOADSTART){
439
+ ret = false;
440
+ }else{
441
+ ret = true;
442
+ }
443
+ break;
444
+ case EVENT_STATUS_LOAD:
445
+ if(event == EVENT_STATUS_LOAD || event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED){
446
+ this.eventReport = true;
447
+ }
448
+ if(event == EVENT_STATUS_LOADSTART || event == EVENT_STATUS_LOAD){
449
+ ret = false;
450
+ }else{
451
+ ret = true;
452
+ }
453
+ break;
454
+ case EVENT_STATUS_DISPLAY:
455
+ if(event == EVENT_STATUS_DISPLAY || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_TIMESHIFTED){
456
+ this.eventReport = true;
457
+ }
458
+ if(event != EVENT_STATUS_END){
459
+ ret = false;
460
+ }else{
461
+ ret = true;
462
+ }
463
+ break;
464
+ case EVENT_STATUS_TIMESHIFT:
465
+ if(event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY){
466
+ this.eventReport = true;
467
+ }
468
+ if(event == EVENT_STATUS_TIMESHIFT){
469
+ ret = false;
470
+ }else{
471
+ ret = true;
472
+ }
473
+ break;
474
+ case EVENT_STATUS_TIMESHIFTED:
475
+ if(event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY){
476
+ this.eventReport = true;
477
+ }
478
+ if(event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED){
479
+ ret = false;
480
+ }else{
481
+ ret = true;
482
+ }
483
+ break;
484
+ case EVENT_STATUS_BACKLIVE:
485
+ if(event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY){
486
+ this.eventReport = true;
487
+ }
488
+ if(event == EVENT_STATUS_BACKLIVE){
489
+ ret = false;
490
+ }else{
491
+ ret = true;
492
+ }
493
+ break;
494
+ case EVENT_STATUS_BACKLIVED:
495
+ if(event == EVENT_STATUS_TIMESHIFTED || event == EVENT_STATUS_TIMESHIFT || event == EVENT_STATUS_BACKLIVED || event == EVENT_STATUS_DISPLAY){
496
+ this.eventReport = true;
497
+ }
498
+ if(event == EVENT_STATUS_BACKLIVE || event == EVENT_STATUS_BACKLIVED){
499
+ ret = false;
500
+ }else{
501
+ ret = true;
502
+ }
503
+ break;
504
+ case EVENT_STATUS_END:
505
+ this.eventReport = true;
506
+ ret = true;
507
+ break;
508
+ default:
509
+ logWarning("current event status is "+this.currentEventStatus);
510
+ this.eventReport = true;
511
+ ret = true;
512
+ break;
513
+ }
514
+
515
+ logTrace("eventReport:"+this.eventReport+", ret="+ret);
516
+ }
517
+
518
+ return ret;
519
+ }
520
+
392
521
  /**
393
522
  * 私有接口,外部不需要调用此接口。
394
523
  */
@@ -425,33 +554,42 @@ class JsvBaseMedia {
425
554
  }
426
555
  break;
427
556
  case "onEnd":
428
- this.local.isRenderable = false;
429
- this.setState("paused", true, "boolean");
430
- if(this.hasOwnProperty("onend")){
431
- this["onend"]();
557
+ if(this.needReportEvent(EVENT_STATUS_END)){
558
+ this.local.isRenderable = false;
559
+ this.setState("paused", true, "boolean");
560
+ if(this.hasOwnProperty("onend")){
561
+ this["onend"]();
562
+ }
563
+ this.currentEventStatus = EVENT_STATUS_END;
432
564
  }
433
565
  break;
434
566
  case "onLoadStart":
435
567
  logDebug("onLoadStart:"+data);
436
- if(this.hasOwnProperty("onloadstart")){
437
- this["onloadstart"]();
568
+ if(this.needReportEvent(EVENT_STATUS_LOADSTART)){
569
+ if(this.hasOwnProperty("onloadstart")){
570
+ this["onloadstart"]();
571
+ }
572
+ this.currentEventStatus = EVENT_STATUS_LOADSTART;
438
573
  }
439
574
  break;
440
575
  case "onLoad":
441
576
  logDebug("onLoad:"+data);
442
- this.local.currentTime = data.currentTime;
443
- this.local.duration = data.duration;
577
+ if(this.needReportEvent(EVENT_STATUS_LOAD)){
578
+ this.local.currentTime = data.currentTime;
579
+ this.local.duration = data.duration;
444
580
 
445
- if (this.hasOwnProperty("onloadedmetadata")) {
446
- this["onloadedmetadata"]();
447
- }
581
+ if (this.hasOwnProperty("onloadedmetadata")) {
582
+ this["onloadedmetadata"]();
583
+ }
448
584
 
449
- if (this.hasOwnProperty("onload")) {
450
- this["onload"]();
451
- }
585
+ if (this.hasOwnProperty("onload")) {
586
+ this["onload"]();
587
+ }
452
588
 
453
- if (this.hasOwnProperty("ondurationchange")) {
454
- this["ondurationchange"]();
589
+ if (this.hasOwnProperty("ondurationchange")) {
590
+ this["ondurationchange"]();
591
+ }
592
+ this.currentEventStatus = EVENT_STATUS_LOAD;
455
593
  }
456
594
  break;
457
595
  case "onError":
@@ -464,6 +602,7 @@ class JsvBaseMedia {
464
602
  MEDIA_ERR_DECODE: 3,
465
603
  MEDIA_ERR_SRC_NOT_SUPPORTED: 4,
466
604
  MEDIA_ERR_ONLY_ONE_4K: 5,
605
+ MEDIA_ERR_NO_DECODE_RESOURCE: 6,
467
606
  };
468
607
  const platform_error = data.error.what;
469
608
  let e = Error.MEDIA_ERR_ABORTED;
@@ -479,15 +618,23 @@ class JsvBaseMedia {
479
618
  break;
480
619
  case -50001:
481
620
  e = Error.MEDIA_ERR_ONLY_ONE_4K;
621
+ break;
622
+ case -50002:
623
+ e = Error.MEDIA_ERR_NO_DECODE_RESOURCE;
624
+ break;
625
+ default:
626
+ break;
482
627
  }
483
628
  this["onerror"](e);
484
629
  }
485
630
  break;
486
631
  case "onSeek":
487
632
  logDebug("onSeek:"+data);
488
- this.local.isRenderable = false;
489
- if(this.hasOwnProperty("onseeking")){
490
- this["onseeking"]();
633
+ if(this.needReportEvent(EVENT_STATUS_SEEK)){
634
+ this.local.isRenderable = false;
635
+ if(this.hasOwnProperty("onseeking")){
636
+ this["onseeking"]();
637
+ }
491
638
  }
492
639
  break;
493
640
  case "onEventExt":
@@ -499,9 +646,11 @@ class JsvBaseMedia {
499
646
  }
500
647
  break;
501
648
  case "videoSeekComplete" :
502
- //this.local.isRenderable = true; // waiting until BUFFERING END
503
- if (this.hasOwnProperty("onseeked")) {
504
- this["onseeked"]();
649
+ if(this.needReportEvent(EVENT_STATUS_SEEKED)){
650
+ //this.local.isRenderable = true; // waiting until BUFFERING END
651
+ if (this.hasOwnProperty("onseeked")) {
652
+ this["onseeked"]();
653
+ }
505
654
  }
506
655
  break;
507
656
  default:
@@ -522,45 +671,64 @@ class JsvBaseMedia {
522
671
  }
523
672
  break;
524
673
  case "onPlaybackStalled":
525
- this.local.isRenderable = false;
526
- if(this.hasOwnProperty("onstalled")){
527
- this["onstalled"]();
674
+ if(this.needReportEvent(EVENT_STATUS_STALLED)){
675
+ this.local.isRenderable = false;
676
+ if(this.hasOwnProperty("onstalled")){
677
+ this["onstalled"]();
678
+ }
528
679
  }
529
680
  break;
530
681
  case "onPlaybackResume":
531
- this.local.isRenderable = true;
532
- if(this.hasOwnProperty("onplaying")){
533
- this["onplaying"]();
682
+ if(this.needReportEvent(EVENT_STATUS_RESUME)){
683
+ this.local.isRenderable = true;
684
+ if(this.hasOwnProperty("onplaying")){
685
+ this["onplaying"]();
686
+ }
534
687
  }
535
688
  break;
536
689
  case "onReadyForDisplay":
537
- this.local.isRenderable = true;
538
- if(this.hasOwnProperty("oncanplay")){
539
- this["oncanplay"]();
690
+ if(this.needReportEvent(EVENT_STATUS_DISPLAY)){
691
+ this.local.isRenderable = true;
692
+ if(this.hasOwnProperty("oncanplay")){
693
+ this["oncanplay"]();
694
+ }
695
+ this.currentEventStatus = EVENT_STATUS_DISPLAY;
540
696
  }
541
697
  break;
542
698
  case "onTimeShift":
543
699
  logDebug("onTimeShift");
544
- if(this.hasOwnProperty("ontimeshift")){
545
- this["ontimeshift"](data.seekTime);
700
+ if(this.needReportEvent(EVENT_STATUS_TIMESHIFT)){
701
+ if(this.hasOwnProperty("ontimeshift")){
702
+ this["ontimeshift"](data.seekTime);
703
+ }
704
+ this.currentEventStatus = EVENT_STATUS_TIMESHIFT;
546
705
  }
547
706
  break;
548
707
  case "onTimeShifted":
549
708
  logDebug("onTimeShifted");
550
- if(this.hasOwnProperty("ontimeshifted")){
551
- this["ontimeshifted"]();
709
+ if(this.needReportEvent(EVENT_STATUS_TIMESHIFTED)){
710
+ if(this.hasOwnProperty("ontimeshifted")){
711
+ this["ontimeshifted"]();
712
+ }
713
+ this.currentEventStatus = EVENT_STATUS_TIMESHIFTED;
552
714
  }
553
715
  break;
554
716
  case "onBackLive":
555
717
  logDebug("onBackLive");
556
- if(this.hasOwnProperty("onbacklive")){
557
- this["onbacklive"]();
718
+ if(this.needReportEvent(EVENT_STATUS_BACKLIVE)){
719
+ if(this.hasOwnProperty("onbacklive")){
720
+ this["onbacklive"]();
721
+ }
722
+ this.currentEventStatus = EVENT_STATUS_BACKLIVE;
558
723
  }
559
724
  break;
560
725
  case "onBackLived":
561
726
  logDebug("onBackLived");
562
- if(this.hasOwnProperty("onbacklived")){
563
- this["onbacklived"]();
727
+ if(this.needReportEvent(EVENT_STATUS_BACKLIVED)){
728
+ if(this.hasOwnProperty("onbacklived")){
729
+ this["onbacklived"]();
730
+ }
731
+ this.currentEventStatus = EVENT_STATUS_BACKLIVED;
564
732
  }
565
733
  break;
566
734
  default:
@@ -594,7 +762,7 @@ class JsvBaseMedia {
594
762
  set currentTime(value) {
595
763
  this.local.isRenderable = false;
596
764
  this.local.currentTime = value;
597
- this.setState("currentTime", value, "number");
765
+ this.setState("currentTime", value, "number");
598
766
  }
599
767
 
600
768
  /**
@@ -725,8 +893,9 @@ class JsvBaseMedia {
725
893
  * @param {string} head 网络请求的head信息,可以为NULL。
726
894
  * @param {int} type 类型,1表示点播,2表示直播,3表示时移,默认1。
727
895
  * @param {double} timeShift 时移时间,只有在type=3时才有效,表示从当前时间时移多长时间,单位秒。
896
+ * @param {int} 分辨率类型。0:unknown或其它;1:标清;2:高清;3:超清(720P);4:蓝光(1080P);5:2K;6:4K;7:8K。
728
897
  */
729
- setSrc(url, head, type, timeShift){
898
+ setSrc(url, head, type, timeShift, resolution){
730
899
  let src = {};
731
900
  src.url = url;
732
901
  if(head){
@@ -740,7 +909,14 @@ class JsvBaseMedia {
740
909
  if(type === 3 && timeShift){
741
910
  src.timeShift = timeShift;
742
911
  }
912
+
913
+ if(resolution && typeof resolution === "number"){
914
+ src.resolution = resolution;
915
+ }
916
+
917
+ this.currentEventStatus = EVENT_STATUS_NONE;
743
918
  this.setState("src", JSON.stringify(src), "string");
919
+ this.eventReport = true;
744
920
  }
745
921
 
746
922
  /**
@@ -785,10 +961,16 @@ class JsvBaseMedia {
785
961
  * 停止视频流。
786
962
  */
787
963
  unload() {
964
+ this.unloadPrivate();
965
+ this.currentEventStatus = EVENT_STATUS_NONE;
966
+ this.eventReport = true;
967
+ }
968
+
969
+ unloadPrivate(){
788
970
  this.setState("paused", true, "boolean");
789
971
  this.local.isRenderable = false;
790
972
  this.setState("enablePlayer", false, "boolean");
791
- }
973
+ }
792
974
 
793
975
  /**
794
976
  * 要求终端访问指定的频道,并立即返回。对由本地设置为跳过的频道,也返回-1。
@@ -801,6 +983,16 @@ class JsvBaseMedia {
801
983
  * @returns {int} 0,表示成功;-1:表示频道号无效。
802
984
  */
803
985
  joinChannel(mixNo){
986
+ logTrace("joinChannel, key="+this.key+", mixNo="+mixNo);
987
+ let ret = this.joinChannelPrivate(mixNo);
988
+ if(ret >= 0){
989
+ this.currentEventStatus = EVENT_STATUS_NONE;
990
+ this.eventReport = true;
991
+ }
992
+ return ret;
993
+ }
994
+
995
+ joinChannelPrivate(mixNo){
804
996
  if(mixNo <= 0){
805
997
  return -1;
806
998
  }
@@ -813,6 +1005,7 @@ class JsvBaseMedia {
813
1005
  if(ret >= 0){
814
1006
  this.channelID = mixNo;
815
1007
  this.local.paused = false;
1008
+
816
1009
  this.setState("paused", false, "boolean");
817
1010
  }
818
1011
 
@@ -828,6 +1021,15 @@ class JsvBaseMedia {
828
1021
  * @returns {int} 0,表示成功;-1:表示频道号无效。
829
1022
  */
830
1023
  leaveChannel(){
1024
+ logTrace("leaveChannel, key="+this.key+", channelID="+this.channelID);
1025
+ let ret = this.leaveChannelPrivate();
1026
+
1027
+ this.currentEventStatus = EVENT_STATUS_NONE;
1028
+ this.eventReport = true;
1029
+ return ret;
1030
+ }
1031
+
1032
+ leaveChannelPrivate(){
831
1033
  let ret = 0;
832
1034
  if(this.playerCreate && this.appVisible){
833
1035
  ret = window.jsvPlayerBridge.leaveChannel(this.key);
@@ -857,8 +1059,8 @@ class JsvBaseMedia {
857
1059
  * @return {int} 当前音量,0-100。
858
1060
  * */
859
1061
  getGlobalVolume(){
1062
+ logTrace("getGlobalVolume, key="+this.key);
860
1063
  if(typeof window.jsvPlayerBridge !== "undefined"){
861
- logDebug("getGlobalVolume");
862
1064
  return window.jsvPlayerBridge.getGlobalVolume(100);
863
1065
  }
864
1066
 
@@ -871,6 +1073,7 @@ class JsvBaseMedia {
871
1073
  * @param {int} flags 1表示显示音量调节UI;4表示使用提示音;5表示同时显示音量调节UI和使用提示音。
872
1074
  * */
873
1075
  setGlobalVolume(volume, flags){
1076
+ logTrace("setGlobalVolume, key="+this.key+", volume="+volume+", flags="+flags);
874
1077
  if(typeof window.jsvPlayerBridge !== "undefined"){
875
1078
  return window.jsvPlayerBridge.setGlobalVolume(volume, typeof flags!="undefined"?flags:0, 100);
876
1079
  }
@@ -882,6 +1085,7 @@ class JsvBaseMedia {
882
1085
  * @param {int} flags FLAG_SHOW_UI(1)表示显示音量调节UI;FLAG_PLAY_SOUND(4)表示使用提示音。两个值可以是或的关系。
883
1086
  * */
884
1087
  adjustGlobalVolume(direction, flags){
1088
+ logTrace("adjustGlobalVolume, key="+this.key+", direction="+direction+", flags="+flags);
885
1089
  if(typeof window.jsvPlayerBridge !== "undefined"){
886
1090
  return window.jsvPlayerBridge.adjustGlobalVolume(direction, typeof flags!="undefined"?flags:0);
887
1091
  }
@@ -893,6 +1097,7 @@ class JsvBaseMedia {
893
1097
  * @param {int} flags FLAG_SHOW_UI(1)表示显示音量调节UI;FLAG_PLAY_SOUND(4)表示使用提示音。两个值可以是或的关系。android 6.0(包含)以上有效。
894
1098
  * */
895
1099
  setGlobalMuted(status, flags){
1100
+ logTrace("setGlobalMuted, key="+this.key+", status="+status+", flags="+flags);
896
1101
  if(typeof window.jsvPlayerBridge !== "undefined"){
897
1102
  logDebug("setMuted:"+status);
898
1103
  window.jsvPlayerBridge.setGlobalMuted(status, typeof flags!="undefined"?flags:0);
@@ -904,6 +1109,7 @@ class JsvBaseMedia {
904
1109
  * @return {boolean} true表示静音,false表示非静音。
905
1110
  * */
906
1111
  getGlobalMutedStatus(){
1112
+ logTrace("getGlobalMutedStatus, key="+this.key);
907
1113
  if(typeof window.jsvPlayerBridge !== "undefined"){
908
1114
  return window.jsvPlayerBridge.getGlobalMutedStatus();
909
1115
  }
@@ -913,6 +1119,7 @@ class JsvBaseMedia {
913
1119
  * 回到视频的开头。
914
1120
  */
915
1121
  gotoStart(){
1122
+ logTrace("gotoStart, key="+this.key);
916
1123
  if(this.playerCreate && this.appVisible){
917
1124
  window.jsvPlayerBridge.gotoStart(this.key);
918
1125
  }else{
@@ -924,6 +1131,7 @@ class JsvBaseMedia {
924
1131
  * 到达视频的末尾。
925
1132
  */
926
1133
  gotoEnd(){
1134
+ logTrace("gotoEnd, key="+this.key);
927
1135
  if(this.playerCreate && this.appVisible){
928
1136
  window.jsvPlayerBridge.gotoEnd(this.key);
929
1137
  }
@@ -934,6 +1142,7 @@ class JsvBaseMedia {
934
1142
  * @returns {JsonObject} 包含两个字段:1、timeShift,boolean类型,true表示支持时移;2、timeShiftLength,int类型,最大时移时长。
935
1143
  */
936
1144
  getTimeShiftInfo(){
1145
+ logTrace("getTimeShiftInfo, key="+this.key);
937
1146
  let result = this.getProperty("timeShift");
938
1147
  if(result != null && result != "")
939
1148
  return JSON.parse(result);
@@ -946,6 +1155,7 @@ class JsvBaseMedia {
946
1155
  * @param {double} time,值为从当前时间计算向前移动了多长时间,单位秒。
947
1156
  */
948
1157
  setTimeShift(time){
1158
+ logTrace("setTimeShift, key="+this.key+", time"+time);
949
1159
  if(this.playerCreate && this.appVisible){
950
1160
  window.jsvPlayerBridge.setTimeShift(this.key, time);
951
1161
  }
@@ -1006,21 +1216,21 @@ class JsvBaseMedia {
1006
1216
  }
1007
1217
 
1008
1218
  class JsvMedia extends JsvBaseMedia {
1009
- constructor(type, hole_id, player_type, key, background, design_map_width) {
1010
- super(type, hole_id, player_type, key, background, design_map_width);
1219
+ constructor(type, hole_id, player_type, key, background, design_map_width, decode_type) {
1220
+ super(type, hole_id, player_type, key, background, design_map_width, decode_type);
1011
1221
  //super.buildPlatformInstance(type);
1012
1222
  }
1013
1223
  }
1014
1224
 
1015
1225
  class JsvMediaAudio extends JsvMedia {
1016
1226
  constructor() {
1017
- super("audio", null, null, null, null, null);
1227
+ super("audio", null, null, null, null, null, 0);
1018
1228
  }
1019
1229
  }
1020
1230
 
1021
1231
  class JsvMediaVideo extends JsvMedia {
1022
- constructor(hole_id, player_type, key, background, design_map_width) {
1023
- super("video", hole_id, player_type, key, background, design_map_width);
1232
+ constructor(hole_id, player_type, key, background, design_map_width, decode_type) {
1233
+ super("video", hole_id, player_type, key, background, design_map_width, decode_type);
1024
1234
 
1025
1235
  this.state.aspectRatio = 'origin'; // 'origin', 'full', '16:9', '4:3',
1026
1236
  }
@@ -1061,7 +1271,7 @@ class JsvMediaVideo extends JsvMedia {
1061
1271
 
1062
1272
  /**
1063
1273
  * 获取播放器能力集,当前主要是对4K多播放器的支持以及H265解码能力的支持。
1064
- * @return {string} 能力集数组。
1274
+ * @return {string} json string,能力集JSON数据格式。
1065
1275
  */
1066
1276
  function getJsvPlayerCapabilitySet(){
1067
1277
  if(typeof window.jsvPlayerBridge !== "undefined"){
@@ -1069,12 +1279,29 @@ function getJsvPlayerCapabilitySet(){
1069
1279
  }
1070
1280
  }
1071
1281
 
1282
+ /**
1283
+ * 设置指定视频类型的同时使用播放器个数,会check硬件是否支持系统设置的播放器个数,最好在小程序初始化的时候,使用播放器资源之前调用。
1284
+ * @param {string} videoType,对于H264,是video/avc,对于H265,是video/hevc,其他可以参考相关定义。
1285
+ * @param {int} num,需要使用的播放器个数。
1286
+ * @return {String} json string,对设置的播放器个数的支持状态,返回的总数不会大于设置的个数(实际硬件能力可能大于设置的个数)。
1287
+ * 支持三个属性:1、total:总的播放器个数;2、hardware:硬解播放器个数;3、软解播放器个数,如果硬解播放器个数不满足需求,会根据cpu能力确定是否提供软解播放器。
1288
+ * */
1289
+ function setJsvPlayerNumber(videoType, num){
1290
+ logTrace("setPlayerNumber, key="+this.key+", videoType="+videoType+", num="+num);
1291
+ if(typeof window.jsvPlayerBridge !== "undefined"){
1292
+ return window.jsvPlayerBridge.setPlayerNumber(videoType, num);
1293
+ }else{
1294
+ return null;
1295
+ }
1296
+ }
1297
+
1072
1298
  export {
1073
1299
  JsvMediaVideo,
1074
1300
  JsvMediaAudio,
1075
1301
  globalLoadJsvPlayerPlugin,
1076
1302
  findMediaObjectByKey,
1077
1303
  getJsvPlayerCapabilitySet,
1304
+ setJsvPlayerNumber,
1078
1305
  setLogLevel,
1079
1306
  logFatal,
1080
1307
  logError,