vlc的應用:用vlc串流攝像頭

Just4life發表於2014-02-26

 原文出處: http://jeremiah.blog.51cto.com/539865/245509

    n就沒有更新部落格了,主要是Jeremiah最近對vlc研究的非常的少了,工作重點轉移了,又增加了管理工作,讓Jeremiah忙的暈頭轉向的。

    這篇部落格是很久之前就想寫的,今天終於提筆寫了,心情還是比較爽的。廢話不多說。
0. 環境搭建
Jeremiah這次主要是用的vlc-1.0.0(英文版)進行講解。首先需要準備攝像頭,Jeremiah用的是一個普通攝像頭(以前釣MM用的,嘻嘻),驅動安裝好後,在“我的電腦”中顯示如下。
1. vlc播放攝像頭
開啟vlc-1.0.0,media->open capture device,進入Capture Device頁面。這個也可以通過media->Advanced open file,選取此標籤頁。
video device name選擇VIMICRO USB PC Camera (ZC0301PLH),如果沒有,請先選擇Refresh list重新整理列表。
audio device name選擇SoundMAX HD Audio,這個是Jeremiah的音效卡。

之後可以勾選show more options,裡面可是設定緩衝及看到MRL和Edit Options,這些資訊都是很重要的。Advance Option按鈕裡面有一些詳細設定,大家可以進去選擇,其中video size是可以做調整的。下面會講到。

之後點play,就可以播放了。
2. 用命令列開啟vlc播放攝像頭
命令列的最大好處就是,vlc命令後面的引數,就是我們在程式設計的時候呼叫libvlc_new的argv,將這些引數搞明白,我們就可以在程式設計的時候呼叫了。

開啟cmd,切換到vlc目錄下。

根據1中的MRL和Edit Options資訊,設定vlc播放引數如下。
vlc dshow:// :dshow-vdev="VIMICRO USB PC Camera (ZC0301PLH)" :dshow-adev="SoundMAX HD Audio" :dshow-size=320*240
各個引數什麼意思都是很明顯的,如果不明白,就執行vlc -H,然後到vlc目錄下面去找vlc-help.txt,裡面是全部的引數的介紹。
3. 將vlc播放的攝像頭資訊存入檔案中
播放成功之後,在達到我們的目的前,我們先做一個簡單的驗證工作,就是播放攝像頭並存入檔案。

根據以前stream到檔案的引數,修改2的引數如下。
vlc dshow:// :dshow-vdev="VIMICRO USB PC Camera (ZC0301PLH)" :dshow-adev="SoundMAX HD udio" :dshow-size=320*240 :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mp3,ab=128,channels=2,samplerate=44100}:std{access=file,mux=ts,dst=D:/01.ts}}
這裡用到了轉碼,就是將攝像頭的視訊編碼為h264,音訊編碼為MP3,然後封裝為ts寫入到d:/01.ts中。

這個不會顯示攝像頭,但是通過重新整理d:/01.ts就會發現這個檔案是在增大的,也就是有視訊流在寫入。
4. 將攝像頭串流到網路中
根據3的引數做簡單的修改就可以達到串流攝像頭視訊流到網路的目的了。修改3的引數如下。
vlc dshow:// :dshow-vdev="VIMICRO USB PC Camera (ZC0301PLH)" :dshow-adev="SoundMAX HD Audio" :dshow-size=320*240 :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mp3,ab=128,channels=2,samplerate=44100}:duplicate{dst=display,dst=rtp{dst=127.0.0.1,mux=ts,port=1234}}
這裡的duplicate大家應該都很熟悉了,因為在錄影,vlm裡面都講過這個引數。引數的意思是,將攝像頭的音視訊流分別編碼為MP3和h264之後封裝為ts,然後通過rtp傳送到127.0.0.1的1234埠上,同時顯示出來。如果希望傳送到其他網路地址或組播裡面只需要改變127.0.0.1和1234為我們需要的地址和埠即可。

再開啟一個vlc,播放這個ts over rtp流。
vlc rtp://@:1234 --rtp-caching=1500
成功後就可以看到了。切圖如下:
左邊的是攝像頭的流服務,右邊的是流的客戶端,從下邊的地址就能看的很清楚。
5. 遺留問題:
從圖片可以看出,播放的視訊顏色是不對的,是攝像頭的問題還是vlc本身的問題還是引數設定的問題,現在不得而知,當然攝像頭本身是沒問題的,因為qq視訊都很正常。希望誰研究出來告訴我一聲。謝謝。

相關文章