需要實現的需求:
前端展示錄音的時長
實現該需求的前提條件:
1.深海捷(錄音廠商)提供了兩個關於錄音的接口,一個是下載接口(訪問接口,直接就下載音頻文件了),
另一個接口是播放接口(接口返回一個html文件,文件中用Object標簽實現了播放,可是只能在ie下播放,在chrom中無法展示播放器)
2.如果使用深海捷的服務撥打電話后,是會有回調事件,返回錄音時長存到數據庫的,所以這種場景已經有錄音時長的數據,前端直接展示就 可以
3.還有一種場景就是接下來需要實現的場景,用戶手動上傳錄音,這個時候數據庫是沒有錄音時長數據,在做此需求前,是有歷史存量數據的 所以覺得比較好的方式是,當用戶需要查看該錄音時,如果數據庫沒有該錄音的時長,就用一個方法去獲取錄音時長,並且入庫,可以避免 多次計算,做到一人計算,便可多人查看的效果
思路:
1.前端使用audio標簽的去獲取錄音時長,可是后端只有一個下載錄音的接口,所以如果給audio的src設置成下載的url的話,文件就直接下載了,無法獲取時長,要想實現該方法,則需要后端轉發一下請求,把下載接口改成返回音頻文件的接口
2.后端直接去請求下載接口,返回音頻文件,在后端解析獲取音頻時長,並且入庫
實操:
1.思路1實操阻礙點,使用request請求下載接口,轉發數據是無法改變成不下載的方式,該方法有待研究
2.最后采用了思路2的的方法,后端用到了request包,使用request.get去請求音頻下載接口,這里要注意需要設置request.get({rejectUnauthorized: false, url }),沒有設置rejectUnauthorized為false的話,請求會報錯。獲取到接口返回的數據流之后,使用get-audio-duration包的getAudioDurationInSeconds方法獲取錄音的時長,然后存儲到數據庫
疑惑:
1.后端使用request獲取通話錄音時,返回的數據是以什么形式存在的,流?文件?buffer?
2.如何通過接口轉發,發原本是下載接口的,改成返回audio可直接播放的接口形式,修改content-disposition??