請教下鬥魚直播的基本技術原理是怎樣的?

對鬥魚直播的技術實現非常感興趣,

發布端可以用obs 使用rtmp 發布,但是令我納悶的是網頁端卻是一個 flv 的文件url 這個是怎麼實現的?


剛做完一個RTMP推流項目,就來怒答一波好了。

首先在鬥魚的直播頁面右鍵發現確實用的是 Adobe Flash Player(原諒我對web真是一竅不通,不會看後台代碼什麼的),因此看來用的技術是RTMP直播沒跑了,當然已下答案針對所有使用RTMP技術進行直播的平台。

首先來說說RTMP它的定義到底是什麼?

http://www.adobe.com/devnet/rtmp.html

這個網址裡面的描述應該是對RTMP最正確也是最官方的描述了。

The Real-Time Messaging Protocol (RTMP) was designed for high-performance transmission of audio, video, and data between Adobe Flash Platform technologies, including Adobe Flash Player and Adobe AIR. RTMP is now available as an open specification to create products and technology that enable delivery of video, audio, and data in the open AMF, SWF, FLV, and F4V formats compatible with Adobe Flash Player.

簡而言之RTMP就是 Adobe 公司設計的用來在它伺服器和 播放器之間用來傳輸數據的一種協議。

RTMP協議剛研發出來的時候是不開源的,但是依然不妨礙一個來自西班牙的大神叫Andrej Stepanchuk給破解了。他寫了一個項目RTMPDump,可以用來下載flv文件。我一度懷疑目前用的比較多的一些chrome視頻下載插件或者flv下載器就是用的RTMPDump 來實現的。當然我沒有去深究,所以只是我的一個猜測而已。

好了上面只是一個小插曲,下面我們重點來講RTMP 用於直播的方案。

首先題主提到的obs 發布視頻流,事實上在流媒體的概念裡面,這個行為應該被稱作推流更為貼切。RTMP 推流客戶端直接將音視頻流推送到指定的 flash media server 上,這裡引入一個概念flash media server 也就是流媒體伺服器。而網頁上獲取的流實際上是流媒體伺服器再次分發出來的。

推送 分發

推流客戶端 ————&> 流媒體伺服器 ————&> 網頁flash播放器(大量的)

一個完整的直播流程應該就是上面這樣了。


其實rtmp協議傳輸的仍然是flv封裝的音視頻流,這塊是由cdn邊緣節點提供的rtmp到http協議轉換。


我也很好奇視頻流的直播怎麼實現的,從採集到發布成flv,應該不是實時的直播,但肯定是連續的流吧,有大神解釋下嗎?因為自己也想設立一個簡單的web直播,不知道流媒體傳輸該如何下手。


題主可以看下red5框架


可以的


推薦閱讀:

TAG:技術 | 技術產品 | 互聯網技術 | 技術原理 |