实战21 Vue集成视频播放组件

目录

一、服务端实现代码

1、文件大小配置:

2、服务端返回文件列表 

3、服务端查看视频详情:

二、前端代码

1、安装播放器组件和引入

2、前端:视频列表

3、视频详情并播放

4、路由配置


一、服务端实现代码

1、文件大小配置:

2、服务端返回文件列表 

    @GetMapping("/file/front/all")
//    @Cacheable(value = "files",key ="'frontAll'")
    public Result frontAll() {
        //从缓存获取数据
        String jsonStr = stringRedisTemplate.opsForValue().get(Constants.FILES_KEY);
        List<Files> files = new ArrayList<>();
        if (StrUtil.isBlank(jsonStr)){
            files = fileMapper.selectList(null);//从数据库取出数据后,刷缓存
            stringRedisTemplate.opsForValue().set(Constants.FILES_KEY,JSONUtil.toJsonStr(files));
        }else {
            //从缓存中查询数据
            files = JSONUtil.toBean(jsonStr, new TypeReference<List<Files>>() {
            },true);
        }

        return Result.success(files);
    }

3、服务端查看视频详情:


/**
 * 视频文件详情
 * @param id
 * @return
 */
@GetMapping("/detail/{id}")
public Result getById(@PathVariable Integer id) {
    Files files = fileMapper.selectById(id);
    return Result.success(files);
}

二、前端代码

1、安装播放器组件和引入

npm install vue-video-player --save

main.js文件全局引入

// 下面引入 位置  全部在node_modules文件依赖里面找到需要对应文件引入即可
import VideoPlayer from 'vue-video-player'
import 'vue-video-player/src/custom-theme.css'
import 'video.js/dist/video-js.css'
Vue.use(VideoPlayer)
window.videojs = VideoPlayer.videojs
// 全局引入中文提示
require('video.js/dist/lang/zh-CN.js')
//引入 hls,视频直播(m3u8)必须引入的
import 'videojs-contrib-hls'
//播放rtmp视频
import 'videojs-flash'

2、前端:视频列表

<template>
  <el-card style="padding: 10px">
    <div v-for="item in videos" :key="item.id" style="margin: 10px 0; padding: 10px 0; color: #666;border-bottom: 1px dashed #ccc;">
      <span style="font-size: 18px; cursor: pointer;" class="item" @click="detail(item.id)">{{item.name }}</span>
      <span style="float: right; font-size: 12px; margin-top: 10px;">文件大小:{{item.size }} bk</span>
    </div>
  </el-card>
</template>
<script>

export default {
  name: "Video",
  data() {
    return {
      videos:[],
    }
  },
  created() {
    this.request('/echarts/file/front/all').then(res=>{
      this.videos = res.data.filter(v=>v.type ==='mp4')
    })


  },
  methods: {
    detail(id){
      this.$router.push({path:"/front/videoDetail",query:{id:id}})

    }
   
  }
}
</script>
<style scoped>
.item:hover{
  color: #3a8ee6;
  background: none;
}
</style>

3、视频详情并播放

<template>
  <el-card style="padding: 10px">
    <video-player class="video-player vjs-custom-skin"
                  ref="videoPlayer"
                  :playsinline="true"
                  :options="playerOptions">
    </video-player>
  </el-card>
</template>
<script>
import { videoPlayer} from 'vue-video-player'
import 'video.js/dist/video-js.css'

export default {
  name: "VideoDetail",
  components:{
    videoPlayer
  },
  data() {

    return {
      playerOptions: {
        // 可选的播放速度
        playbackRates: [0.5, 1.0, 1.5, 2.0],
        // 如果为true,浏览器准备好时开始回放。
        autoplay: false,
        // 默认情况下将会消除任何音频。
        muted: false,
        // 是否视频一结束就重新开始。
        loop: false,
        // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        preload: 'auto',
        // 语言设置
        language: 'zh-CN',
        // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        aspectRatio: '16:9',
        // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        fluid: true,
        sources: [{
          // 视频类型
          type: "video/mp4",
          // 视频地址
          src: ''
        }],
        // 视频地址
        poster: '',
        // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
        notSupportedMessage: '此视频暂无法播放,请稍后再试',
        //底栏控制器
        controlBar: {
          // 当前时间和持续时间的分隔符
          timeDivider: true,
          // 显示持续时间
          durationDisplay: true,
          // 是否显示剩余时间功能
          remainingTimeDisplay: false,
          // 是否显示全屏按钮
          fullscreenToggle: true
        }
      },
      currentTime: 7,         // 秒数设置 单位默认s
    }
  },
  created() {
    let id = this.$route.query.id

    this.request('/file/detail/'+id).then(res=>{
      this.playerOptions.sources[0].src = res.data.url
      
    })

  },
  methods: {
   
  }
}
</script>
<style scoped>
</style>

4、路由配置

  {
    path: '/front',
    name: 'Front',
    component: () => import( '../views/front/Front'),
    children:[
      { path: 'home',name: 'FrontHome',component: () => import( '../views/front/Home.vue')},
      { path: 'item1',name: 'Item1',component: () => import( '../views/front/Item1.vue')},
      { path: 'person',name: 'FrontPerson',component: () => import( '../views/front/Person.vue')},
      { path: 'video',name: 'Video',component: () => import( '../views/front/Video.vue')},
      { path: 'videoDetail',name: 'VideoDetail',component: () => import( '../views/front/VideoDetail.vue')}

    ]
  }

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发 Vue 项目的实战是一个非常有趣和有挑战性的过程。以下是一个基本的 Vue 项目实战的思路: 1. 确定项目需求:开始之前,明确你的项目需求是非常重要的。你需要思考你的项目要解决什么问题,它的目标用户是谁,它需要具备哪些功能等等。 2. 创建项目结构:使用 Vue CLI (Command Line Interface) 可以快速创建一个基本的 Vue 项目结构。通过命令行工具运行 `vue create` 命令,按照提示选择相关配置选项,然后等待项目创建完成。 3. 设计页面布局:根据你的项目需求,设计出合适的页面布局。可以使用 Vue 的单文件组件 (Single File Components) 来划分页面的不同部分。 4. 开发组件:将页面拆分为多个可复用的组件,并使用 Vue 的数据绑定和事件处理功能来实现交互逻辑。可以使用 Vue Router 来管理页面路由,Vuex 来管理状态。 5. 集成第三方库:根据需要,考虑将一些常用的第三方库集成到你的项目中,例如 Axios 进行网络请求,Element UI 进行界面组件设计,等等。 6. 添加样式和动画:使用 CSS 或者预处理器 (如 Sass 或 Less) 来为你的项目添加样式,并使用 Vue 的过渡动画系统来实现页面过渡效果。 7. 进行测试和调试:使用 Vue CLI 提供的测试工具来写单元测试和集成测试,确保你的项目在各种情况下都能正常运行。 8. 打包和部署:使用 Vue CLI 提供的打包工具将项目打包成静态文件,并将其部署到你选择的服务器或者云平台上。 以上是一个基本的开发 Vue 项目的实战思路,具体的实施方法会根据你的项目需求和个人偏好有所不同。祝你开发顺利!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值