最近,需要將蘋果的HTTP Live Streaming系統搭建起來。完全沒有頭緒,故第一步就是學習。
一、學習資料
官網資料
具體的搭建方案
使用segmenter將現成的視頻文件分割,並生成列表文件。
1. http://blog.csdn.net/zhoujunming/article/details/6694730
二、使用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),然後進行對兩類參數進行設置。
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下。
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,觀看直播。
畫質很差,可能是一些參數設得不夠好。