標籤:
http://blog.csdn.net/huangtaishuai/article/details/9836581
本文說明如何在 CentOS 6 伺服器(無圖形介面)搭建以 VLC 為核心的直播流媒體伺服器。
第一步,安裝第三方 yum 源。因為官方 yum 源中是不包含 VLC 安裝包的,為了不用考慮安裝包之間的依賴關係,使用第三方yum源的 yum 安裝方式,能極大地簡化 vlc 的安裝過程,將主要精力集中到如何使用 VLC 功能來搭建流媒體伺服器。
(如果不想使用 yum 安裝的,請自行登入 vlc 的官方網站,下載二進位安裝包或者原始碼參考官方文檔進行安裝,這裡就不複述了。)
1、下載 RPMForge 知名第三方源的 rpm 安裝包(64位系統請下載 rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm)
- wget packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
2、匯入 GPG key
- rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
3、安裝 rpm 安裝包
- rpm -i rpmforge-release-0.5.2-2.el6.rf.i686.rpm
4、更新安裝源
- yum check-update
5、安裝 vlc
- yum install vlc
更多詳細資料,請移步:http://wiki.centos.org/AdditionalResources/Repositories/RPMForge
第二步,使用 VLC 功能搭建直播流媒體伺服器。(點播沒有什麼好談的,搭建一個 http 伺服器即可,和 VLC 沒有什麼太大關係,只是可以把媒體檔案先用 vlc 轉碼成流媒體格式後,再放在 http 伺服器中)
【UDP方式】
文法:
vlc input_stream --sout ‘#std{access=udp{ttl=1},mux=ts,dst=dest_ip:dest_port}‘
舉例:(假設在伺服器目錄中有媒體檔案 pikesi.mkv,播放用戶端的 IP 為 192.168.1.77)
- vlc -I "dummy" -L --no-inhibit pikesi.mkv --sout ‘#std{access=udp{ttl=1},mux=ts,dst=192.168.1.77:1234}‘
說明:
在 IP 為 192.168.1.77 的用戶端開啟 vlc 播放器,選擇“開啟網路串流”,輸入 URL,udp://@:1234/ 即可播放。
-I "dummy" 表示不使用任何本地播放或控制介面,因為沒有圖形介面本地無法播放。
-L 表示迴圈,當媒體檔案播放完後,迴圈重新播放。
--no-inhibit 表示禁用電源控制。此為案頭環境功能,預設開啟,如果不強制關閉,會導致與 D-Bus 通訊失敗,vlc 無法啟動。
UDP推流的方式,只能用單播或者組播的方式往指定地址推送流,不用用戶端請求。(HTTP方式會監聽使用者請求,根據請求的使用者點對點推流)
【HTTP方式】
文法:
vlc input_stream --sout ‘#http{mux=ts,dst=:listen_port}‘
或者
vlc input_stream --sout ‘#std{access=http{user=username,pwd=password},mux=ts,dst=:listen_port}‘
舉例:
- vlc -I "dummy" -L --no-inhibit pikesi.mkv --sout ‘#std{access=http{user=k3,pwd=k3},mux=ts,dst=:6000/live.ts}‘
說明:(假設伺服器IP地址為 192.168.1.6 )
用戶端播放器開啟 URL,http://k3:[email protected]:6000/live.ts,即可播放。
如果伺服器啟動代碼中去掉 {user=k3,pwd=k3},即用戶端播放時不需要 HTTP 認證。
【轉碼】
媒體檔案可能本身不是流媒體格式,這個時候需要轉碼再串流。舉例:
- vlc -I "dummy" -L --no-inhibit pikesi.mkv --sout ‘#transcode{vcodec=h264,vb=800,fps=50,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:std{access=http,mux=ts,dst=:6000}‘
在實際測試中發現一個問題,在 Linux 下對 rmvb 轉碼會沒有聲音(Windwos 下正常)。可能是 Linux 版本的 VLC 不能對 realplay cook audio 格式解碼的原因(有時間可以安裝一個案頭的 Linux 環境進行驗證,據說需要在編譯 FFMpeg 時開啟某些功能選項)。
【UDP流輸入的HTTP串流】
輸入資料流不一定非要是檔案,也可以是網路流,比如前面的UDP流。
比如,首先往本地連接埠 1234 推送 UDP 流:
- vlc pikesi.mkv -I "dummy" -L --no-inhibit --sout ‘#std{access=udp{ttl=1},mux=ts,dst=localhost:1234}‘
然後,將 input_stream 改為網路地址,進行 http 串流:
- vlc -I "dummy" --no-inhibit udp://@:1234 --sout ‘#std{access=http,mux=ts,dst=localhost:6000}‘
最後,用戶端參考“HTTP方式”播放流媒體。
====================================
注意事項:
1、注意防火牆允許存取相應連接埠。
2、不要重用連接埠。每個 http 方式的串流都必須使用一個獨立的連接埠。
3、vlc 不能用 root 使用者運行,如果設定開機自啟動,可以在設定檔使用這種方式:(假設有使用者名稱 sowell)
su sowell -c "vlc ... &"
Linux 下搭建流媒體伺服器