Commit 6a7d8a2773a16f7937c14481b71c6736d01788ac
1 parent
92abb1c7
feat: implement video play m3u8 type
Showing
3 changed files
with
90 additions
and
10 deletions
... | ... | @@ -31,6 +31,11 @@ |
31 | 31 | <script src="./js/plugin/echarts/echarts.js"></script> |
32 | 32 | |
33 | 33 | <script src="./plugins/axios.min.js"></script> |
34 | + | |
35 | + <link href="https://vjs.zencdn.net/7.10.2/video-js.min.css" rel="stylesheet"> | |
36 | + <script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script> | |
37 | + | |
38 | + <!-- <script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script> --> | |
34 | 39 | <!-- <script src="./js/jquery/jquery-3.3.1.min.js"></script>--> |
35 | 40 | <link rel="stylesheet" href="https://cdnjs.loli.net/ajax/libs/layui/2.6.8/css/layui.min.css" |
36 | 41 | integrity="sha512-iQBJbsNHXUcgEIgWThd2dr8tOdKPvICwqjPEZYY81z3eMya44A5MiAqfWSCh+Ee1YzNYkdrI982Qhwgr8LEYOQ==" |
... | ... | @@ -419,6 +424,7 @@ |
419 | 424 | cursor: pointer; |
420 | 425 | margin: 5px; |
421 | 426 | } |
427 | + | |
422 | 428 | </style> |
423 | 429 | <!-- Workaround for binary XHR in IE 9/10, see App.loadUrl --> |
424 | 430 | <!--[if (IE 9)|(IE 10)]><!--> |
... | ... | @@ -559,6 +565,7 @@ |
559 | 565 | opacity: 0; |
560 | 566 | } |
561 | 567 | } |
568 | + | |
562 | 569 | </style> |
563 | 570 | </head> |
564 | 571 | ... | ... |
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | Sidebar.prototype.addBasicComponentsPalette = function () { |
4 | 4 | this.setCurrentSearchEntryLibrary('component'); |
5 | 5 | const dt = 'basic' |
6 | - const gn = `mxgraph.${ dt }` | |
6 | + const gn = `mxgraph.${dt}` | |
7 | 7 | const currentDate = getCurrentDate(); |
8 | 8 | const basicAttr = this.enumCellBasicAttribute |
9 | 9 | const componentType = this.enumComponentType |
... | ... | @@ -14,14 +14,14 @@ |
14 | 14 | const cell = new mxCell('Title', new mxGeometry(0, 0, 100, 40), transparentBg); |
15 | 15 | cell.setVertex(true) |
16 | 16 | this.setCellAttributes(cell, { [basicAttr.COMPONENT_TYPE]: componentType.TITLE }) |
17 | - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, 'Title'); | |
17 | + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, 'Title'); | |
18 | 18 | })), |
19 | 19 | |
20 | 20 | this.addEntry(this.getTagsForStencil(gn, 'variable', dt).join(' '), mxUtils.bind(this, function () { |
21 | 21 | const cell = new mxCell('变量', new mxGeometry(0, 0, 100, 40), transparentBg); |
22 | 22 | cell.setVertex(true) |
23 | 23 | this.setCellAttributes(cell, { [basicAttr.COMPONENT_TYPE]: componentType.VARIABLE }) |
24 | - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '变量'); | |
24 | + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '变量'); | |
25 | 25 | })), |
26 | 26 | |
27 | 27 | this.addEntry(this.getTagsForStencil(gn, 'line', dt).join(' '), mxUtils.bind(this, function () { |
... | ... | @@ -33,7 +33,7 @@ |
33 | 33 | cell.edge = true; |
34 | 34 | cell.setVertex(true) |
35 | 35 | this.setCellAttributes(cell, { [basicAttr.COMPONENT_TYPE]: componentType.LINE }) |
36 | - return this.createEdgeTemplateFromCells([ cell ], 60, 40, '线条'); | |
36 | + return this.createEdgeTemplateFromCells([cell], 60, 40, '线条'); | |
37 | 37 | })), |
38 | 38 | this.addEntry('real time', mxUtils.bind(this, function () { |
39 | 39 | const template = `<div class="thingKit-component__real-time"><div class="real-time__date">%currentDate%</div> <div style="font-size:30px" class="real-time__now">HH:mm:ss</div></div>` |
... | ... | @@ -44,19 +44,43 @@ |
44 | 44 | placeholders: '1', |
45 | 45 | currentDate: currentDate, |
46 | 46 | }) |
47 | - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '实时时间'); | |
47 | + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '实时时间'); | |
48 | 48 | })), |
49 | 49 | this.addEntry(this.getTagsForStencil('mxgraph.basic', '变量图片', 'basic').join(' '), mxUtils.bind(this, function () { |
50 | 50 | const cell = new mxCell('', new mxGeometry(0, 0, 194, 95), 'image;image=images/thingskit/img-placeholder.png;imageAspect=0;'); |
51 | 51 | cell.setVertex(true) |
52 | 52 | this.setCellAttributes(cell, { [basicAttr.COMPONENT_TYPE]: componentType.VAR_IMAGE }) |
53 | - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '变量图片'); | |
53 | + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '变量图片'); | |
54 | 54 | })), |
55 | 55 | this.addEntry(this.getTagsForStencil('mxgraph.basic', '视频', 'basic').join(' '), mxUtils.bind(this, function () { |
56 | - const cell = new mxCell('', new mxGeometry(0, 0, 100, 95), 'image;image=images/thingskit/video.svg;imageAspect=0;'); | |
56 | + const m3u8 = 'http://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8' | |
57 | + const mp4 = 'http://vjs.zencdn.net/v/oceans.mp4' | |
58 | + const m3u8Type = 'application/x-mpegURL' | |
59 | + const mp4Type = 'video/mp4' | |
60 | + // const cell = new mxCell('<video></video>', new mxGeometry(0, 0, 100, 95), 'image;image=images/thingskit/video.svg;imageAspect=0;'); | |
61 | + const template = ` | |
62 | + <video | |
63 | + id="my-player" | |
64 | + class="video-js" | |
65 | + controls | |
66 | + preload="auto" | |
67 | + muted="muted" | |
68 | + poster="/thingskit-drawio/images/youtube.png" | |
69 | + data-setup='{}'> | |
70 | + <source src="${mp4}" type="${mp4Type}"> | |
71 | + <p class="vjs-no-js"> | |
72 | + To view this video please enable JavaScript, and consider upgrading to a | |
73 | + web browser that | |
74 | + <a href="https://videojs.com/html5-video-support/" target="_blank"> | |
75 | + supports HTML5 video | |
76 | + </a> | |
77 | + </p> | |
78 | + </video> | |
79 | + ` | |
80 | + const cell = new mxCell(template, new mxGeometry(0, 0, 100, 95), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;'); | |
57 | 81 | cell.setVertex(true) |
58 | 82 | this.setCellAttributes(cell, { [basicAttr.COMPONENT_TYPE]: componentType.VIDEO }) |
59 | - return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, '视频'); | |
83 | + return this.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, '视频'); | |
60 | 84 | })), |
61 | 85 | ]; |
62 | 86 | |
... | ... | @@ -70,7 +94,7 @@ |
70 | 94 | var year = date.getFullYear(); |
71 | 95 | var month = date.getMonth() + 1; |
72 | 96 | var dates = date.getDate(); |
73 | - arr = [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ] | |
97 | + arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'] | |
74 | 98 | var day = date.getDay(); |
75 | 99 | return year + '年' + month + '月' + dates + '日 ' + arr[day]; |
76 | 100 | } |
... | ... | @@ -83,7 +107,7 @@ |
83 | 107 | const allTimeNode = document.querySelectorAll('.thingKit-component__real-time .real-time__now') |
84 | 108 | for (const time of allTimeNode) { |
85 | 109 | const date = new Date() |
86 | - time.innerHTML = `${ date.getHours() < 10 ? '0' : '' }${ date.getHours() }:${ date.getMinutes() < 10 ? '0' : '' }${ date.getMinutes() }:${ date.getSeconds() < 10 ? '0' : '' }${ date.getSeconds() }` | |
110 | + time.innerHTML = `${date.getHours() < 10 ? '0' : ''}${date.getHours()}:${date.getMinutes() < 10 ? '0' : ''}${date.getMinutes()}:${date.getSeconds() < 10 ? '0' : ''}${date.getSeconds()}` | |
87 | 111 | } |
88 | 112 | }, 1000) |
89 | 113 | } | ... | ... |
... | ... | @@ -13339,6 +13339,7 @@ class HandleDynamicEffect { |
13339 | 13339 | * @description 生成映射关系 && 初始化推送消息 |
13340 | 13340 | */ |
13341 | 13341 | generatorMappingRelation() { |
13342 | + this.videoPlay() | |
13342 | 13343 | const tsSubCmds = [] |
13343 | 13344 | this.enableActList.forEach(each => { |
13344 | 13345 | const { id, type, attr, deviceId, slaveDeviceId } = each |
... | ... | @@ -13533,6 +13534,54 @@ class HandleDynamicEffect { |
13533 | 13534 | } |
13534 | 13535 | } |
13535 | 13536 | |
13537 | + | |
13538 | + videoPlay() { | |
13539 | + const basicAttr = Sidebar.prototype.enumCellBasicAttribute | |
13540 | + const videoCell = this.DispatchInstance.contentAllCell.filter(cell => cell.getAttribute(basicAttr.COMPONENT_TYPE) === 'video') | |
13541 | + const options = { | |
13542 | + hls: { | |
13543 | + withCredentials: true | |
13544 | + } | |
13545 | + } | |
13546 | + var player = videojs('my-player', options, function onPlayerReady() { | |
13547 | + videojs.log('Your player is ready!'); | |
13548 | + | |
13549 | + // In this context, `this` is the player that was created by Video.js. | |
13550 | + this.play(); | |
13551 | + | |
13552 | + // How about an event listener? | |
13553 | + this.on('ended', function () { | |
13554 | + videojs.log('Awww...over so soon?!'); | |
13555 | + }); | |
13556 | + }); | |
13557 | + | |
13558 | + console.log(player) | |
13559 | + // for (const cell of videoCell) { | |
13560 | + // this.graph.getModel().beginUpdate() | |
13561 | + // try { | |
13562 | + // const options = { | |
13563 | + // hls: { | |
13564 | + // withCredentials: true | |
13565 | + // } | |
13566 | + // } | |
13567 | + // var player = videojs('my-player', options, function onPlayerReady() { | |
13568 | + // videojs.log('Your player is ready!'); | |
13569 | + | |
13570 | + // // In this context, `this` is the player that was created by Video.js. | |
13571 | + // this.play(); | |
13572 | + | |
13573 | + // // How about an event listener? | |
13574 | + // this.on('ended', function () { | |
13575 | + // videojs.log('Awww...over so soon?!'); | |
13576 | + // }); | |
13577 | + // }); | |
13578 | + // this.graph.refresh(cell); | |
13579 | + // } finally { | |
13580 | + // this.graph.getModel().endUpdate() | |
13581 | + // } | |
13582 | + // } | |
13583 | + } | |
13584 | + | |
13536 | 13585 | /** |
13537 | 13586 | * @description 验证是否满足条件列表中的任意一条 |
13538 | 13587 | * @param subscriptionId | ... | ... |