基于IPFS视频存储的在线视频网站
才不是狼燚
2022年03月24日 17:03
收录于文集
共2篇

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

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

1、IPFS简介

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

什么是去中心化?

中心化和去中心化

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

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

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

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

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

缺点:通信协议设计复杂

2、项目简介

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

3、项目架构

项目架构

主要包括网页层服务器层IPFS存储层三个部分。

3、项目安装

依照文章开头链接,从码云下载项目代码。

项目安装流程

4、项目流程

上传视频

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

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

播放视频

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

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

5、项目核心组件

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

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

cut-off

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

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

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

(ps:CSDN和码云上的账户皆为本人)