實現輸出h264直播流的rtmp服務器

轉自:http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.htmlhtml

 

  RTMP(Real Time Messaging Protocol)是常見的流媒體協議,用來傳輸音視頻數據,結合flash,普遍用於直播、點播、聊天等應用,以及pc、移動、嵌入式等平臺,是作流媒體開發常常會接觸到的協議。我以前曾經寫過一篇文章「RTMP協議發送H.264編碼及AAC編碼的音視頻」,簡單介紹過如何在本身的程序裏使用rtmp協議,不過那篇文章講的主要是如何實現一個rtmp直播的發佈端,主要側重在「採集-編碼-rtmp發佈」這樣的流程。這篇文章的主要內容是和你們分享下,作一個簡單的、輸出H.264直播流的rtmp server,須要實現哪些功能和步驟。 服務器

常見的rtmp服務器

  有不少知名的rtmp server,其中既有商業程序也有開源程序,簡單列舉以下:網絡

  開源項目併發

    

 

  商業程序性能

    

  固然,還有一些其餘的開源、商業rtmp服務器(如ffserver),我就不一一列舉了。我並無一一嘗試,不過,從它們的聲明來看,通常來講,商業rtmp程序要比開源程序支持更多的協議以及更多的平臺,至於哪一個更好,這就很差說了。我比較推薦的是crtmpserver,高性能,號稱能夠支持「thousands of simultaneous connections」,並且它的開發社區目前很活躍。不過缺點是,代碼量有點龐大,並且在不斷增長當中。編碼

  rtmp服務器的功能比較複雜,要完整實現比較困難,若是你須要的是一個完整功能的rtmp server,那就能夠從它們之中選擇一個,若是你的需求和我同樣,只是一個簡單的、輸出H.264直播流的rtmp server,那就須要本身來設計和實現。spa

rtmp server與播放器的交互

  咱們須要實現的是:支持flash播放協議、輸出H.264直播流的rtmp server,那麼首先,咱們必須瞭解rtmp服務器和flash播放器客戶端之間是怎樣的一個交互流程。經過閱讀《rtmp specification 1.0》就能夠了解,我這裏把它概括總結一下。設計

    

  基本上一個rtmp server實現了以上6點交互協議,就能夠支持flash的播放,順利的輸出h.264視頻流。視頻

設計與實現

  知道了交互過程,咱們就能夠來設計和實現本身的Rtmp服務器了。因爲RTMP協議是基於TCP協議的,因此rtmp server本質上就是一個TCP服務器,它的邏輯結構基本上和普通的TCP服務器是相似的。server

  事實上,librtmp已經提供了基本的rtmp報文的讀取和發送,能夠在librtmp的基礎上進行開發,來實現各類rtmp協議的組包和發送,從設備、文件或網絡中獲取到視頻數據,封裝成Rtmp數據報文,發給flash播放器,完成播放。

  我在另外一篇文章「RTMP協議發送H.264編碼及AAC編碼的音視頻」中,已經詳細介紹瞭如何編譯和使用librtmp,感興趣的能夠去看一下。那篇文章中談的是rtmp協議視頻發佈端,和發佈端相同的是,rtmp server向flash播放器發送的視頻數據流,也是須要首先發送"AVC sequence header",這其中包含的是重要的編碼信息,沒有的話,flash播放器將沒法解碼。下面的代碼便是rtmp server收到播放請求以後,從"H264Reader"獲取併發送的播放流程。

    

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  haibindev.cnblogs.com,合做請聯繫QQ。(轉載請註明做者和出處)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

相關文章
相關標籤/搜索