在本文中,我介绍了如何在没有服务器的情况下流式传输视频。作为 Infyrec 的创始人,我也觉得有必要为我的学员提供自托管视频课程和录音。实际上,我已经计划开发类似 YouTube 的视频流服务。但是,如果我想提供自托管流媒体服务,目前我必须在服务器和存储上投入资金。在这种情况下,我进行了研究,希望找到一种不同的方法来开发流媒体系统,结果发现有两种截然不同的技术已经存在了十年之久: Torrent 和 WebRTC。
什么是 Torrent?
Torrent 是一种点对点文件共享协议。用户从多个来源(称为对等点)同时下载和上传文件的部分内容。Torrent 文件包含元数据和跟踪器列表,可帮助连接同行。共享文件的同伴越多,下载速度就越快。洪流客户端采用分布式方法,优化了速度和可靠性。
什么是 WebRTC?
WebRTC(Web实时通信)是一种可直接在Web浏览器之间实现实时音频、视频和数据共享的技术。它结合使用 JavaScript API 和点对点通信来建立连接。这种技术通常用于视频会议、在线游戏和其他实时应用。
WebRTC + Torrent = WebTorrent
WebTorrent 是一项突破性技术,可直接在网络浏览器中实现高效的点对点文件共享。通过 WebTorrent,用户可以无缝地串流和共享视频等媒体,而无需中央服务器。这种分散式方法通过在点对点之间分配工作量来优化速度和可靠性,同时还允许内容创建者(如我😁)提供自托管流媒体服务。
概念验证 (PoC) 实施
在开始实施程序之前,请允许我补充一些有关 torrent 和 WebRTC 的内容。基本上,我们需要使用一个 torrent 客户端软件(如 uTorrent 或 qBittorrent),以便随时使用 torrent 协议共享或下载文件,但缺点是在下载完成之前我们无法观看视频。好在 WebTorrent 解决了这个问题,因此我们不再依赖 torrent 客户端。
要求
- Node.js (Javascript 运行环境)
- webtorrent (NPM 包)
- webtorrent-hybrid (NPM 包)
- bittorrent-tracker (NPM 包)
- webtorrent cdn (客户端脚本)
客户端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="webtorrent.min.js"></script>
</head>
<style>
video{
width: 400px;
height: 200px;
}
</style>
<body>
<h1>P2P Video Streaming PoC (Client)</h1>
<script>
const client = new WebTorrent()
const link = 'YOUR_CUSTOM_GENERATED_MAGNET_LINK'
client.add(link, { announce: ['ws://YOUR_LOCAL_IP:8000'] }, function (torrent) {
const file = torrent.files.find(function (file) {
return file.name.endsWith('.mp4')
})
file.appendTo('body')
})
</script>
</body>
</html>
<!--
Note: Add/update your magnet link and IP address
-->
服务器端代码
注:在本例中,我只是将自己的电脑用作服务器。实际上,这并不涉及服务器;我只是利用 node.js 和混合 webtorrent 从我的电脑播种视频文件。
import WebTorrent from 'webtorrent-hybrid'
const client = new WebTorrent()
client.seed('PATH_TO_YOUR_FILE', { announce: ['ws://YOUR_LOCAL_IP:8000'] }, function(torrent) {
console.log('Sample Video Magnet Link: ' + torrent.magnetURI)
})
BitTorrent 跟踪器命令
注意:由于目前有多个在线 Torrent 跟踪器,因此使用BitTorrent 跟踪器完全是可选的。但我使用它的原因是我不希望每个人都访问我的 torrent 数据。
bittorrent-tracker
最终输出
客户端输出:
服务器端输出:
Bittorrent 输出:
解释
让我先从服务器端(后台)说起。我安装了相应的 webtorrent 软件包,并在后台添加了我自己托管的 bittorrent 跟踪服务器 IP。运行代码后,磁力链接就会打印出来。此外,我还更新了前端(客户端)的代码,加入了从后台复制的磁力链接,并嵌入了 webtorrent 脚本。最后,我只是使用实时服务器(一个 vscode 附加组件)为前端提供服务。
结果,我成功地传输了视频。
结论
我在本文中介绍了如何构建(本地)点对点视频流。我将在下一篇博客中介绍如何借助云从公共互联网访问这些内容。
作者:Ragul.H
编译自https://er-ragul.medium.com/p2p-video-streaming-using-torrent-webrtc-620744145541
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/31077.html