這個應(yīng)用主要是將HTTP的串流(非HLS或DASH)轉(zhuǎn)換成RTMP協(xié)議傳送到Adobe Flash Media Server或Wowza Media Server的媒體服務(wù)器。
根據(jù)維基百科: “Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of the protocol for public use.”
RTMP的協(xié)議有以下的參數(shù):
- RTMP: 其原始采用TCP port 1935
- RTMPS: 將RTMP加載到SSL的安全機制,就類似HTTPS。
- RTMPE: 采用Adobe所提供給RTMP所發(fā)展的加密版本。
- RTMPT: 在RTMP上加掛he RTMP protocol 封裝在HTTP請求中,可以穿越防火牆。這是一個很不錯的協(xié)議,使用TCP端口80和443繞過公司對防火牆。封裝的會話可能攜帶純RTMP,RTMPS或RTMPE包內(nèi)。
RTMP 串流
VLC 在2.0.x版本里可以支持RTMP協(xié)議。不過,有些環(huán)境卻沒法執(zhí)行,例如2.0.2, 2.0.3, 2.0.4, 2.0.6在Windows 2008 Server 64的服務(wù)器上確實沒法執(zhí)行??梢蚤_啟VLC然后開啟網(wǎng)絡(luò)串流,如“RTMP://aaa.bbb.com:1935/live/串流源“,看看可否開啟。主要是VLC 2.0.x采用 ffmpeg/libav的程序庫,但是, 有的包裝卻沒法支持。所以必須先做確認。當 librtmp 的支持被啟動于 ffmpeg/libav 則RTMPS才可以有功用。
VLC和RTMP的情形主要是用來捕獲和轉(zhuǎn)碼應(yīng)用程序生成一個單一的流。是通過另一個應(yīng)用程序分配給多個客戶端。這在Wowza是非常重要的。雖然,Wowza也支持VLC采用UDP/RTP/RTSP方式接收串流,但是,很多情況下是很不穩(wěn)定的。
LC直接連接到一個的RTMP串流,如WOWZA,不聽傳入的請求。因此,它是不可能的,以查看的RTMP流直接從VLC。您需要連接到WOWZA,觀看流。這是可以用VLC做到的:
$ vlc rtmp://rtmp.server.com:1935/path/to/stream
有件事必須提醒的。從VLC將RTMP串流傳送給Wowza服務(wù)器并不是都很穩(wěn)定的。有一些時間關(guān)系的“蟲”會造成Wowza關(guān)閉連線。 這樣的問題都是與“音頻”與”視頻“時間戳(Timestamp)有關(guān)系的。采用“audio-desync” 選項來整合RTMP也不是個好點子,但是, 可以不斷調(diào)整與修改。
Webcam RTMP streaming
以下是有關(guān)webcam的應(yīng)用。其他的有采集裝置、設(shè)備、視頻文檔等應(yīng)用。
Windows 的范例
在windows的采集裝置都是利用DirectShow這個界面的。在VLC的模塊也是用這樣的界面,成為“DirectShow“或”dshow”。以下是范例:
$ vlc dshow://"" --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'
DirectShow選項也可在QT界面里采用
Linux 的范例
通常在Linux的採集裝置上都是採用“video for linux” (v4l2)這個界面。使用指令方式來采集webcam裝置(或稱為”v4l2 裝置”)送出RTMP串流的范例如下:
$ vlc v4l2:// --v4l2-fps=25 --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'
這個例子可以自動偵測 v4l2 裝置并且選擇第一個裝置來采集訊號。其他的參數(shù)選項如視頻標準(PAL, NTSC)、Chroma、寬度、長度等等可以自行設(shè)置。必須要注意的是,這些參數(shù)設(shè)置跟本身的設(shè)備有關(guān)。 當我門使用debug模式 (-vvv),VLC自身的video for linux (v4l2) 模塊會顯示出執(zhí)行時所出現(xiàn)的數(shù)值訊息。v4l2 模塊提供以下可作為優(yōu)化的選項:
- –v4l2-dev=: 指定所要采集的特定裝置
- –v4l2-standard=: 使用哪種視頻標準,例如: SECAM, PAL, NTSC and more
- –v4l2-width=: 視頻呈現(xiàn)的寬度(in pixels)
- –v4l2-height=: 視頻呈現(xiàn)的長度度(in pixels)
以上是描述有關(guān)v4l2的參數(shù)選項。完整的v4l2模塊訊息,可以利用下面的指令查詢。
$ vlc -H -p v4l2 --advanced
以下是另一個將http串流轉(zhuǎn)碼(transcode)到RTMP給Adobe Flash Media Server或Wowza Media Server等視頻服務(wù)器
cvlc -I dummy http://orginalstreamIPaddress:50014 --sout-mux-caching=5000 --sout='#transcode{venc=x264{keyint=60},vcodec=h264,vb=800}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://destinationIPaddress:1935/live/StreamFile}}' &
這是用ffmpeg的方法:
ffmpeg -i http://OriginalIPAddress:50010 -vcodec libx264 -vb 800k -acodec libfaac -ab 64k -f flv rtmp://DestinationIPAddress:1935/live/StreamFile
有關(guān)更詳細的訊息,可以參考這些網(wǎng)站:www.ffmpeg.org, Ubuntu FFMPEG Discussion, and Zeranoe Build website