基于IPFS视频存储的在线视频网站

基于IPFS分布式存储网络的视频在线播放网站

项目码云地址:https://gitee.com/baldness_and_coldness/ipfs_streaming

1、IPFS介绍

IPFS是一种全新的超媒体文本传输协议,对标的是Http超文本传输协议,但与Http协议不同的是,IPFS协议是一种去中心化的协议。

什么是去中心化?

中心化和去中心化

中心化:所有数据保存于中心服务器,所有客户端需要向中心服务器请求服务。

优点:数据安全性高,功能易于实现

缺点:高度依赖中心服务器,容易出现单点故障、性能瓶颈问题

去中心化:加入网络的任意节点既是客户端,也充当服务器的角色,所有节点地位平等

优点:网络相更加稳定,性能表现更好

缺点:通信协议设计复杂

2、项目简介

使用IPFS分布式存储网络存储视频数据,并通过浏览器实现视频上传和在线播放的功能。

3、项目架构

架构图
主要包括浏览器页面Node.js服务器IPFS网络三个部分。

4、项目安装

1、安装 ffmpeg
(参考https://blog.csdn.net/chy466071353/article/details/54949221
2、安装 ipfs
(参考https://blog.csdn.net/lhx0525/article/details/103528680
3、初始化ipfs并运行ipfs daemon启动守护进程
4、npm install 安装相关依赖包
5、npm start 运行项目
6、浏览器网址:http://localhost:3000/
效果图片1效果图片2

5、项目流程

上传视频

由于上传的视频需要能较为流畅的在线播放,这里按照了HLS协议,将视频进行切片处理,具体实现由ffmpeg工具包完成。

1:浏览器上传视频到服务器
2:服务器对上传数据做分块处理,然后将其发送到IPFS网络
3:IPFS网络将数据存储完成后,将相对应的唯一Hash码返回服务器,服务器对其持久化,生成相对应的m3u8文件。
IPFS数据

(上传视频的相关代码在项目的server.js中)
播放视频

1、浏览器向服务器发起请求,通过视频名字找到响应索引文件.m3u8
2、服务器返回索文件
3、浏览器向IPFS系统请求.m3u8中相对应的文件
4、IPFS返回TS数据

(在线播放视频的相关代码在项目的play.js和app.js中)

项目核心是:

1、使用ffmpeg分割和播放视频

2、通过js工具包ipfs-api,使用js代码操作IPFS网络。

由于资源受限,没有引入独立数据库,只能把m3u8文件持久化在Node.js服务器。

如果可以,应该搭建独立数据库,将m3u8文件和ts文件全部保存到IPFS网络,m3u8文件的访问连接保存到mysql中。

这样做可以大大加快访问速度,同时可以更简单实现诸如按照点击量排序、热度榜这样的功能

猜你喜欢

转载自blog.csdn.net/awsl_6699/article/details/123505190