利用IPFS構建短視頻應用開發經歷(七)

本系列文章是針對 https://blog.csdn.net/weixin_43668031/article/details/83962959 內容的實現所編寫的。開發經歷包括思考過程、重構和推翻重來。

現在開始製作前端,我這裏採用VUE3來做前端,既方便又美觀。
媒體文件(圖片、視頻文件),打算採用gateway的方式來訪問,就算ipfs節點跑在本地 localhost,也採用http://127.0.0.1/ipfs/CID 的這種方式來獲取。

https://ipfs.github.io/public-gateway-checker/

這個是公共網關,其中我下載了 https://ipfs.github.io/public-gateway-checker/gateways.json 文件包含進我的項目,這樣可以不需要連接到 ipfs.github.io 這個域名進行獲取資源。

我還加入了3個本地網關,分別是127.0.0.1 當前訪問的域名、當前訪問域名的8080端口,這個端口是ipfs節點默認的網關端口。

        //先get一下我下載下來的公共網關列表
        Axios.get('./gateways.json').then((res) =>{
          //添加3個本地網關
          let gateways = res.data;
          const host1 = window.location.host;
          const host2 = document.domain;
          gateways = [
            "http://127.0.0.1:8080/ipfs/:hash",
            "http://"+host1+"/ipfs/:hash",
            "http://"+host2+":8080/ipfs/:hash"
          ].concat(gateways);
          //定義用於測試的hash和文本
          const hashToTest = 'Qmaisz6NMhDB51cCvNWa1GMS7LU1pAxdF4Ld6Ft9kZEP2a';
          const hashString = 'Hello from IPFS Gateway Checker';
          //定義在線的網關列表
          const gatewayOnline = [];
          gateways.forEach((value) =>{
            //拼接hash到網關url裏
            const gatewayAndHash = value.replace(':hash', hashToTest);
            Axios.get(gatewayAndHash,{timeout:5000}).then((res)=>{
              const matched = res.data.trim() === hashString.trim();
              if(matched){
                //重新把hash替換成佔位符
                const url = res.config.url.replace(hashToTest, ':hash');
                //把在線的網關添加到列表
                gatewayOnline.push(url);
                //把第一個返回的網關記錄到全局變量中。
                if(this.$store.state.gateway=='')this.$store.commit('setGateWay', url);
              }
            }).catch((err)=>{
              //捕獲到異常,無需處理
            })
          });
        })

運行後 this.$store.state.gateway 這個全局變量中就有了一個最快返回的網關,數組gatewayOnline包含檢測結果爲在線的網關列表,如果程序判斷出來的最快的網關用戶覺得速度不行,還可以切換這裏的網關。

在頁面設計時遇到一些問題:
1.大部分界面還是採用V1的佈局,會修改一部分V1中不合理和迭代佈局。
2.彈幕插件沒有找到好的,因爲目前在網路上能找到的所有彈幕插件均採用C-S模式,後端採用傳統的中心化服務器,沒有找到合適的能在eth網路上運用的彈幕插件。
3.視頻軌(視頻清晰度)切換用傳統的“標清”、“高清”、“超清”並不合適,就算採用“720P”這樣的標示也有不妥的地方,目前還沒想好如何標示。
4.關於分享,URL生成廢棄V1的方式,採用操作ipfs對象,將單個視頻信息寫入ipfs對象,重新打包ipfs對象,最後生成一個新的CID+公共網關來分享給別人,優勢:在不借助第三方短連接的情況下能將路徑縮短到一個CID(46字符),儘管如此還是太長。缺點:把當前狀態的合約對象傳到ipfs上,意味着未來合約數據更新後,分享出去的那個頁面不會更新。
5.由於沒有大量前端經驗、雖然能理解vue全局對象、瀏覽器sessionStorage和localStorage,但還是無法確定我應該運用哪一種?
6.關於瀏覽器插件,V1使用ipfs和eth的瀏覽器插件來實現和ipfs網絡、eth網絡的通信,這會限制用戶的使用和推廣。我必須採用js來完成這一切,但是功能可能會有所限制。eth的轉賬和寫入可以通過插件來完成,但是eth的讀取操作,如果也需要插件會比較麻煩,因此eth讀取操作可以在eth插件不加載的情況下運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章