springboot + vue3实现视频播放Demo

news/2024/10/29 0:23:13/

文章目录

    • 学习链接
    • 前言
    • ffmpeg
      • 安装ffmpeg
        • 配置环境变量
        • 分割视频文件
    • 后台配置
      • WebConfig
    • 前端代码
      • video.js示例
        • 安装依赖
        • 视频播放组件
        • 效果
      • Vue3-video-play示例
        • 安装依赖
        • main.js中使用
        • 视频播放组件
        • 效果

学习链接

ffmpeg官网
长时长视频java存储及vue播放解决方法
【 攻城略地 】vue3 + video.js播放m3u8视频流格式

Vue3-video-play组件官网
Vue3视频播放器组件Vue3-video-play入门教程
vue-video-player播放m3u8格式的视频

Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。

Java获取MP4视频文件的每一帧图片并保存

mp4视频分片生成m3u8流文件并加密
web播放m3u8文件且进行加密处理

vue中使用vue-video-player,播放m3u8格式的视频及设置请求头

关于H5中的标签的用法总结
JS自定义多媒体Video控制条(控制视频播放、进度、全屏案例)
<video>: 视频嵌入元素 MDN

SpringBoot + Vue 实现视频播放
SpringBoot和Vue集成视频播放组件——基于SpringBoot和Vue的后台管理系统项目系列博客(二十二)

自制视频网站 Vue+SpringBoot全栈 - 演示视频 + github代码地址

ckplayer播放视频gitee代码地址

前言

当一个视频文件过大时,不可能一次性的将整个视频的文件流全部写给前端。所以需要用到ffmpeg,将视频按时间分割成ts文件,ts文件比较小,因此浏览器就可以请求这个ts文件,ffmpeg在将视频分割成ts文件时,还会生成一个.m3u8的文件,它相当于与是这些分割的ts文件的一个索引,所以前端只要拿到这个索引文件,并且根据这个索引文件去拿ts文件来做播放。

只是实现了个视频播放的demo,至于还有些问题,没深入,这些就后面再慢慢弄懂吧

  • 都能拿到这个m3u8文件的话,那岂不是所有人都能访问,前端如何和后端做认证或加密什么的
  • 清晰度该怎么实现

ffmpeg

安装ffmpeg

下载ffmpeg,并且安装到本机电脑,将ffmpeg的安装位置的bin目录,配置到环境变量中,方便直接调用它的命令

配置环境变量

在这里插入图片描述

分割视频文件

在视频文件所在目录,执行如下命令(每60s分割成一个文件)

ffmpeg -i ./jvm.mp4 -c:v h264 -flags +cgop -g 30 -hls_time 60 -hls_list_size 0 -hls_segment_filename index%3d.ts index.m3u8

在这里插入图片描述

后台配置

WebConfig

注意,这里,我偷懒了,没有自己写想响应中写流,而是都交给了springMvc的ResourceHttpRequestHandler静态资源处理器去完成的。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").maxAge(3600).allowCredentials(true).allowedOrigins("*").allowedMethods("*").allowedHeaders("*").exposedHeaders("token","Authorization");}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/video/**").addResourceLocations("file:/D:\\usr\\");}
}

前端代码

video.js示例

安装依赖

$ npm install --save video.js videojs-contrib-hls

视频播放组件

<template><video id="my-video" class="video-js vjs-default-skin" autoplay muted preload="auto" controls><!-- <sourcesrc="http://1252093142.vod2.myqcloud.com/4704461fvodcq1252093142/f865d8a05285890787810776469/playlist.f3.m3u8"type="application/x-mpegURL" style='width: 100%;height: 100%'> --><sourcesrc="http://127.0.0.1:8085/video/index.m3u8"type="application/x-mpegURL" style='width: 100%;height: 100%'></video>
</template><script >
// 引入videojs以及样式文件
import videojs from 'video.js/dist/video.min'
import 'video.js/dist/video-js.min.css'
import { defineComponent, onMounted } from "vue"export default {setup() {// 在onMounted阶段进行初始化onMounted(() => {initVideoSourc()})function initVideoSourc() {videojs('my-video', {bigPlayButton: false,textTrackDisplay: false,posterImage: false,errorDisplay: false,controlBar: true,// ...其他配置参数}, function () {this.play()})}}
}
</script>

效果

在这里插入图片描述

Vue3-video-play示例

安装依赖

npm i vue3-video-play --save

main.js中使用

import { createApp } from 'vue'
import App from './App.vue'
let app = createApp(App)import vue3videoPlay from 'vue3-video-play' // 引入组件
import 'vue3-video-play/dist/style.css' // 引入css
app.use(vue3videoPlay)app.mount('#app')

视频播放组件

<template><div><vue3VideoPlay width="800px" title="冰河世纪" :src="options.src" :type="options.type" :autoPlay="false" /></div></template><script setup>import { reactive } from 'vue';const options = reactive({src: "http://127.0.0.1:8085/video/index.m3u8", //视频源type: 'm3u8', //视频类型
})</script><style scoped></style>

效果

在这里插入图片描述


http://www.ppmy.cn/news/68851.html

相关文章

微服务保护——Sentinel

初识Sentinel 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待舱壁…

电力电子与电气行业常用英语单词汇总

1.共模电感---Coupled inductor 2.饱和电感---Saturable inductor 3.共模电感---coupled inductor 4.共模电感---coupled inductor 5.共模电感---coupled inductor 6.共模电感---coupled inductor 1.共模电感---coupled inductor 2.共模电感---coupled inductor 3.共模…

vue+elementui+nodejs机票航空飞机航班查询与推荐

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode )本系统主要是为旅客提供更为便利的机票预定方式&#xff0c;同时提高民航的预定机票的工作效率。通过网络平台实现信息化和网络化&am…

教育单位启动网络安全排查,查询IP地址能做什么?

近日&#xff0c;南京教育局主办了一场“网安2023”教育行动&#xff0c;各级教育单位都将开始教育系统网络安全责任制&#xff0c;做实各项教育网络安全工作&#xff0c;提升教育系统网络安全防护能力。 本次行动采取远程安全检查与现场检查相结合方式对各级教育单位进行网络…

编程到底难在哪里?

编程是一门非常有挑战性的技术&#xff0c;能够让人们使用计算机来完成各种任务。它不仅需要掌握各种计算机语言和框架&#xff0c;还需要在实际应用中充分发挥自己的专业知识和创造力。 然而&#xff0c;对于初学者来说&#xff0c;在编程过程中遇到的难点可能是多方面的。以…

Python突破JS加密限制,进行逆向解密

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录标题 前言开发环境:模块使用:逆向目标逆向过程参数 JS 加密关键代码Python 登录关键代码尾语 &#x1f49d; 开发环境: Python 3.8 Pycharm 模块使用: time >>> 时间模块&#xff0c;属于内置&#xff0c;无…

每日学术速递5.13

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.VideoChat: Chat-Centric Video Understanding 标题&#xff1a;VideoChat&#xff1a;以聊天为中心的视频理解 作者&#xff1a;KunChang Li, Yinan He, Yi Wang, Yizhuo Li, Wen…

dubbo技术

1、Dubbo的前世今生 2011年10月27日&#xff0c;阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo&#xff0c;服务治理和SOA的设计理念开始逐渐在国内软件行业中落地&#xff0c;并被广泛应用。 早期版本的dubbo遵循SOA的思想&#xff0c;是面向服务架构的重要组件。 …