En esta entrada adaptaremos una librería que utiliza el proyecto p2p-media-loader básicamente es un loader que permite reproducir contenido P2P en el navegador y compartir lo que vemos con los demás pares conectados, tenemos la posibilidad de reproducir un vídeo directamente desde la red IPFS, que es una red P2P distribuida por lo que no utilizaremos esta funcionalidad del reproductor
Un enlace IPFS está compuesto de un hash que identifica el recurso que queremos consultar, en este caso usaremos enlaces IPNS que son nombres de dominio y que podemos resolver hacia una dirección IPFS, este enlace IPNS puede ser dinámico por lo que no siempre apunta al mismo recurso IPFS. Para crear un enlace IPNS necesitamos añadir la siguiente entrada al servidor de dominio (DNS) del dominio en cuestión y que resuelve al recurso IPFS
$ dig TXT +short _dnslink.manalejandro.com
"dnslink=/ipfs/QmVAtSU4W5G3GccYC9rYPZtqLVRWq6sVG7QJ5NpFr2TMqs"
Usamos el loader
HLS-IPFS del reproductor y lo adaptaremos con el siguiente parche para realizar la consulta del enlace IPNS, una vez aplicado al fichero index.js
--- hlsjs-ipfs-loader.js
+++ hlsjs-ipns-loader.js
@@ -1,10 +1,10 @@
'use strict'
-class HlsjsIPFSLoader {
+class HlsjsIpnsLoader {
constructor(config) {
this._abortFlag = [ false ];
this.ipfs = config.ipfs
- this.hash = config.ipfsHash
+ this.hash = config.ipnsHash
if (config.debug === false) {
this.debug = function() {}
} else if (config.debug === true) {
@@ -116,7 +116,10 @@
}, console.error)
}
}
-async function getFile(ipfs, rootHash, filename, options, debug, abortFlag) {
+async function getFile(ipfs, hash, filename, options, debug, abortFlag) {
+ const asyncGen = await ipfs.name.resolve(hash),
+ h = await asyncGen.next(),
+ rootHash = h.value
debug(`Fetching hash for '${rootHash}/${filename}'`)
const path = `${rootHash}/${filename}`
try {
@@ -153,4 +156,4 @@
return value
}
-exports = module.exports = HlsjsIPFSLoader
+exports = module.exports = HlsjsIpnsLoader
Solamente faltaría hacer browserify al loader con este pequeño cambio para resolver enlaces IPNS
browserify -s HlsjsIpnsLoader -o js/hlsjs-ipns-loader.js hlsjs-ipns-loader.js
Y se genera el fichero con el resultado para el navegador en la carpeta js/
Podemos usarlo tal y como se hace en el proyecto p2p-media-loader-demo solo que podremos pasarle como parámetro una dirección de dominio que resuelve el enlace IPNS
Dejo una prueba de concepto en p2p.manalejandro.com
PD: No me hago responsable del contenido que me he encontrado en la red IPFS para realizar el ejemplo
Saludos y hasta la próxima
Comments
No comments yet. Be the first to react!