@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.
- package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
- package/dom/bin/jsview-dom.min.js +1 -1
- package/dom/target_core_revision.js +4 -3
- package/index.js +10 -0
- package/package.json +8 -1
- package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +20 -6
- package/samples/AnimPicture/App.vue +89 -106
- package/samples/Basic/App.vue +65 -68
- package/samples/Basic/components/ContentBlock.vue +31 -36
- package/samples/Basic/components/anim/AnimGroup.vue +61 -75
- package/samples/Basic/components/anim/AnimKeyframeBasic.vue +54 -43
- package/samples/Basic/components/anim/AnimKeyframeComposite.vue +25 -31
- package/samples/Basic/components/anim/AnimTransition.vue +142 -105
- package/samples/Basic/components/div/DivBackground.vue +38 -16
- package/samples/Basic/components/div/DivClip.vue +143 -78
- package/samples/Basic/components/div/DivCssScoped.vue +10 -10
- package/samples/Basic/components/div/DivCssVar.vue +40 -42
- package/samples/Basic/components/div/DivGroup1.vue +45 -39
- package/samples/Basic/components/div/DivGroup2.vue +56 -45
- package/samples/Basic/components/div/DivLayout.vue +34 -5
- package/samples/Basic/components/div/DivRadius.vue +51 -42
- package/samples/Basic/components/div/DivTransform.vue +21 -16
- package/samples/Basic/components/panel/Panel1.vue +46 -44
- package/samples/Basic/components/panel/Panel2.vue +22 -26
- package/samples/Basic/components/panel/TitleBar.vue +12 -12
- package/samples/Basic/components/text/TextAlign.vue +54 -44
- package/samples/Basic/components/text/TextEmoji.vue +16 -20
- package/samples/Basic/components/text/TextFontStyle.vue +77 -53
- package/samples/Basic/components/text/TextGroup1.vue +46 -38
- package/samples/Basic/components/text/TextGroup2.vue +25 -28
- package/samples/Basic/components/text/TextOverflow.vue +76 -57
- package/samples/BasicFocusControl/App.vue +22 -43
- package/samples/BasicFocusControl/components/BaseBlock.vue +42 -43
- package/samples/BasicFocusControl/components/MainArea.vue +55 -70
- package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +11 -15
- package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +21 -24
- package/samples/BasicFocusControl/components/SideBar.vue +32 -47
- package/samples/BasicFocusControl/components/SideBarBlock.vue +20 -23
- package/samples/ColorSpace/App.vue +15 -24
- package/samples/DemoHomepage/App.vue +7 -11
- package/samples/DemoHomepage/components/BodyFrame.vue +19 -9
- package/samples/DemoHomepage/components/TabFrame.vue +7 -8
- package/samples/DemoHomepage/router.js +33 -34
- package/samples/DemoHomepage/views/Homepage.vue +24 -8
- package/samples/FilterDemo/AnimatePic.vue +58 -0
- package/samples/FilterDemo/App.vue +99 -61
- package/samples/FilterDemo/VideoLayer.vue +62 -0
- package/samples/FlipCard/App.vue +32 -41
- package/samples/FlipCard/FlipCard.vue +48 -54
- package/samples/GridDemo/App.vue +109 -77
- package/samples/GridDemo/ButtonBlock.vue +50 -49
- package/samples/GridDemo/FocusItem.vue +19 -38
- package/samples/GridDemo/Item.vue +46 -54
- package/samples/HashHistory/App.vue +63 -79
- package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
- package/samples/HashHistory/components/Item.vue +42 -56
- package/samples/HashHistory/router.js +23 -12
- package/samples/HashHistory/views/MainPage.vue +35 -46
- package/samples/HashHistory/views/SubPage.vue +34 -47
- package/samples/Input/App.vue +2 -3
- package/samples/Input/FullKeyboard.vue +2 -6
- package/samples/Input/InputPanel.vue +2 -3
- package/samples/Input/KeyboardItem.vue +1 -1
- package/samples/LongImage/App.vue +11 -27
- package/samples/LongImage/Button.vue +50 -145
- package/samples/LongImage/ButtonItem.vue +44 -0
- package/samples/LongImage/LongImageScroll.vue +71 -106
- package/samples/LongImage/Scroll.vue +7 -9
- package/samples/LongText/App.vue +13 -28
- package/samples/LongText/Button.vue +43 -145
- package/samples/LongText/ButtonItem.vue +44 -0
- package/samples/LongText/LongTextScroll.vue +68 -101
- package/samples/LongText/Scroll.vue +7 -9
- package/samples/Marquee/App.vue +34 -37
- package/samples/MaskClip/App.vue +17 -30
- package/samples/MetroWidgetDemos/Advanced/App.vue +211 -0
- package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
- package/samples/MetroWidgetDemos/Item.vue +67 -0
- package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
- package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
- package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
- package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
- package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
- package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
- package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
- package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
- package/samples/MetroWidgetDemos/PingPong/AppPage.vue +58 -0
- package/samples/MetroWidgetDemos/PingPong/AppTab.vue +69 -0
- package/samples/MetroWidgetDemos/PingPong/Item.vue +92 -0
- package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
- package/samples/MetroWidgetDemos/Simple/App.vue +194 -0
- package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
- package/samples/MetroWidgetDemos/data.js +204 -0
- package/samples/NinePatchDemo/App.vue +114 -115
- package/samples/NinePatchDemo/Item.vue +7 -8
- package/samples/NinePatchDemo/assets/border.png +0 -0
- package/samples/Preload/App.vue +61 -63
- package/samples/Preload/Item.vue +21 -29
- package/samples/QrcodeDemo/App.vue +24 -29
- package/samples/SoundPool/App.vue +77 -106
- package/samples/SprayView/App.vue +10 -8
- package/samples/SpriteImage/App.vue +1 -2
- package/samples/TextBox/App.vue +86 -101
- package/samples/TextBox/RenderCenter.vue +1 -1
- package/samples/TextBox/RenderLeft.vue +1 -1
- package/samples/TextBox/RenderOneLine.vue +1 -1
- package/samples/TextBox/RenderRight.vue +1 -1
- package/samples/TextShadowDemo/App.vue +1 -2
- package/samples/TextureAnimation/App.vue +16 -13
- package/samples/TextureSize/App.vue +15 -25
- package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
- package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
- package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
- package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
- package/samples/TouchSample/App.vue +2 -3
- package/samples/TouchSample/Item.vue +15 -13
- package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
- package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
- package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
- package/samples/TouchSample/TouchContainerVertical.vue +3 -2
- package/samples/TransitPage/App.vue +20 -32
- package/samples/VideoDemo/App.vue +65 -81
- package/samples/VideoDemo/components/Button.vue +41 -52
- package/samples/VideoDemo/components/Controllor.vue +171 -169
- package/samples/VideoDemo/components/VideoFrame.vue +87 -99
- package/samples/VisibleSensorDemo/App.vue +167 -0
- package/scripts/jsview-jsmap-serve.js +42 -0
- package/scripts/jsview-post-build.js +6 -1
- package/scripts/jsview-post-install.js +1 -1
- package/tsconfig.json +3 -0
- package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
- package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1557 -1656
- package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
- package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
- package/utils/JsViewEngineWidget/SimpleWidget/SimpleWidget.vue +2 -0
- package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
- package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
- package/utils/JsViewEngineWidget/index.js +4 -4
- package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +284 -57
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayerBrowser.vue +25 -12
- package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
- package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
- package/utils/JsViewVueTools/index.js +19 -0
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +25 -10
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +1 -1
- package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
- package/utils/JsViewVueWidget/JsvGrid.vue +140 -42
- package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
- package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
- package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
- package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
- package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
- package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +13 -4
- package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
- package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
- package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
- package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
- package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
- package/utils/JsViewVueWidget/index.js +42 -0
- package/samples/AdvanceMetroWidget/App.vue +0 -123
- package/samples/AdvanceMetroWidget/Frame.vue +0 -102
- package/samples/AdvanceMetroWidget/Item.vue +0 -63
- package/samples/AdvanceMetroWidget/data.js +0 -137
- package/samples/ClassNameDemo/App.vue +0 -119
- package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
- package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
- package/samples/ClassNameDemo/components/TitleView.vue +0 -24
- package/samples/ClassNameDemo/data.js +0 -24
- package/samples/FlowMultiWidget/App.vue +0 -91
- package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
- package/samples/FlowMultiWidget/components/Block.vue +0 -107
- package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
- package/samples/FlowMultiWidget/components/Item.vue +0 -103
- package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
- package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
- package/samples/FlowMultiWidget/data.js +0 -446
- package/samples/HashHistory/views/BasePage.vue +0 -19
- package/samples/HashHistory/views/SubPageFirst.vue +0 -10
- package/samples/HashHistory/views/SubPageSecond.vue +0 -10
- package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
- package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
- package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
- package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
- package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
- package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
- package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
- package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
- package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
- package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
- package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
- package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
- package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
- package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
- package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
- package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
- package/samples/SimpleWidgetDemo/data.js +0 -124
- package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
- package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
- package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
- 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 =
|
|
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.
|
|
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.
|
|
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.
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
this
|
|
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.
|
|
437
|
-
this
|
|
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.
|
|
443
|
-
|
|
577
|
+
if(this.needReportEvent(EVENT_STATUS_LOAD)){
|
|
578
|
+
this.local.currentTime = data.currentTime;
|
|
579
|
+
this.local.duration = data.duration;
|
|
444
580
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
581
|
+
if (this.hasOwnProperty("onloadedmetadata")) {
|
|
582
|
+
this["onloadedmetadata"]();
|
|
583
|
+
}
|
|
448
584
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
585
|
+
if (this.hasOwnProperty("onload")) {
|
|
586
|
+
this["onload"]();
|
|
587
|
+
}
|
|
452
588
|
|
|
453
|
-
|
|
454
|
-
|
|
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.
|
|
489
|
-
|
|
490
|
-
this
|
|
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
|
-
|
|
503
|
-
|
|
504
|
-
this
|
|
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.
|
|
526
|
-
|
|
527
|
-
this
|
|
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.
|
|
532
|
-
|
|
533
|
-
this
|
|
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.
|
|
538
|
-
|
|
539
|
-
this
|
|
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.
|
|
545
|
-
this
|
|
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.
|
|
551
|
-
this
|
|
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.
|
|
557
|
-
this
|
|
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.
|
|
563
|
-
this
|
|
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
|
-
|
|
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,
|