vue3.0使用‘vue-video-player’接入直播m3u8视频避坑实录

问题(坑)?

  1. ‘vue-video-player’播放器无渲染
  2. vue3.0下的播放器播放地址‘url’赋值问题
  3. ‘vue-video-player’引入问题

前期工作

首先我们需要安装相关插件

npm install vue-video-player -s
npm install videojs-flash -s
npm install videojs-contrib-hls -s

其实‘vue-video-player’本身是包含videojs-flash和videojs-contrib-hls的,但是在vue3.0下,引用不起作用,所以建议尽量单独安装。

在main.ts将插件引入

import { createApp } from 'vue'
import 'videojs-flash'
import  'videojs-contrib-hls'
import VideoPlayer from 'vue-video-player/src'
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css') 

const createapp = createApp(App)
createapp.use(VideoPlayer)

vue组件内使用

<template>
  <div class="box-viods">
    <van-nav-bar
      title="监控播放"
      left-text="" left-arrow @click-left="$router.go(-1)" fixed
    />
    
  </div>
    <div class="tzc_demo">
      <video-player
        class="video-player vjs-custom-skin"
        ref="videoPlayer"
        :playsinline="true"
        :options="playerOptions"
      >
      </video-player>
    </div>
</template>

<script>
 
import { defineComponent, ref, onMounted } from "vue";
import { useRouter } from "vue-router";
import {
  com_list,
  com_cam_list,
  com_cam_list_url,
  comcity_cam,
} from "@/api/index";
export default {
  name: "vidoList", 
  setup() {
    let $route = useRouter();
    let eqery = {
      guid: $route.currentRoute.value.params.id,
    };
    let video_s = ref();
    //播放器渲染对象
    let playerOptions = ref({
      playbackRates: [0.5, 1.0, 1.5, 2.0], // 可选的播放速度
      autoplay: false, // 如果为true,浏览器准备好时开始回放。
      muted: false, // 默认情况下将会消除任何音频。
      loop: false, // 是否视频一结束就重新开始。
      preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
      language: "zh-CN",
      aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
      fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
      html5: { hls: { withCredentials: false } },
      flash: { hls: { withCredentials: false } },
      sources: [
        {
          type: "application/x-mpegURL", // 类型
          src: '', // url地址
        },
      ],
      poster: "", // 封面地址
      notSupportedMessage: "此视频暂无法播放,请稍后再试", // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
      controlBar: {
        timeDivider: true, // 当前时间和持续时间的分隔符
        durationDisplay: true, // 显示持续时间
        remainingTimeDisplay: false, // 是否显示剩余时间功能
        fullscreenToggle: true, // 是否显示全屏按钮
      },
    });
    //这里执行相对应的接口方法获取你的url地址,为播放器对象进行赋值
    const Video_u = () => {
      com_cam_list_url(eqery)
        .then((res) => {
          video_s.value = res.data.mydata;
          playerOptions.value.sources[0].src=res.data.mydata.recurl;//这里对url赋值
          console.log("video", playerOptions);
        })
        .catch((err) => {
          console.log(err);
        });
    };
    onMounted(() => {
      Video_u();
    });
    return {
      video_s,
      Video_u,
      playerOptions,
    };
  },
};
</script>

<style scoped lang="less">
.box-viods {
  margin-bottom: 3.4rem;
//   .tzc_demo_bt{
//       width: 100%;
//       height: 2rem;
//       text-align: center;
//       line-height: 2rem;
//   }
}
.tzc_box_vlist {
  margin-top: 3rem;
  margin-bottom: 4rem;
}
.viods-list {
  width: 100%;
  box-sizing: border-box;
  padding: 0 0.5rem;
  padding-top: 0.5rem;
}
.list-title {
  width: 100%;
  height: 2.3rem;
  background: #007acc;
  color: white;
  line-height: 2.4rem;
  font-weight: bold;
  font-size: 1rem;
  box-sizing: border-box;
  padding: 0 0.8rem;
  border-radius: 6px;
}
.list-video {
  width: 100%;
  height: 10rem;
  overflow: hidden;
  background: rgb(233, 246, 255);
  position: relative;
  .tzc_icon_video {
    display: inline-block;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    font-size: 4rem;
    color: #007acc;
  }
  // img {
  //   width: 100%;
  //   height: auto;
  // }
}
/deep/ .van-nav-bar .van-icon {
  color: #333333;
}
/deep/ .van-nav-bar__title {
  font-weight: bold;
  font-size: 1rem;
}
</style>

最终效果

在这里插入图片描述

如果屏幕前的你觉得这篇文章对你有帮助,欢迎点赞、关注、转发、评论。 文章为原创,未接本人同意禁止转载,创造不易,谢谢合作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue 3.0是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定和组件化的特性,使得开发者可以更轻松地构建交互式的Web应用程序。 Vue-video-player是一个基于Vue.js视频播放器组件,它提供了一种简单的方式来在Vue应用程序中嵌入视频播放功能。它支持多种视频格式,包括MP4、WebM和Ogg等,并且提供了丰富的功能选项,如自定义控制条、全屏模式、播放速度调节等。 使用vue-video-player,你可以按照以下步骤来集成视频播放器到你的Vue 3.0应用程序中: 1. 首先,安装vue-video-player包。你可以使用npm或者yarn来进行安装: ``` npm install vue-video-player ``` 或者 ``` yarn add vue-video-player ``` 2. 在你的Vue组件中引入vue-video-player: ```javascript import VueVideoPlayer from 'vue-video-player'; import 'video.js/dist/video-js.css'; // 引入视频播放器样式 import 'vue-video-player/src/custom-theme.css'; // 引入自定义主题样式 export default { components: { VueVideoPlayer, }, // ... } ``` 3. 在模板中使用vue-video-player组件: ```html <template> <div> <vue-video-player :options="playerOptions"></vue-video-player> </div> </template> ``` 4. 在Vue组件的data选项中定义视频播放器的配置选项: ```javascript export default { data() { return { playerOptions: { sources: [{ src: 'path/to/your/video.mp4', type: 'video/mp4', }], // 其他配置选项... }, }; }, // ... } ``` 这样,你就可以在Vue应用程序中使用vue-video-player来播放视频了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值