基于SpringCloud alibaba的流媒体视频点播平台

news2024/12/25 12:36:32

基于SpringCloud alibaba的流媒体视频点播平台

  • 前言
  • 整体架构
  • 具体实现
    • 视频播放
  • 总结

先把项目地址放这

》基于SpringCloud alibaba的流媒体视频点播平台《

然后咱们来看看这个项目是干啥的。

前言

今天和大家分享一个项目,基于SpringCloud alibaba的流媒体视频点播平台

看名字我们大致就可以了解这个项目的技术栈,微服务

但是有一个迷惑点,流媒体是什么?

这个问题我们来看看哈。

不知道大家有没有用爬虫爬过其他网站的视频,现在主流的视频网站并不会采用直接播放一整个mp4文件的方式来加载视频了。

主要是由于mp4文件格式的问题。试想一下,如果一个mp4文件达到了50个G,这个时候直接播放,那用户要等多久。只能说用户体验极差。我们以优酷为例看一下
在这里插入图片描述
我们使用chrome捕获一下发起的请求,可以看到这里一直在发起类似的请求,我们来看一下,这里面都是什么。
在这里插入图片描述
看后缀名其实我们就大概清楚了,这还是mp4文件。

这时候就有小伙伴说了,这不还是mp4文件吗,你刚刚不是说不用mp4了吗

别着急,咱们再继续看

在这里插入图片描述

可以看到,他并不是获取单个mp4文件,而是获取多个mp4文件,并且每个文件都非常小,我们几乎无感知的就加载出来了。

这相比与加载一整个超大的mp4文件速度是不是快多了。

这样获取并依次加载多个小mp4文件的方式,就可以被称为流媒体

今天要讲的这个项目就是要做流媒体视频播放,并且和微服务相结合,先放一张视频播放的截图。

观察右侧可以发现,这个项目也是通过加载一堆ts文件的方式进行视频播放,也就是流媒体视频播放
在这里插入图片描述

接下来我们一起来看看这个项目吧。

整体架构

在这里插入图片描述

整体架构如上图所示,相对来说还是比较简单的。

看到服务层,就是分成了文件、用户、视频和金融服务。这里简单介绍一下。

  • 文件服务。主要用于实现视频的转码和分割。
  • 用户服务。用户信息的管理和认证。
  • 视频服务。视频详情、评论、点赞、收藏等基础信息的管理和查看。
  • 金融服务。主要实现充值会员、点播视频以及辅助验证是否购买收费视频等功能。

具体实现

这里主要讲几个功能的实现,其他简单功能这里就不赘述了,大家有兴趣可以去看源码。

视频播放

首先我们要先了解下这个业务流程,如下

  • 用户上传视频文件并存储至服务器
  • 文件服务对服务器中的视频源文件行转码、分割以及生成视频流相关文件
  • 文件服务将视频流相关文件存储至服务器
  • 用户访问视频流相关文件实现视频播放

我们看下上述过程中比较复杂的内容

首先是将视频文件上传至服务器。这里我们最先想到的就是直接使用IO流来实现文件上传。但这里会有一个问题,也就是单个服务器的存储空间是有限的,并且受网络IO的影响,单个服务器并不能同时承担大量的文件上传任务

为此,这里使用MinIO来实现文件的存储,并通过搭建分布式MinIO来提升文件系统的存储空间并发能力,并且由于其采用纠删码保证数据的可用性,有效的减少了数据冗余

第二部分就是视频转码和分割。这里我们使用FFmpeg来实现。但是要注意一点,对于一个10多G的视频文件进行转码和分割时间很长的,并且对于CPU的占用也是特别高。这意味着单个文件服务很难在短时间内完成大量转码和分割任务

那怎么办呢?

别忘记哈,咱们做的是微服务平台,一个文件服务难以处理大量文件任务,那就把这些任务分配给多个文件服务嘛

那咋弄呢

我们要解决的问题就是怎么让所有文件服务知道这些任务呢

是不是可以用RabbitMQ,我们可以让所有服务都去监听一个队列,然后我们将文件转码和分割任务发布到这个队列里。各个文件服务依次去拿任务,然后分别执行即可。

看起来好像已经将所有任务完美的分配到文件服务了。但咱们背面试题的时候是不是有一个东西叫做 “怎么防止消息被重复消费?”

这里会出现吗,肯定会的

出现了会有影响吗,肯定的

啥影响呢?

会导致不同文件服务重复对同一源视频文件进行转码和分割,这样会浪费我们的服务器资源。

那咋搞呢,加下分布式锁是不是就可以了,这样就保证了其他服务即使拿到了消息也不会对视频文件进行分割。

整体流程如下图所示

在这里插入图片描述

播放时捕获下请求,就可以看到获取的一个个ts文件
在这里插入图片描述

总结

先讲一下一个功能,其他的之后慢慢补充。

源码==》基于SpringCloud alibaba的流媒体视频点播平台《==

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

46 集合对象的创建与删除

