我知道传统的方法是将图像/视频文件存储在一个地方,然后将引用索引保存到数据库的表中。
现在我正在学习gundb,我可以很容易地存储键值json类型的数据,但是由于它是去中心化的,如果我想做一个聊天室应用,我应该如何处理图像存储(例如:用户的头像)?
我还想知道是否有可能用gundb制作一个电影分享应用程序?
发布于 2018-12-16 10:53:47
@Retric,很好的问题!我不知道为什么人们要贬低你,他们一定是怀恨你的人。
你是对的,最好是存储图像/视频,并通过枪来引用它。特别是视频,WebTorrent/BitTorrent已经做了十多年的P2P视频分享,一度处理了世界上40%的互联网流量!
然而,WebTorrent/BitTorrent在发现/共享这些URI(磁铁链接等)方面并不是很好。但是枪是。因此,我建议将其作为一种选择。
对于图片,特别是像头像/图标/配置文件这样的小图片,我经常直接通过Base64编码将它们存储在GUN中(世界各地的许多网站都使用base64数据URL将图片/图标/精灵/头像嵌入到CSS文件中,除了现在你可以使用GUN来实现这一点)。
如果你对此感兴趣,我用jQuery写了一个小工具,让你拖放图片到你的网站,它会自动调整大小(传递选项来覆盖它),并为你进行base64编码,然后保存到GUN:
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视频文件存储在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) })将其存储在GUN中,这样HLS.js就可以很容易地与GUN集成。
现在您将拥有P2P去中心化视频流!
更酷的是,你可以将它与GUN的lib/webrtc适配器相结合,完全从浏览器到浏览器完成这项工作!
我希望这对你有所帮助。
https://stackoverflow.com/questions/53789295
复制相似问题