像碩鼠這樣的視頻下載軟體的原理是什麼?寫一個視頻下載腳本或軟體有多難?

在百度知道找到的答案:我想知道,為什麼這麼多主流網站會讓碩鼠下載自己的視頻,感覺不太對。希望了解的人能詳細說明一下。


各個視頻網站的視頻本質就是下載 FLV文件來播放,無論它怎麼隱藏下載地址,做多少次跳轉,搞什麼身份認證,做多少文件分片,最後都是要下載一個flv文件。
所以視頻下載軟體只需要精確地模擬網站上那個flash的行為就可以把FLV下載下來。
FLV是一種很簡單的視頻封裝格式,去掉封包,裡面就是h264 aac等媒體的裸流,很容易重新打包成其他格式比如mp4。

寫一個也不難。
首先用網路抓包工具,分析視頻網站的請求,找出下載flash 文件的地址。
用Fiddler 或者 wireshark 可以抓包。
先把flash本身下載下來。

然後,找個反編譯 flash的工具,有很多這種工具,哪個好用我也不知道,沒用過。
反編譯後看看裡面的腳本,配合抓包工具,搞清楚它是怎麼做下載身份驗證的。

最後,一點點模擬flash的行為去下載flv,你發的請求包如果和視頻網站的完全一樣,伺服器就不知道你是非法的終端了。

做這種軟體最麻煩不是做出第一版,而是持續的維護升級,視頻網站也很討厭盜鏈的,總會不停變化驗證方法,你要不停地跟著改,很累的。
而且你會把視頻網站的開發搞的也很累,所以你最好不要讓他們找出你住哪裡,否則,嘿嘿。
大家都是碼農,不要互相擠兌,最後誰都沒好處,有時間不如去干點兒有建設性的事情。


參考 https://github.com/rg3/youtube-dl

代碼很簡單,幾乎國內外所有視頻網站的抓取都實現了。Python代碼很容易很懂,你要做同類軟體只需要翻譯代碼就行了。YouTube的視頻地址解析演算法可以很複雜,但還是擋不住機智的網友。


基本的原理都是通過抓包分析視頻資源獲取過程。比如網易視頻的流程如下:
視頻地址:http://v.163.com/zixun/V8GAM9FF2/VBCH87L4H.html,通過抓包軟體(wireshark、HttpAnalyzer或chrome的開發者工具等都可以)可以發現,最終取得視頻資源地址的關鍵一步是獲取記錄視頻信息的xml文件,獲取這個xml文件的地址為xml.ws.126.net/video/4/H/0085_VBCH87L4H.xml,從這個地址著手分析,可以知道/4/H/,是url中VBCH87L4H的最後兩個字元;那麼0085代表什麼呢?通過查找網頁源碼可以找到0085這個字元串,代表的是topic id。據此就很容易得到任意一個video的資源信息文件的地址啦~~。剩下的工作就是從xml中讀取flv文件的地址,然後下載即可。

其他視頻網站都可以通過類似的手段取得,只不過複雜程序不一樣而已。比如新浪視頻就加入了過期機制。而騰訊視頻的新介面加入了隨機串cKey,這個cKey的演算法需要去研究代碼,可能需要反編譯swf才能拿到了,但騰訊視頻的一些舊介面仍然可用,所以還是可以順利下載。

此外,我fork了youtube-dl(https://github.com/rg3/youtube-dl)至
https://github.com/52Jolynn/youtube-dl,新增了鳳凰網、騰訊視頻、網易視頻的解析下載,有興趣的可以參考下。


把電腦緩存的一個個片段視頻,整理好變成一個你看到的完整的視頻


碩鼠網站提到過採用的智能演算法,之前研究過,並不是像樓上兩位說的那種演算法,碩鼠的演算法應該更加高級一點,但是具體實現無從知曉。


推薦閱讀:

思路網是怎麼做起來的?
YouTube 有哪些健身的頻道?
相比優酷,你認為 YouTube 具有哪些優點?

TAG:互聯網產品 | 視頻 | 視頻網站 | 視頻下載 | 碩鼠 |