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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行