搭建適合IOS的HTTP Live Streaming直播系統

最近,需要將蘋果的HTTP Live Streaming系統搭建起來。完全沒有頭緒,故第一步就是學習。

一、學習資料

官網資料

1. http://developer.apple.com/resources/http-streaming/

具體的搭建方案

        使用segmenter將現成的視頻文件分割,並生成列表文件。

1. http://blog.csdn.net/zhoujunming/article/details/6694730

2. http://blog.sina.com.cn/s/blog_6c13e14e0100r9b8.html

3. http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

二、使用Helix Universal Server和Helix Producer搭建直播系統

             1. http://scrolls.bokecc.com/?p=207   

                    ““”

蘋果沒有官方的HLS直播服務器軟件和客戶端軟件。其它第三方公司的產品有:
·  TVersity
·  Helix Universal Server
·  Wowza Media Server
·  VLC Media Player version 1.2
我採用Helix Universal Server和Helix Producer(客戶端軟件)進行了直播測試。
若要做針對iOS平臺的直播,目前來看,只能採用此種方式。

                    ”“”     

                     因此我也選擇使用Helix Universal Server和Helix Producer來搭建直播系統。

               2.  Helix Universal Server

                  (1)  下載與安裝

                         http://www.realnetworks.com/helix/download-helix-products.aspx 

                         在官方頁面下載Helix Universal Server與Helix Producer。

                         Windows系統下,軟件的安裝過程會有詳細而明白的提示,十分方便,

                         Linux操作系統中,

                              將下載的tar.gz文件解壓得到bin文件。執行bin文件。

                              1. 輸入證書的路徑,如果證書有效,就可以不斷地按【enter】鍵將其讀完。

                              2. 選擇accept剛纔閱讀過的內容。

                              3. 然後程序會讓你填寫安裝路徑,默認爲bin文件所在的文件夾。第一次安裝時,

                               由於enter點得太快,跳過了這一步。於是不得不再安裝一次!!

                              4. 輸入用戶名和密碼。

                              剩下就沒有太重要的內容了,憑着感覺安裝即可。

                              安裝結束後,進入安裝目錄,

                                    輸入命令:sudo ./Bin/rmserver rmserver.cfg就可以將服務器運行起來。

                                    打開配置文件rmserver.cfg,找到管理端口,在我這裏是<Var AdminPort="25567"/> 

                                    輸入鏈接:http://localhost:25567/admin/index.html 就可以進入系統的管理頁面。

                  (2)  官方文檔

                        http://www.realnetworks.com/helix/download-helix-products.aspx

                        從上述鏈接對應的文章中,我們可以瞭解到如何搭建基於Helix Universal Server的系統,

                        其中,文章的第七章詳細介紹瞭如何將

                        http://docs.real.com/docs/producer14/HelixProducer14.0.0_GettingStarted.pdf

                        上述鏈接對應的文章介紹了Helix Producer的使用方法。

                  3. 利用Helix Universal Server和Helix Producer在一臺機器上搭建直播系統(winxp操作系統)。

                       (1) 安裝 Helix Universal Server和Helix Producer,安裝時均使用默認設置,另外 還要設置用戶名和密碼。

                       (2) 運行Server

    • 打開服務器自帶的管理頁面(Server Administrator)。
    • 選擇Content Management  ->  Media Segmentation,  將Enable Segmentation的狀態改爲yes                        

                       (3) 運行Helix Producer。

    • 選中input標籤,設置輸入。選中USB/Capture Device,再選擇相應的信號源。
    • 選中output標籤,設置輸出。點擊面板上的加號(Add output),然後進行對兩類參數進行設置。
                                            encoding settings:設定相應的格式以及視頻流的平均碼率,幀率等參數                                 

                                            output servers:設定編碼後的數據發到哪個服務器上。主要有如下幾個參數:

                                                                   Server Type(可能是producer向服務器傳送數據的方式):Helix Push.

                                                                   Stream Name(數據流的名稱,在客戶端,可以通過這個名稱向服務器請求相應的數據流):test.mp4。

                                                                   Server address(服務器地址,由於server在本地,我將這個值設定爲127.0.0.1)。

                                                                   HTTP Server Port(服務器設定的HTTP端口,默認爲80):80.

                                                                   Username,Password(Helix服務器在安裝之初設置的用戶名和密碼)。

    • 點擊“Start Job”, 如果start成功,說明producer已經連接到服務器並且開始傳輸數據。

                4. 觀察直播系統中的文件。

                     (1) 通過鏈接http://127.0.0.1/m3ugen/broadcast/test.mp4可以獲得.m3u8文件(類似於index文件)。

                     (2) 進入服務器管理頁面,選擇Content Management -> Content Browsing, 點擊Browse Content鏈接,就可以看到服務器上

                             的掛載點,以及掛載點下的資源。選擇iPhone掛載點,進入broadcast,,進入test.mp4就可以看到ts格式的片段文件。


                5.  播放。

                     (1) 在播放器(例如vlc)中輸入地址  rtsp://127.0.0.1:554/broadcast/test.mp4, 可以看到直播的視頻。

                     (2) 播放HTTP Streaming,使用蘋果客戶端(iPhone)

                             用safari運行腳本:

<html> 

    <head> 

   <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>

           </head> <body style="background-color:#FFFFFF; "> 

    <body>

                    <center> <video src="SERVER_ADD:SERVER_PORT/m3ugen/broadcast/test.mp4" controls autoplay ></video> </center>

     </body> 

</html>

三、使用免費的產品搭建直播系統

     上述方案的不足就是Helix的產品只有試用版。想用正版就得花錢。

     1. 學習資料

       使用VLC+mediastreamsegmenter+apache搭建HTTP Live Streaming系統:

              http://www.unmht.org/memo/en_ipod_stream.html

                   http://jokru.org/apple-http-live-streaming-to-the-ipadiphone-w

         mediastreamsegmenter的使用方法:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/mediastreamsegmenter.1.html

         對於搭建HTTP Live Streaming系統,官方的說明資料:http://developer.apple.com/library/ios/#technotes/tn2224/_index.html


     2.工具的選擇

         (1)視頻信號的採集與編碼。

                mediastreamsegmenter能夠接收的數據:視奧頻-》H264;音頻-》AAC, 封裝於ts流中,

           通過UDP傳輸(似乎是這些要求,具體細節我其實也不清楚)。

           下面開始尋找能夠滿足這個要求的工具。

                1)quicktime broadcaster   

                    broadcaster的下載地址:http://developer.apple.com/library/ios/#documentation/networkinginternet/conceptual/streamingmediaguide/Introduction/Introduction.html

                                     安裝這個軟件後,用它向mediastreamsegmenter喂數據,segmenter報錯。因此,我認爲(可能不對),

                           這個工具不能滿足要求。

                       2) VLC

                           經過試驗,使用VLC可以成功地向mediastreamsegmenter喂數據。因此我選擇VLC作爲視頻、音頻流的處理工具。

                (2)視頻流的分片工具

                    使用蘋果的mediastreasegmenter

                 ( 3 ) 服務器

                     apache

       3. 具體架設方案。

                (1) 視頻、音頻信號的採集與編碼,使用rtsp協議將視頻播放出去。

                              一臺PC(ip地址爲192.168.1.101),裝備有攝像頭,麥克風,安裝有VLC.

                             1)打開vlc,,選擇 媒體->打開捕獲設備->捕獲設備。點擊播放。如果vlc能夠成功將攝像頭和麥克風捕獲的信號顯示出來,

                                就可以進行下一步。

                             2)在VLC中選擇 媒體->串流->捕獲設備,點擊串流。接下來會彈出一個流輸出設置窗口。

                                  在“目標”中,選擇RTSP進行添加,接着數據端口號(默認5544)和路徑(我設置爲 /test)。

                                  在轉碼選項中,在“激活轉碼前打鉤”,檔案中,保持默認選項(Video-H264+AAC(MP4))。

                                  點擊“串流”,這時,該PC機的5544端口就開始提供rtsp直播服務了。

                              3) 驗證rtsp服務是否可用。

                                  打開一個新的VLC,選擇  媒體->打開網絡串流。輸入rtsp://127.0.0.1:5544/test, 如果可以成功地看到攝像頭捕獲

                                  的影像,就說明rtsp服務是可用的。

                 (2)視頻流的轉碼

                            一臺mac(我測試用的的視頻服務器都部署在這裏,IP:192.168.1.109),安裝有vlc.

                            由於mediastreamsegmenter不能直接讀入rtsp服務器傳來的數據流,所以我們需要對數據進行一定的變換。

                            1)找到應用程序vlc的地址(一般默認在/Applications/VLC.app/Contents/MacOS下),進入文件夾。

                            2)輸入命令:

                                ./VLC --intf=dummy rtsp://192.168.1.101:5544/test  '--sout=#transcode{fps=25,vcodec=h264,venc=x264{aud,profile=baseline,level=30, keyint=30,bframes=0,ref=1,nocabac},acodec=mp3,ab=56,audio-sync,deinterlace}:duplicate{dst=udp{mux=ts,dst=127.0.0.1:8000,access=udp}}'

                                下面大致介紹一下這條命令:

    •  --intf=dummy   表示不顯示VLC的窗口
    •  rtsp://192.168.1.101:5544/test 是vlc輸入流的來源,也就是我們之前搭建的rtsp服務器。
    •  --sout, 通過這個選項 對輸出進行具體的設置。
    •  ranscode{fps=25,vcodec=h264,venc=x264{aud,profile=baseline,level=30, keyint=30,bframes=0,ref=1,nocabac},acodec=mp3,ab=56,audio-sync,deinterlace}    這一行命令對於視頻和音頻的轉碼格式進行設置(視頻和264,音頻aac), 但一些參數還不是很明白。          
    • duplicate{dst=udp{mux=ts,dst=127.0.0.1:8000,access=udp}},將視頻、音頻流封裝爲ts格式,使用udp傳輸,傳向本地服務器的8000端口。

                (3) 獲取ts流並進行分片

                           1)medianstreamsegmenter

                                  這個小程序一般默認安裝在mac的/usr/bin下。

                                  具體使用方法:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/mediastreamsegmenter.1.html

                            2)使用命令

                                  /usr/bin/mediastreamsegmenter  -s 3 -t 5 -D -f /usr/frank/stream 127.0.0.1:8000

                                  判斷是否成功分片:如果終端顯示 : Finalized 存儲路徑 file Sequencex.ts,則說明分片成功了。

                                  說明: 

                                               -s 3  設定index文件中記錄幾個分片。

                                               -t  5 設定多長時間(秒)產生一個分片,默認爲10秒。

                                               -D 刪除過期的分片文件

                                               -f /usr/frank/stream設置存儲分片文件和index文件的文件夾

                                               127.0.0.1:8000 設置獲取ts流的地址

                (4)使用apache提供服務.

                          第一次在mac下使用apache,難免會感到一絲生疏。學習資料:http://hi.baidu.com/hsbd2005/blog/item/7393a84f0017b5c7d1c86ad4.html

                          mac自帶apache.

                          1) 啓動

                              使用命令:sudo apachectl start, 然後在瀏覽器中數據localhost進行查看,如果看到It works,說明apache可以正常工作。

                          2) 配置文件

                              配置文件默認路徑爲 /etc/apache2/httpd.conf(對於文本的編輯,可以用 (vi 文件路徑),也可以用(sudo open -a TextEdit.app 文件路徑)).

                              可以看到 DocumentRoot  "/Library/WebServer/Documents",也就是說,這是存放資源的默認路徑。

                           3) 進入 /Library/WebServer/Documents, 建立文件夾httpstream,

                               將mediastreamsegmenter的輸出指向這裏:  

                                           /usr/bin/mediastreamsegmenter  -s 3 -D -f /Library/WebServer/Documents/httpstream 127.0.0.1:8000

                              在瀏覽器中輸入localhost/httpstream/prog_index.m3u8,如果能夠看到分片文件的列表,就說明成功了一半。    

                           4) 寫腳本文件,在Library/WebServer/Documents/下創建一個index.html文件,具體內容如下:

<html> 

    <head> 

   <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>

           </head> <body style="background-color:#FFFFFF; "> 

    <body>

                    <center> <video src="192.168.1.109/httpstream/prog_index.m3u8" controls autoplay ></video> </center>

     </body> 

</html>

(5) 直播效果

           在safari中輸入鏈接http://192.168.1.109/index.html,觀看直播。   

            畫質很差,可能是一些參數設得不夠好。


轉載自 http://blog.csdn.net/nmgfrank/article/details/6955105

發佈了74 篇原創文章 · 獲贊 24 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章