当前位置: 首页 > article >正文

vue使用Mars3d弹框嵌套video视频/实时视频(m3u8)使用hls.js

下载hls.js
http://mars3d.cn/lib/video/hls/hls.js下载
1.首先绘制地图我使用的天地图

 async infoMars3d() {
      const that = this;
      var mapOptions = {
        scene: {
          center: {
            lat: 30.435192,
            lng: 103.936535,
            alt: 200000,
            heading: 359,
            pitch: -79
          },
          highDynamicRange: false
        },

        // 方式1:在创建地球前的参数中配置
        basemaps: [
          {
            name: "天地图影像(EPSG:4326)",
            icon: "img/basemaps/tdt_img.png",
            type: "group",
            show: true,
            layers: [
              {
                name: "底图",
                type: "tdt",
                layer: "img_d",
                crs: "EPSG:4326",
                // key: mars3d.Token.tiandituArr
                key: ["xxxx"]
              },

              {
                name: "注记",
                type: "tdt",
                layer: "img_z",
                crs: "EPSG:4326",
                // key: mars3d.Token.tiandituArr
                key: ["xxxx"]
              }
            ]
          }
        ]
      };

      this.map = await new mars3d.Map("videoTreesmap", mapOptions);

      // 创建矢量数据图层
      graphicLayer = await new mars3d.layer.GraphicLayer();
      this.map.addLayer(graphicLayer);
      this.map.bindContextMenu([]);
       //地图加载完成
      this.map.on(mars3d.EventType.load, function(event) {
      //绘制省边线地图--以前文章有提到
        that.addDemoGraphics();
        //绘制视频点
        that.ArcGisWfs();
      });
    },

2.绘制视频点–使用DivGraphic
准备一组数据
urlsList= [{
name: “XXX”,
url: “xxx./hls.m3u8”,
poster: “/poster/XXX.jpg”,
addressLatitude: “30.899118”,
addressLongitude: “103.593783”
},…]

   ArcGisWfs() {
      const that = this;
      if (!this.map) return;
      graphicLayer.clear();
      graphicLayer.enabledEvent = false; // 关闭事件,大数据addGraphic时影响加载时间
      const result = this.urlsList;
      const graphicLayers = new mars3d.layer.GraphicLayer();
      this.map.addLayer(graphicLayers);
      for (let j = 0; j < result.length; ++j) {
        const index = j + 1;
        // 添加数据
        const graphic = that.addRandomGraphicByCount(
          graphicLayers,
          [result[j].addressLongitude, result[j].addressLatitude, 0],
          result[j],
          index
        );
      }
      graphicLayer.enabledEvent = true; // 恢复事件
      that.goToUrl(result[0]);

      return result.length;
    },
      addRandomGraphicByCount(graphicLayer, position, result, index) {
      const that = this;
      // 标点icon图片
      const srcImg = require("../../assets/images/icon-sssp.png");

      const graphicImg = new mars3d.graphic.DivGraphic({
        position,
        style: {
          html: ` <div class="mars3d-camera-content">
                      <img class="mars3d-camera-img" style="width: 40px;height:40px"  src=${srcImg} >
                    </div>
                    <div class="mars3d-camera-line" ></div>
                    <div class="mars3d-camera-point"></div>
                  `,
          offsetX: -18,
          visibleDepth: true
        }

         popup: `<div style="width: 450px;text-align:center;font-size:15px;">${result.name}</div><video style="width: 450px;height:300px;" id="videoHLS"  muted="muted" autoplay="autoplay" loop="loop" crossorigin="" controls="">
              </video>`,
        popupOptions: {
           offsetY: -50, // 显示Popup的偏移值,是DivGraphic本身的像素高度值
           template: `<div class="marsBlackPanel animation-spaceInDown">
                   <div class="marsBlackPanel-text">{content}</div>
                 <div></div>
                  <span class="mars3d-popup-close-button closeButton" style="color:#FFF" >×</span>
                 </div>`,
          horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
         verticalOrigin: Cesium.VerticalOrigin.CENTER
         }
      });
      graphicLayer.addGraphic(graphicImg);
      graphicImg.on(mars3d.EventType.click, function(event) {
         const videoElement = event.container.querySelector("#videoHLS"); // popup对应的DOM
         if (window.Hls.isSupported()) {
         const hls = new window.Hls();
           console.log(window.Hls);

          hls.loadSource(hlsUrl);
        hls.attachMedia(videoElement);
        hls.on(window.Hls.Events.MANIFEST_PARSED, function() {
           videoElement.play();
          });
       } else if (videoElement.canPlayType("application/vnd.apple.mpegurl")) {
         videoElement.src = hlsUrl;
          videoElement.addEventListener("loadedmetadata", function() {
            videoElement.play();
          });
         }
      });
    },

http://www.kler.cn/a/232219.html

相关文章:

  • 鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
  • WPF中如何使用区域导航
  • 操作系统实验:在linux下用c语言模拟进程调度算法程序
  • 深入探索 React Hooks:原理、用法与性能优化全解
  • Java 包装类
  • ubuntu22.04 安装FFmpeg,并进行视频的转化格式和裁剪
  • 实例分割论文阅读之:《Mask Transfiner for High-Quality Instance Segmentation》
  • ubuntu系统下c++ cmakelist vscode debug(带传参的debug)的详细示例
  • 通过平扫CT实现胰腺癌早筛(平扫CT+AI)
  • pycharm像jupyter一样在控制台查看后台变量
  • 2024年Java架构篇之设计模式
  • 【Flink入门修炼】1-3 Flink WordCount 入门实现
  • 华为第二批难题一:基于预训练AI模型的元件库生成
  • Backtrader 文档学习- Plotting -Plotting on the same axis
  • 【工作学习 day04】 9. uniapp 页面和组件的生命周期
  • 恒流源方案对比
  • ASP.NET Core 7 MVC 使用 Ajax 和控制器通信
  • vue.config.js和webpack.config.js区别
  • 从零开始手写mmo游戏从框架到爆炸(零)—— 导航
  • 基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
  • 【前端高频面试题--Vue基础篇】
  • 【Linux】vim的基本操作与配置(下)
  • Redis篇之持久化
  • Mac 版 Excel 和 Windows 版 Excel的区别
  • Java汽车销售管理
  • C语言中在main函数之后运行的函数