当前位置: 首页 > news >正文

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

基于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的流媒体视频点播平台《==

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 拦截器和过滤器
  • 抽象代数精解【9】
  • C# 设计模式六大原则之依赖倒置原则
  • MySQL的简单介绍
  • nuclei-快速漏洞扫描器【安装使用详解】
  • 鸿蒙AI功能开发【人脸活体验证控件】 机器学习-场景化视觉服务
  • 前端发版(发包)缓存,需要强制刷新问题处理
  • git版本控制的底层实现
  • Flink 实时数仓(四)【DWD 层搭建(二)流量域事实表】
  • enq: HW - contention事件来啦
  • fme从json中提取位置到kml中
  • react引入高德地图并初始化卫星地图
  • 【Go - 编译:浅尝辄止 】
  • 华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用
  • Android进阶之路 - 解决WebView加载H5时软键盘遮挡输入框问题
  • $translatePartialLoader加载失败及解决方式
  • canvas 五子棋游戏
  • co.js - 让异步代码同步化
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java的Interrupt与线程中断
  • JAVA之继承和多态
  • Linux gpio口使用方法
  • Meteor的表单提交:Form
  • Node 版本管理
  • Odoo domain写法及运用
  • Ruby 2.x 源代码分析:扩展 概述
  • sessionStorage和localStorage
  • vue-cli3搭建项目
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 百度小程序遇到的问题
  • 面试遇到的一些题
  • 前嗅ForeSpider教程:创建模板
  • 设计模式走一遍---观察者模式
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 详解移动APP与web APP的区别
  • 新手搭建网站的主要流程
  • 自定义函数
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​批处理文件中的errorlevel用法
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​用户画像从0到100的构建思路
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #QT(智能家居界面-界面切换)
  • #stm32整理(一)flash读写
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $ git push -u origin master 推送到远程库出错
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LeetCode 49)Anagrams
  • (vue)页面文件上传获取:action地址
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)WCF的Binding模型
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (六)软件测试分工
  • (每日一问)操作系统:常见的 Linux 指令详解