通過BLOB加密視頻文件

前言
  • 現(xiàn)在許多視頻在線觀看網(wǎng)站,你如果打開chrome查看其video標(biāo)簽妒挎,會(huì)發(fā)現(xiàn)它的src是一個(gè)以blob:開頭的地址四瘫。比如下面這里是B站的截圖八孝,可以看到他這里引入的并不是一個(gè)在線的視頻存放地址,這樣你通過爬蟲腳本也無法下載該視頻文件应役,通過一個(gè)new tab打開也于事無補(bǔ)情组,會(huì)提示你地址錯(cuò)誤。
    image.png
createObjectURL與BLOB
  • 我們?cè)倩氐侥莻€(gè)以blob:開頭的神秘字符串箩祥,它其實(shí)是通過URL.createObjectURL這個(gè)API生成的院崇,該函數(shù)接收一個(gè)BLOB對(duì)象,返回該對(duì)象對(duì)應(yīng)的DOMString袍祖,這個(gè)字符串其實(shí)也可以看做是一個(gè)url地址底瓣,但它是與當(dāng)前窗口的document對(duì)象綁定的,也可以說是會(huì)話(session)級(jí)的,所以你在新的tab打開也就無效了
  • 再來了解下BLOB捐凭,他的全稱為big binary large object拨扶,二進(jìn)制大對(duì)象。如果把一個(gè)視頻文件轉(zhuǎn)換成二進(jìn)制對(duì)象茁肠,其大小肯定很大患民,這樣理解就清楚多了。在瀏覽器端也提供了BLOB相關(guān)的API垦梆,通過new Blog(...)生成blog對(duì)象匹颤。
  • 拿到blog對(duì)象后,再通過URL.createObjectURL生成臨時(shí)地址托猩,賦值給video標(biāo)簽的src屬性印蓖,這樣就可以了。但其實(shí)可以直接從服務(wù)端接收二進(jìn)制對(duì)象京腥,就是服務(wù)端把視頻文件轉(zhuǎn)換成二進(jìn)制對(duì)象赦肃,通過接口給到前端,前端再生成dom string公浪。
代碼實(shí)現(xiàn)
  • 服務(wù)端使用的nodejs他宛,koa框架,這里的操作很簡(jiǎn)單欠气,就是用fs.readFileSync直接打開視頻文件堕汞,得到的data結(jié)果是二進(jìn)制的數(shù)據(jù),直接作為結(jié)果返回晃琳。
const Koa = require('koa')
const Router = require('koa-router')
const buffer = require('buffer');
const app = new Koa()
const router = new Router()
const fs = require('fs')
const video = async (ctx, next) => {
  try {
    // open 一個(gè)放在服務(wù)器的視頻
    let data = fs.readFileSync('XXX.XXX.XXX/simple.mp4')
    ctx.response.body = data
  } catch (e) {
    return Promise.reject({
      status: 500,
      message: '視頻傳輸錯(cuò)誤'
    })
  }
  next()
}

router.get('/video', video)

app.use(router.routes()).use(router.allowedMethods())
app.listen(3001)
  • 接下來看前端代碼,這里使用的最原生的XMLHttpRequest對(duì)象語法琐鲁,這里最重要的一點(diǎn)是要設(shè)置responseType為blob卫旱,這樣接收到response直接就是一個(gè)blob對(duì)象供我們使用。這個(gè)responseType屬性不屬于http頭部信息围段,而是ajax請(qǐng)求中XHR對(duì)象的屬性(默認(rèn)為""也就是text類型顾翼,而在一些封裝XHR的框架中,一般把默認(rèn)值設(shè)為json)奈泪。
    let xhr = new XMLHttpRequest()
    xhr.open('GET', 'http://localhost:3001/video', true)
    xhr.responseType = 'blob'
    xhr.onload = function(e) {
      if (this.status === 200) {
        // 獲取blob對(duì)象
        let blob = this.response
        console.log(blob)
        // 獲取blob對(duì)象地址适贸,并把值賦給容器
        $("#sound").attr("src", URL.createObjectURL(blob));
      }
    }
    xhr.send()
  • 這樣就可以得到以blob:開頭的臨時(shí)url地址,而且在向服務(wù)端請(qǐng)求時(shí)頁隱藏了真實(shí)的視頻地址涝桅。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拜姿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冯遂,更是在濱河造成了極大的恐慌蕊肥,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤肌,死亡現(xiàn)場(chǎng)離奇詭異壁却,居然都是意外死亡批狱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門展东,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赔硫,“玉大人,你說我怎么就攤上這事盐肃∽Σ玻” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵恼蓬,是天一觀的道長(zhǎng)惊完。 經(jīng)常有香客問我,道長(zhǎng)处硬,這世上最難降的妖魔是什么小槐? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮荷辕,結(jié)果婚禮上凿跳,老公的妹妹穿的比我還像新娘。我一直安慰自己疮方,他們只是感情好控嗜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骡显,像睡著了一般疆栏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惫谤,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天壁顶,我揣著相機(jī)與錄音,去河邊找鬼溜歪。 笑死若专,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝴猪。 我是一名探鬼主播调衰,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼自阱!你這毒婦竟也來了嚎莉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤沛豌,失蹤者是張志新(化名)和其女友劉穎萝喘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阁簸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年爬早,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片启妹。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筛严,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饶米,到底是詐尸還是另有隱情桨啃,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布檬输,位于F島的核電站照瘾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丧慈。R本人自食惡果不足惜析命,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逃默。 院中可真熱鬧鹃愤,春花似錦、人聲如沸完域。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吟税。三九已至凹耙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肠仪,已是汗流浹背使兔。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藤韵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓熊经,卻偏偏與公主長(zhǎng)得像泽艘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镐依,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容