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

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr