
项目码云地址:https://gitee.com/baldness_and_coldness/ipfs_streaming
IPFS是一种全新的超媒体文本传输协议,对标的是Http超文本传输协议,但与Http协议不同的是,IPFS协议是一种去中心化的协议。
什么是去中心化?

中心化和去中心化
中心化:所有数据保存于中心服务器,所有客户端需要向中心服务器请求服务。
优点:数据安全性高,功能易于实现
缺点:高度依赖中心服务器,容易出现单点故障、性能瓶颈问题
去中心化:加入网络的任意节点既是客户端,也充当服务器的角色,所有节点地位平等
优点:网络相更加稳定,性能表现更好
缺点:通信协议设计复杂
使用IPFS分布式存储网络存储视频数据,并通过浏览器实现视频上传和在线播放的功能。

项目架构
主要包括网页层、服务器层和IPFS存储层三个部分。
依照文章开头链接,从码云下载项目代码。

项目安装流程

上传视频
1:浏览器上传视频到服务器 2:服务器对上传数据做分块处理,然后将其发送到IPFS网络 3:IPFS节点将数据存储完成后,将相对应的唯一Hash码返回服务器,服务器对其持久化,生成相对应的m3u8文件。
(上传视频的相关代码在项目的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中。
这样做可以大大加快访问速度,同时可以更简单实现诸如按照点击量排序、热度榜这样的功能。
(ps:CSDN和码云上的账户皆为本人)