как сохранить изображение / видео файл с помощью gundb? - PullRequest
0 голосов
/ 15 декабря 2018

Я знаю, что традиционный способ - сохранить файл изображения / видео в одном месте, а затем просто сохранить индекс ссылки в таблице базы данных.

Теперь я узнаю о gundb, я могу очень легко хранить данные типа json типа ключ-значение, но, поскольку они децентрализованы, если я хочу создать приложение, скажем, в чате, как мне следует хранить изображения (например, пользовательаватар)?

Мне также интересно, можно ли создать приложение для обмена фильмами, используя gundb?

1 Ответ

0 голосов
/ 16 декабря 2018

@ Ретрик, отличный вопрос!Я не уверен, почему люди голосуют против вас, они должны быть ненавистниками.

Вы правы, лучше сохранить это изображение / видео и ссылаться на него через GUN.Специально для видео, WebTorrent / BitTorrent уже более 10 лет делится P2P-видео и в какой-то момент обрабатывает 40% мирового интернет-трафика!

Однако WebTorrent / BitTorrent не очень хороши для обнаружения / совместного использования этих URI.(магнитные ссылки и т. д.), но GUN есть.Поэтому я бы рекомендовал это как один из вариантов.

Для изображений, особенно небольших, таких как аватары / значки / профили, я часто храню их в GUN напрямую, кодируя их Base64 (многие веб-сайты по всему миру встроеныimages / icons / sprites / avatars в CSS файлы с base64 data-URL, за исключением того, что теперь вы можете использовать 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
});

Наконец, как насчет хранения видео в GUN, если вы не хотите использовать BitTorrent?

Я бы настоятельно рекомендовал использовать формат 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, используя ту же структуру папок 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 было легко интегрировать с GUN.

Теперь выВы получите децентрализованное потоковое видео P2P !!!

И даже круче, вы можете объединить его с адаптером lib/webrtc от GUN и сделать это полностью браузером для браузера!

Надеюсь, это помогло.

...