使用 Torrent 和 WebRTC 进行 P2P 视频流传输

在本文中,我介绍了如何在没有服务器的情况下流式传输视频。作为 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

最终输出

客户端输出:

使用 Torrent 和 WebRTC 进行 P2P 视频流传输

服务器端输出:

使用 Torrent 和 WebRTC 进行 P2P 视频流传输

Bittorrent 输出:

使用 Torrent 和 WebRTC 进行 P2P 视频流传输

解释

让我先从服务器端(后台)说起。我安装了相应的 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

(1)

相关推荐

发表回复

登录后才能评论