針對很多網友對于視訊聊天室軟體如何實作這一塊不懂,今天我們杭州雅顧視訊聊天室服務商就來為大家詳細的談談我們視訊聊天室開發的了解:
我們的流水線
1.采集: win下用vfw的api可以采集到usb攝像頭的原始資料(RGB或者YUV的),如果是特别的攝像頭,肯定會自帶sdk,同樣能得到這種資料。
2.編碼壓縮:視訊一般都壓縮一下,不然太大了,網絡部好傳。現在多用H.264,可以找開源庫x264完成視訊編碼。如果攝像頭能直接出來這種資料 那這步就省了。視訊編碼一般要I420的資料,可以用ffmpeg裡的swscale轉換一下顔色空間,它還可以拉伸圖像,改變分辨率,效率不錯
3.網絡傳輸:這部分無非實作tcp、udp傳輸的功能,把視訊資料能發出去及可收回來。如果想做的通用一些,可以用視訊會議常用的一個協定SIP,找一個開源庫,如resiprocate(龐大的工程)
4.視訊解碼:資料收到後需要解碼才能顯示,H.264解碼多用ffmpeg
5.顯示:win api可以用BitBlt或者DrawDibDraw實作,需要BGR的資料,可能要用ffmpeg的swscale轉換一下顔色空 間。也可以考慮用D3D(以前用DDraw)實作,一般可以直接顯示I420或者YV12的資料,想跨平台可以考慮用opengl。
在windows 平台上directshow技術依然是最強大的,雖然從vista開始microsoft 推出media foundation,但是media foundation依然還達不到directshow是高度。
directshow 老版本在DxSDK中,後面獨立出來,再後來directshow被放到windows SDK,是以開發directshow應 用,你必須安裝這兩個SDK中的一個(兩個都是免費的)。streams.h是放在“\DXSDK\Samples\C++\DirectShow \BaseClasses”目錄下,你的工程需要包含此頭檔案目錄。
對于視訊功能的實作你可以參照directshow sample code—amcap的實作,與BaseClasses在同一目錄。
首先是枚舉PC上的視訊裝置,然後将視訊裝置綁定source filter,接下來選擇合适的filter建構 filter graph。這樣你就實作視訊功能了。