javascript - 如何使用gundb存储图像/视频文件?

标签 javascript gun gundb

我知道传统的方法是将图像/视频文件存储在一个地方,然后将引用索引保存到数据库表中。

现在我正在学习gundb,我可以很容易地存储键值json类型数据,但由于它是去中心化的,如果我想做一个聊天室应用程序,我应该如何处理图像存储(例如:用户的头像)?

我还想知道是否可以使用gundb制作一个电影共享应用程序?

最佳答案

@Retric,好问题!我不知道为什么人们对你投反对票,他们一定是仇恨者。

你是对的,最好存储该图像/视频并通过 GUN 引用它。特别是对于视频而言,WebTorrent/BitTorrent 进行 P2P 视频共享已有十多年了,一度处理过全局 40% 的互联网流量!

然而,WebTorrent/BitTorrent 不太擅长发现/共享这些 URI(磁力链接等),但 GUN 可以。所以我建议将其作为一种选择。

对于图像,尤其是像头像/图标/个人资料这样的小图像,我经常通过 Base64 编码将它们直接存储在 GUN 中(世界各地的许多网站将图像/图标/ Sprite /头像内联到带有 base64 数据 URL 的 CSS 文件,但现在您可以使用 GUN 来实现此目的)。

如果您对此感兴趣,我使用 jQuery 编写了一个小实用程序,可以让您将图像拖放到您的网站中,它会自动调整大小(传递选项以覆盖它)并对其进行 Base64 编码,然后保存到枪:

https://github.com/amark/gun/blob/master/lib/upload.js

这是我如何使用它的一个小例子:

$('#profile').upload(function resize(e, up){
    if(e.err){ return } // handle error
    $('#profile').addClass('pulse'); // css to indicate image processing
    if(up){ return up.shrink(e, resize, 64) } // pass it `e` drag&drop/upload event, then I reuse the current function (named resize) as the callback for it, and tell it resize to 64px.
    $('#profile').removeClass('pulse'); // css indicate done processing.
    $("#profile img").attr('src', e.base64).removeClass('none'); // set photo in HTML!
    gun.user().get('who').get('face').get('small').put(e.base64); // save profile thumbnail to GUN
});

最后,如果您不想使用 BitTorrent,可以将视频存储在 GUN 中吗?

我强烈建议使用 HLS 格式在 GUN 中存储视频,这将允许您进行去中心化的实时视频流。它是一种非常简单的格式,甚至可以从静态文件中进行视频流处理,因为它将视频存储在可以流式传输的小块中 - 这与 GUN 完美契合。

已经有一个基于 JS 的 HLS 格式视频播放器:

https://github.com/video-dev/hls.js/

根据演示页面,您可以看到如何存储视频的示例,如 GitHub 上的此处:

https://github.com/video-dev/streams/tree/master/x36xhzz

(如果您单击 m3u8 文件,您会看到它的元数据为 720p 存储在 url_0 文件夹中,该文件夹本身也有子文件)

您可以使用相同的文件夹结构将 HLS 视频文件存储在 GUN 中,而不是将其存储在 BitTorrent 或集中式服务器上 gun.get('videos').get('x36xhzz').get(' url_0').get('url_496').get('193039199_mp4_h264_aac_hd_7.ts').once(function(video_chunk){ passToHLSplayer(video_chunk) }) 这样 HLS.js 就可以轻松集成枪。

现在您将拥有 P2P 去中心化视频流!!!

更酷的是,您可以将其与 GUN 的 lib/webrtc 适配器结合使用,并完成完全浏览器到浏览器的操作!

我希望这有帮助。

关于javascript - 如何使用gundb存储图像/视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789295/

相关文章:

javascript - 电子商务网站上的 Facebook 'Like' 按钮

gun - 如何使用GUNDB上传和下载媒体文件?

node.js - 如何将子目录路径传递到 GunDB S3 存储驱动程序,以便可以与非 Gun 数据共享相同的 S3 存储桶?

firebase - GunDB 存储和 super 对等选项

javascript - Gun 如何在有时断开的 P2P 网络中管理用户

javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises

javascript - 3个大写字母的正则表达式,不多也不少

javascript - 在 HandsonTable Angular 指令中使用数组中的数据

javascript - GunDB SEA 让其他用户写入用户空间