Java从0-1开发视频点播项目 附加完整的部署流程

2023-11-04 08:40

本文主要是介绍Java从0-1开发视频点播项目 附加完整的部署流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 产品效果 

  1.      

  • 视频点播技术痛点

  1. 以传统视频格式MP4为例, 要想达到秒播级别基本不可能, 因为不能确定浏览器缓冲视频到多少后才能进行播放  10M? 20M?  ,  这个等待视频缓冲过程对使用者来说是无法忍受的!!!
  2. 为了解决上述的问题, 博主研究了M3U8这种视频编码格式, 据我观察如今大型的视频播放网站均是用的此视频格式
    1.  
  3.  m3u8流媒体能将源视频分片成许多个视频片段  xx.ts 格式, 每个ts视频段大小可能只有100KB或1M-5M 这样浏览器只要缓冲小部分视频段达到秒播的效果, 然后就是对外暴露一个index.m3u8的主文件, 主文件内部是 ts 视频段的地址

  • 技术栈

  • 架构图

  • 后端

  1. SpringBoot
  2. SpringSecurity-权限认证框架
  3. Mybatisplus
  4. ffmpeg     视频转码工具(m3u8)
  5. 腾讯COS云存储对象
  • 前端

  1. Vue2.0 
  2. Vant组件库
  • 服务器

  1. 腾讯云配置: 2核4G内存3M带宽;
  2. Docker容器加载中间件镜像;
  3. Jenkins实现前后端项目自动化部署;
  4. 视频资源存放在腾讯COS对象云
  • Python爬虫

  • 爬虫的定义: 只要能自动化去抓取到你想要的数据, 我就把它当做爬虫;

  • python爬虫组件库

  1. requests               发起请求得到响应的内容
  2. pyppeteer             模拟浏览器操作;
  3. beautifulSoup       对象化HTML元素;
  4. fake_useragent    每次发起请求时改变请求头里的 User-Agent 属性, 绕过防爬机制  当然防爬机制远远不止这种;
  5. asyncio                 python自带的 异步IO 组件
    1. 交给async io 执行的任务是协程 协程存在于单条线程中, 一条线程能有N条协程 由于是在同一线程中执行, 因此就不存在抢占资源一说, 因此协程是线程安全的;
    2. 在方法前加 async 关键字定义协程
      1.  
    3. 配合 await 关键字 实现非阻塞式编程
      1. 加了await的代码说明要等待响应结果才会执行下一个await代码, 他们之间互相有依赖关系, 但对于没有此关键字的代码就无需等待 能继续往下走, 等阻塞的代码都执行完后 整个协程也就结束了  最大化的利用CPU资源;
  • 后端实现

  • 环境的安装请自行处理

  1. JDK1.8
  2. Maven
  3. IDEA
  • 搭建SpringBoot项目

  1. 进入Spring官网
  2. 按照官网的实例指南创建项目
  3. 使用IDEA编辑器打开项目
    1. 结构说明
    2.  
  4. 创建控制层且启动项目
    1. 配置主文件
    2. 控制层
    3. 启动主函数-启动项目
  5. 访问API
  • 线上Cloud项目

  1. 田翔/cloud
  2. 代码说明
    1. pom.xml文件   maven管理的依赖---------也没啥可说的, 在这能引入所需jar包
      1. 版本号
    2. 控制层
      1. AdminController
      2. LoginController
      3. PayControlle
        1. 制作卡密以及卡密激活权限
    3. SpringSecurity  权限认证
    4. 定时调度器
    5. 过滤器-初始化变量
      1. 按系统设置  视频文件在服务器上的地址
  • 线上Consumer1/2项目

  • 田翔/consumer1
  • 田翔/consumer2
  1. 代码说明
    1. 用注解形式的AOP作为切面, 增强RabbitMQ消费方的方法(日志打印)
      1. 效果

  • 前端实现

  • 搭建Vue2.0项目

  1. 前端源码
  2. 使用Vue建议的快速搭建Vue项目的 vue-cli 脚手架
  3. 脚手架创建Vue项目
  4. 用前端编辑器 VS Code 打开Vue项目
    1. 打开项目后用终端运行 
  • 操作vue项目

  1. 新建vue页面

    1. 内容展示
      <template><div id="app">呼啦啦2</div>
      </template><script></script><!-- Add "scoped" attribute to limit CSS to this component only -->
      <style scoped></style>

  2. 访问T.vue页面

    1. 替换App.vue文件的内容    

      1. <!-- 这个单文件组件为主入口 -->
        <template><div id="app"><!-- 展示路由的内容 --><router-view /></div>
        </template><script>export default {name: 'App'}
        </script><style></style>
        

    2. 增加路由配置

      1. import Vue from 'vue'
        import Router from 'vue-router'
        import HelloWorld from '@/components/HelloWorld'
        import T from '@/components/T'
        Vue.use(Router)export default new Router({mode : 'hash',routes: [{path: '/',component: HelloWorld},{path: '/T',component: T}]
        })
        

    3. 在主文件内加入路由组件

      1. npm 安装router组件依赖包

        npm install --save vue-router

      2. 重启服务

      3. 访问页面

  3. 打包项目进行发布

    1. 新增 vue.config.js 配置文件

      1.  
        const target = require('./src/URL')module.exports = {// 项目部署的基本路径publicPath: "./",// 构建输出路径 ,vue-cli-service build 时生成。outputDir: "dist",//放置生成的静态资源 (js、css、img、fonts) 和 outputDir 同级。assetsDir: "static",// 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码lintOnSave: true,//是否使用包含运行时编译器的 Vue 构建版本runtimeCompiler: false,//是否需要 mapproductionSourceMap: true,// 偏向apppwa: {},devServer: {host: 'localhost',// 使用花生壳之类的 需改为 0.0.0.0port: '8080', // 端口号https: false, // 是否支持httpsopen: false, // 配置自动启动浏览器disableHostCheck: true, // 使用花生壳之类的 需设为false/* 使用代理 */proxy: {'/api': {/* 目标代理服务器地址 */target: target.target,/* 允许跨域 */changeOrigin: true,pathRewrite: {'^/api': '' // 调用接口时带 / 使用'' 不带使用 '/',例如 /sys/login 则使用 '' , sys/login 则使用 '/'}}},}
        }

    2. 增加URL.js文件
      1. 内容

        'use strict'
        // 跨域请求的地址
        var domain = "/api";
        // 服务端地址
        var target  = "http://localhost:809";module.exports =  {domain:domain,target:target,
        }
    3. 打包

      1. npm run build

      2. 进入dist目录, 里面的文件能直接访问

    4. 然后就将打包的前端文件都放在服务器上, 我这里用nginx作为前端服务器

  • 服务搭建---采用Docker容器安装中间件

  • Docker集成Nginx

  • Docker集成Redis

  • Docker集成ElasticSearch

  • Docker集成RabbitMQ

  • Docker集成Mysql

  • Docker集成Jenkins

  • Docker继承Tomcat   tips: tomcat不推荐使用docker集成

  • Docker打包服务镜像后迁移到其它机器上运行

这篇关于Java从0-1开发视频点播项目 附加完整的部署流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344563

相关文章

Java利用Spire.XLS for Java自动化设置Excel的文档属性

《Java利用Spire.XLSforJava自动化设置Excel的文档属性》一个专业的Excel文件,其文档属性往往能大大提升文件的可管理性和可检索性,下面我们就来看看Java如何使用Spire... 目录Spire.XLS for Java 库介绍与安装Java 设置内置的 Excel 文档属性Java

Java中的CompletableFuture核心用法和常见场景

《Java中的CompletableFuture核心用法和常见场景》CompletableFuture是Java8引入的强大的异步编程工具,支持链式异步编程、组合、异常处理和回调,介绍其核心用法,通过... 目录1、引言2. 基本概念3. 创建 CompletableFuture3.1. 手动创建3.2.

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Java线程池核心参数原理及使用指南

《Java线程池核心参数原理及使用指南》本文详细介绍了Java线程池的基本概念、核心类、核心参数、工作原理、常见类型以及最佳实践,通过理解每个参数的含义和工作原理,可以更好地配置线程池,提高系统性能,... 目录一、线程池概述1.1 什么是线程池1.2 线程池的优势二、线程池核心类三、ThreadPoolE

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基