1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          螢石云直播(Promise如何改寫獲取螢石云直播地址接口)

          來源:互聯網轉載 時間:2024-05-02 14:33:59

          改寫原因

          通常情況下,螢石云的直播地址都是在服務端進行獲取,然后存儲到數據庫中,但是螢石云官方默認同一個ip最多只能使用5個appKey,否則會爆出appKey數量超出安全限制的錯誤提示。

          因此改為前端進行api的調用,來分散ip和appKey之間的綁定(這一點對開發者而言其實意義并不是很大,應為開發者的ip是固定的,測試過程中遲早也會超出數量限制)。

          技術選擇

          需求明確之后,有兩種方案可供選擇。

          • ajax回調

          • Promise異步編程解決方案

          整個直播鏈接的獲取流程大致如下:

          可想而知,如果單純用ajax進行回調,無疑會陷入回調地獄中,于是果斷選擇了Promise進行改寫(進步源于折騰)。

          源碼

          letserial,channelNo;/***向服務器查詢攝像頭直播鏈接**@paramcameraId攝像頭id*@paramperspective是否允許查看其他用戶的攝像頭**服務器首先查詢數據庫直播鏈接緩存*------如果數據庫有緩存,則服務器將直接返回cameraBean的信息*------如果沒有緩存,則查找當前用戶的accessToken*------------如果數據庫保存有accessToken,則返回accessToken*------------數據庫沒有保存accessToken,則返回appKey/appSecret,由瀏覽器進行下一步accessToken的獲取*/functionstep1(cameraId,perspective){returnnewPromise(function(resolve,reject){$.ajax({type:"GET",url:"/cameraManage/getCameraAddress?id="+cameraId+"&perspective="+perspective,success:function(data){if(data.state=='success'){resolve(data.data);}else{layer.msg(data.msg);console.log(data.msg);}},error:function(e){layer.msg("網絡異常請稍后再試");console.log("error");}});})}/***接收step1返回的結果,判斷結果類型*------如果是camera對象或者是accessToken,則直接攜帶該數據進入step3*------如果是appKey/appSecret,則調用開放平臺接口,查詢accessToken,并上傳至服務器保存,進行step3*/functionstep2(data){serial=data.serial;channelNo=data.channelNo;returnnewPromise(function(resolve,reject){if(data.camera||data.accessToken){//服務器直接返回了攝像頭直播信息或accessTokenresolve(data);}elseif(data.appKey&&data.appSecret){//服務器返回了appKey&&appSecret$.ajax({type:"POST",url:"https://open.ys7.com/api/lapp/token/get",data:{appKey:data.appKey,appSecret:data.appSecret},dataType:"json",success:function(data){lettokenData=data.data;if(data.code=="200"&&tokenData){resolve(tokenData);uploadAccessToken(tokenData.accessToken,tokenData.expireTime,1);}},error:function(e){layer.msg("網絡異常請稍后再試");console.log(e);}});}});}/***接收step2返回的數據,camera或accessToken*------如果是camera對象,則直接返回*------如果是accessToken,則調用開放平臺接口,查詢直播鏈接,并上傳至服務器保存*/functionstep3(data){if(data.camera){//console.log("上一步直接返回了camera");returndata.camera;}returnnewPromise((resolve,reject)=>{$.ajax({type:"POST",url:"https://open.ys7.com/api/lapp/live/video/list",data:{accessToken:data.accessToken,},dataType:"json",success:function(data){letaddressData=data.data;if(data.code!='200'||!addressData){layer.msg("直播鏈接獲取失敗");console.log("直播鏈接獲取失敗");return;}for(leti=0;i<addressData.length;i++){if(addressData[i].deviceSerial==serial&&addressData[i].channelNo==channelNo){letargObject={serial:addressData[i].deviceSerial,channelNo:addressData[i].channelNo,flv:addressData[i].flvAddress,flvHd:addressData[i].hdFlvAddress,hls:addressData[i].liveAddress,hlsHd:addressData[i].hdAddress,rtmp:addressData[i].rtmp,rtmpHd:addressData[i].rtmpHd};//console.log("獲取了直播鏈接");//console.log(argObject);resolve(argObject);uploadYs7CameraAddress(argObject);break;}}},error:function(e){layer.msg("網絡異常請稍后再試");console.log(e);}});});}/***獲取攝像頭直播鏈接調用接口*@paramcameraId攝像頭id*@paramperspective是否允許當前用戶查看其他用戶的攝像頭*/functiongetCameraAddress(cameraId,perspective){returnstep1(cameraId,perspective).then(step2).then(step3);}/***將accessToken上傳至服務器保存*/functionuploadAccessToken(accessToken,expireTime,cameraType){$.ajax({type:"POST",url:"/cameraManage/uploadAccessToken",data:{accessToken:accessToken,expireTime:expireTime,cameraType:cameraType},dataType:"json",});}/***將得到的攝像頭鏈接上傳至服務器保存*/functionuploadYs7CameraAddress(args){args.id=0;$.ajax({type:"POST",url:"/cameraManage/uploadYs7CameraAddress",data:args,dataType:"json",});}

          之后前端調用攝像頭的接口只需要編寫如下代碼就可以了

          getCameraAddress(cameraId,0).then(data=>{if(data==null||data==undefined){//未綁定攝像頭的錯誤提示...return;}//獲得鏈接之后的正常操作流程...});

          到此,關于“Promise如何改寫獲取螢石云直播地址接口”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!

          標簽:螢石云直播-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          【資料圖】關于金絲楠木手串怎么盤的知識大家了解嗎?以下就是小編整理的關于金絲楠木手串怎么盤的介紹,希望可以給到大家一些參考,一起來了解下吧!在盤玩金絲楠木手串的時候,一般手心經常出汗的人建議戴棉質手套盤玩,避免汗液內的鹽和脂肪酸影響金絲楠木手串的光澤度。再放在纖維布內一顆一顆揉搓,這樣盤玩時間久了可以讓金絲楠木手串表面變得細膩有光澤。金絲楠木手串的盤玩方法剛購買回來的金絲楠木手串最好不要直接上手盤...

          (資料圖片)有關如何做好祖國的建設者和接班人演講稿方面的知識,估計很多人不是太了解,今天就給大家詳細的介紹一下關于如何做好祖國的建設者和接班人演講稿的相關內容。1、翻開歷史的畫卷,昔日的祖國,傲立東方,我們為此自豪;昨天的華夏,忍辱百年,我們為之感嘆;今日之中國,國泰民安,我們為之歡躍。2、同學們,新世紀的朝陽已經升起,我們的家鄉和祖國迎來了前所未有的發展機遇,也面臨著許多新的挑戰。我們是21世紀...

          近年來,許多外國演員在中國定居,有些人甚至改變了他們的中文名字。不得不說,我們花店發展的太好了,能吸引這么多外國演員入駐。1.矢野浩二來自日本的矢野高治最著名的銀幕形象是他扮演的大足。雖然看起來像是“我自己演的”,但矢野KO JI本人是非常欣賞和熱愛中國的。有一次接受采訪,他把中國稱為自己的第二故鄉,可見他對花農的喜愛之深。當然,他也是。他娶了中國媳婦,定居上海。甚至他女兒的名字也是以中國傳統節日...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>