集合(set)属于 Python 无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复。 集合中只能包含数字、字符串、元组等不可变类型(…

吴恩达老师机器学习作业-ex7

导入库,读取数据,查看数据类型等进行分析,可视化数据 import matplotlib.pyplot as plt import numpy as np import scipy.io as sio#读取数据 path "./ex7data2.mat" data sio.loadmat(path) # print(type(data)) # print(data…

安防监控平台智能边缘分析一体机视频智能分析客流统计检测算法详细介绍

在当今数字化时代,数据的重要性不言而喻。特别是在零售、交通、安防等行业中,准确的客流统计数据对于业务决策、资源优化和安全管理至关重要。随着技术的进步,智能边缘分析一体机的出现为客流统计提供了一种高效、实时的解决方案。本文将详细…

【教育宝-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

windows下设置java环境变量

1.打开window的环境变量设置 右键开始菜单选择系统 选择高级系统设置: 点击环境变量 2.在系统变量 新增 JAVA_HOME;该变量的值 选择jdk所在的目录即可。 JAVA_HOME: D:\Program Files\Java\jdk1.8.0_131 3. 在系统变量新增 classpath; 该变量的值设置…

校园水电费管理小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,宿舍信息管理,学生缴费管理,教师缴费管理,系统管理 微信端账号功能包括:系统首页,我的 开发系统…

MSA+抑郁症模型总结(三)(论文复现)

MSA抑郁症模型总结(三)(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 MSA抑郁症模型总结(三)(论文复现)热门研究领域:情感计算的横向发展一、概述二、论…

了解关于标准化的知识

1.标准化组织 1.1国家标准化管理委员会(Standardization Administration of the Peoples Republic of China,简称SAC) TC--(Technical Committee) 技术委员会. SAC/TC,就是“国家标准化管理委员会”下属的一个专项或一个行业的“技术委员会或技术小组”&a…

MySQL--查询数据

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句。其基本格式为&#xff1a; select {* | <字段列表>}[from <表1>,&l…

食堂窗口自助点餐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;店铺信息管理&#xff0c;菜品分类管理&#xff0c;菜品信息管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#…

Oracle SQL Developer 连接第三方数据库

首先Oracle SQL Developer除了支持连接Oracle数据库外&#xff0c;还支持连接第三方数据库&#xff0c;包括&#xff1a; Amazon RedshiftHiveIBM DB2MySQLMicrosoft SQL ServerSybase Adaptive ServerPostgreSQLTeradataTimesTen 首先&#xff0c;你需要在菜单Tools > Pr…

pypinyin,一个有趣的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个有趣的 Python 库 - pypinyin。 Github地址&#xff1a;https://github.com/mozillazg/python-pinyin 在处理中文文本时&#xff0c;拼音转换是一项常见的需求。拼音在自然…

图片打印---print-js,解决图片过长过宽,溢出分页问题

提示&#xff1a;打印图片 文章目录 [TOC](文章目录) 前言一、调取window.print二、print-js通过图片url打印三、print-js把图片转成html后调整尺寸再打印总结 前言 一、调取window.print printImage.vue <template><div class"print_img_fixed"> <…

读零信任网络:在不可信网络中构建安全系统07设备信任

1. 设备信任 1.1. 在零信任网络中建立设备信任至关重要&#xff0c;这也是非常困难的一个环节 1.2. 建立设备信任是基石&#xff0c;直接影响零信任网络架构的成败 1.3. 大多数网络安全事件都和攻击者获得信任设备的控制权相关&#xff0c;这种情况一旦发生&#xff0c;信任…

中山网站建设概述

随着互联网的发展&#xff0c;网站建设已经成为企业和个人在网络上展示自身形象和提供服务的重要途径。中山作为中国的重要城市之一&#xff0c;也在网站建设方面取得了很大的进步。网站建设不仅可以提高企业的知名度和竞争力&#xff0c;还可以提升用户体验&#xff0c;增加客…

Java swing项目汇总

Java swing项目汇总 序号项目名称1&#xff08;无需数据库&#xff09;swing推箱子小游戏2&#xff08;无需数据库&#xff09;swing学生基本信息管理系统3&#xff08;无需数据库&#xff09;仓库管理系统&#xff08;源码详细注释详细报告&#xff09;4&#xff08;无需数据…

linux uos悬浮窗口置顶问题

问题背景 公司软件有一个功能&#xff0c;在PPT播放时&#xff0c;我们软件悬浮窗口需要在WPS幻灯片上层显示&#xff0c;方便客户操作按钮。在window 上我们设置了窗口的topmost 所以能够显示在最前面。如下图所示&#xff1a; 但是在软件适配国产操作系统Linux统信和麒麟在w…

正则表达式 贪婪与非贪婪匹配

目录 一. 回顾二. 遇到的问题三. 分析四. 解决4.1 转换为非贪婪模式匹配4.2 提高匹配的精度 一. 回顾 我们在正则表达式 分组与非捕获组这篇文章中&#xff0c;有如下分组匹配案例 <select name"fruit_console"><option value"apple" selected&…

银河麒麟V10使用vsn

环境:电脑windows11 ,系统银河麒麟V10的,通过堡垒机链接的,vsn也可以通过堡垒机链接,就相当于自己链接的时候不需要输入ip和端口号之类的, 目前银河麒麟机器上已经安装了vsn 步骤1:windows本地机器安装RealVNC https://www.realvnc.com/en/connect/download/viewer…

(三)springboot2.7.6集成activit5.23.0之流程跟踪高亮显示

1.引入diagram-viewer。 上一篇集成流程设计器时已经把diagram-viewer文件夹拷贝过来了。所以这一步就省略了。 2.引入依赖activiti-diagram-rest。 <dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId…