obs-studio模塊簡介與源碼編譯
- 2018-04-11 17:31:00
- admin
- 轉(zhuǎn)貼:
- CSDN
- 14839
采集: Windows(dshow,dsound), ios,mac(AVFoundation,AVCaptureSesssion), android(Camera,AudioRecord),Linux(v4l2)
音視頻原始數(shù)據(jù):audio(pcm),video(yuv,rgb)
美顏:Gpuimage(移動端)
編碼:audio(AAC),video(x264)
rtmp協(xié)議:librtmp
CDN:藍汛,網(wǎng)宿等
解碼:audio(faad),video(ffmpeg)
渲染:d3d, opengl,opengles(移動端)
我們在這里介紹一個功能很全的推流工具obs。斗魚直播,bilibili等都使用了obs。它支持win,mac, linux三個平臺。
用obs推流到主流CDN,很快就完成了直播功能。當然自己也可以搭建一個流媒體服務(wù)器,比如AokuMediaServer服務(wù)器,實現(xiàn)一個簡單的內(nèi)容分發(fā)。這樣觀看端使用網(wǎng)頁就可以觀看了。
二:obs功能介紹
支持類似于導(dǎo)播臺一樣的多場景切換。且同一場景中,可添加多個資源,每個資源可變換大小、位置、層級等。
輸入:
支持多資源類型。如視頻,圖片(包括gif圖),音樂,文本(包括中文),窗口捕捉,桌面共享,攝像頭等。(也可以自己加入裸數(shù)據(jù):如pcm,yuv,rgb等)
支持游戲畫面抓?。ㄓ螒蜃ト《嘤胐3d繪制,直接GDI抓屏很多時候抓取到的是黑色,但是使用hook api就會解決這個問題)
處理:
支持圖像濾鏡,如亮度,色度,飽和度調(diào)節(jié),摳像等。當然我們自己也可以加入磨皮美顏等功能。后面會講到。
支持音頻濾鏡,如降噪,增益等。
支持多路混音,媒體資源聲音,系統(tǒng)聲卡聲音,麥克風聲音等,多路混音。
輸出:
支持rtmp推流
支持本地錄制flv, mp4(軟,硬編碼都有)
支持裸數(shù)據(jù)輸出(pcm,yuv,rgb)。
三:obs模塊介紹
核心庫
libobs: obs的核心庫,其他的插件都基于他的基礎(chǔ)上,同時它也會操作管理各個插件資源。就好像爪子一樣,伸向各個地方,暫且可以這么理解。
基礎(chǔ)庫
glad 對OpenGL函數(shù)的封裝 使用 dlopen和dlsym是用于打開動態(tài)鏈接庫中的函數(shù),將動態(tài)鏈接庫中的函數(shù)或類導(dǎo)入到本程序中,為了解決 沒有l(wèi)ib庫,只有dll庫的尷尬情況。這種方法在obs中很多地方用到,例如:vlc插件的加載。
ipc-util 進程間通信,主要封裝了pipe管道的實現(xiàn),用于在hook 游戲進程時,傳遞原始畫面數(shù)據(jù),所以用到。
jansson 用于編碼,解碼和操作JSON數(shù)據(jù)
w32-pthreads: 開源庫,Windows下的pthread線程庫
ffmpeg-mux: 封裝了ffmpeg有關(guān)復(fù)用的函數(shù)
下面三個模塊使用hook技術(shù),共同完成游戲畫面的抓取
graphices-hook: 鉤子庫實現(xiàn),用于獲取其他進程的圖像數(shù)據(jù)。
inject-helper : 將graphices-hook注入到其他進程。
get-graphices-offsets: 注入庫時,通過虛表偏移獲取d3d8,d3d9,dxgi的函數(shù),從而實現(xiàn)API重定向,即用自己的函數(shù)替換原本的函數(shù)。
當然還需依附進程間通信,在win-capture中,使用pipe實現(xiàn)。
兩種顯卡渲染的實現(xiàn),使用gpu,解放cpu壓力,同時提高渲染效率與質(zhì)量。 使用著色器語言渲染(定點和片著色器,分別控制位置矢量和色值,感興趣的同學可以詳細了解一下)。gpu映射
libobs-d3d11
libobs-opengl
obs-ffmpeg: nvenc(N卡硬編),aac編碼,復(fù)用,以及編碼,解碼流程控制等。
obs-filters: 圖像濾鏡(如亮度,色度,飽和度調(diào)節(jié),摳像等)
obs-outputs: 輸出模塊(如寫錄制文件flv,rtmp調(diào)用控制等)
obs-transitions: 場景間切換時的過渡效果
obs-x264: x264編碼器
rtmp-services: rtmp推流
obs-qsv11: intel 硬件編碼,效果好于軟編和N卡硬編
obs-text: GDI+渲染文字
text-freetype2: 開源字體引擎,支持多種格式,較GDI+更高效,渲染效果也更好。
win-capture: 窗口、顯示器、游戲(涉及到進程間通信)捕捉
win-dshow: 攝像頭采集
win-decklink: 針對decklink采集卡的抓取
win-wasapi: 對聲音輸入(麥克風等)輸出(揚聲器等)設(shè)備的抓取
image-source: 圖片資源(包括動態(tài)圖),可多張圖幻燈片放映。
obs: Qt實現(xiàn)的界面展示。
四:編譯
廢話不多說,我們先將源碼編譯通過,大家看效果。
下面以windows為例
1:先從官網(wǎng)下載OBS源碼
git clone –recursivehttps://github.com/jp9000/obs-studio.git
git sub 查看工程是否帶有submodule(clone 時submodule的內(nèi)容并不會自動下載下來的)
如果有內(nèi)容執(zhí)行g(shù)it submodule update –init
2:安裝VS2013 Update4及以上。安裝Qt 以及相應(yīng)的qt vs插件。
3:下載依賴庫dependencies.zip。
里面包含F(xiàn)FMpeg, x264,Qt5,Curl, Opus,ogg,vorbis, vpx等
http://code.fosshub.com/OBS/downloads
如果下載不了,可到
http://download.csdn.net/detail/balijinyi/9890716 下載。
4:下載Windows上的cmake.
5:運行cmake-gui.exe 并設(shè)置編譯選項。
其中依賴的庫和頭文件需要點擊 Add Entry
到win32即可,同樣添加 Qt路徑QTDIR。點擊Configure。再點擊Generate。即可看到目錄下多了build目錄,里面有很多vs工程。
6:打開 obs-studio.sln 一路編譯即可。
在build下生成rundir目錄,里面存放了生成的庫以及可執(zhí)行程序。obs 主要以加載插件的形式,來實現(xiàn)各種功能。
7:運行obs.exe
我們添加一個視頻資源,畫面如下。其他功能大家可自行摸索。
后續(xù),我們將對源碼展開深入分析。
聯(lián)系人: | 北極星通公司 |
---|---|
電話: | 010-56545416 |
傳真: | 010-82896426 |
Email: | support@bjsin.cn |
QQ: | 35338585 |
微信: | Aoku2017 | QQ群:241759321 |
地址: | 北京市中關(guān)村生命科學園創(chuàng)意園3-3-103 |