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