1. 程式人生 > >vlc的流輸出功能

vlc的流輸出功能

spl ron ati reads 視頻編碼 with 者視頻 esc ucc

vlc的流輸出功能

流輸出功能,可以將vlc讀取到的流,輸出到文件或者通過網絡發送,客戶端可以使用http、rtp、rtsp等協議訪問,還可以進行轉碼等操作。

參考http://wiki.videolan.org/Documentation:Streaming_HowTo

流輸出語法

  1. % vlc input_stream --sout "#module1{option1=parameter1{parameter-option1},option2=parameter2}:module2{option1=...,option2=...}:..."

也可以使用下面的語法

  1. % vlc input_stream --sout-module1-option1=... --sout-module1-option2=... --sout-module2-option1=... --sout-module2-option2=... ...

1.standard模塊(std)

example:

vlc test.mp4 -vvv --loop --sout "#standard{access=http,mux=ts,dst=192.168.9.80:10086/stream}"

將文件使用http協議發送到網絡,使用ts封裝,客戶端使用http://192.168.9.80:10086/stream訪問

關於standard的必選項

access,輸出的協議。file(保存到文件)、udp、http、https、mmsh(使用微軟的mms協議,僅支持基於http的mms協議)

mux,輸出復用器。支持ts、ps、mpeg1、ogg、asf、asfh、avi、mpjpeg

dst,輸出目的地址,如果access=file,就是保存的文件路徑及文件名

對於某些視頻,使用上面示例中的命令參數時,vlc接收端只能聽見音頻,消息中顯示的錯誤日誌如下 :

ts error: MPEG-4 descriptor not found

  1. packetizer_mpeg4audio info: AAC channels: 2 samplerate: 44100
  2. avcodec info: obtained IDirect3DDeviceManager9
  3. avcodec info: DXVA2CreateVideoService Success!
  4. avcodec error: DxFindVideoServiceConversion failed

但是使用mux=asf後,卻能夠正常播放

vlc test.mp4 -vvv --loop --sout "#standard{access=http,mux=asf,dst=192.168.9.80:10086/stream}"

這個問題與mp4文件格式有關,待解決。

2.rtp模塊

使用rtp協議發送數據,也支持rtsp

example:

1)生成sdp文件

  1. vlc.exe test.mp4 -vvv --loop --sout "#rtp{dst=92.168.9.80,sdp=file:///E:/stream.sdp}"

啟動rtp傳輸,該命令生成一個sdp的描述文件stream.sdp,將其copy到客戶機上,就可以使用vlc進行播放了,dst指定客戶端的ip。

2)使用rtsp進行傳輸

  1. vlc.exe test.mp4 -vvv --loop --sout "#rtp{sdp=rtsp://192.168.9.80:10086/stream}"

客戶端面直接使用rtsp://192.168.9.80:10086/stream即可訪問

3.es模塊

es模塊可以從stream中分離出不同的elementary streams,保存為不同的文件或者發送到不同的目的地址。

example:

  1. vlc.exe test.mp4 -vvv --no-loop --sout "#es{access=file, dst-video=e:/video_%d.%c, dst-audio=e:/audio_%d.%c}"

提取文件中的音視頻,並保存到文件中。--no-loop表示不用循環,%d代表流的track號,%c表示 編碼的FOURCC。

4.transcode模塊

transcode模塊用於轉碼, 也可以完成一些附加的功能re-scaling, deinterlacing, resampling,crop等,除了音視頻外還可以處理字幕,疊加圖片到視頻

支持的編碼格式參考:http://www.videolan.org/streaming-features.html

example:

按指定參數進行音視頻轉碼,並保存為avi文件,後面級聯standard模塊完成文件保存功能

  1. vlc.exe test.mp4 -vvv --sout "#transcode{vcodec=h264, vb=300, venc=x264, fps=15, width=352, height=288, acodec=mp3, aenc=ffmpeg, samplerate=44100, threads=2}:standard{access=file,mux=avi,dst=e:/test.avi}

venc,指定視頻編碼器,支持ffmpeg、x264、theora,可以進一步指定編碼的詳細參數

aenc,指定音頻編碼器,支持ffmpeg、vorbis、speex

threads,指定編碼時線程數據,多核時可以提高效率

5.duplicate模塊

duplicate模塊可以復制stream,以用於不同的chains。

example:

  1. vlc.exe test.mp4 -vvv --sout "#duplicate{dst=standard{access=file,mux=avi,dst=e:/test.avi}, dst=rtp{dst=192.168.9.80,name=stream,sdp=rtsp://192.168.9.80:10086/stream}, dst=display}"

通過dumplicate模塊得到3個輸出,保存為*.avi、發送到rtsp server、本地顯示

dumplicate還有一個select選項,用於選擇處理的stream

其它說明:

1.默認情況下,vlc只會處理第一個音頻和視頻流,可以使用--sout-all選項,處理所有的流

2.--no-sout-audio,--no-sout-video選項可以禁止輸出音頻或者視頻

3.更多示例見http://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples

vlc的流輸出功能