obs-studio模塊分析與源碼編譯

一:直播簡介

? ? ? ? 在線教育,娛樂直播等近幾年已是遍地開花鸠儿,其中核心脫離不了低延時音視頻技術进每。我們拋開互動技術不談腐巢,來了解一下視頻直播技術冯丙。

直播大致流程如下圖:

? ? ? 采集: 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麻掸,很快就完成了直播功能。當然自己也可以搭建一個SRS服務器脊奋,實現(xiàn)一個簡單的內容分發(fā)起胰。這樣觀看端使用網(wǎng)頁就可以觀看了地消。

二:obs功能介紹

支持類似于導播臺一樣的多場景切換。且同一場景中,可添加多個資源,每個資源可變換大小嗦随、位置、層級等。

輸入:

支持多資源類型盯质。如視頻,圖片(包括gif圖)破镰,音樂集惋,文本(包括中文),窗口捕捉,桌面共享胶惰,攝像頭等鸯匹。(也可以自己加入裸數(shù)據(jù):如pcm匿级,yuv,rgb等)

支持游戲畫面抓取(游戲抓取多用d3d繪制行施,直接GDI抓屏很多時候抓取到的是黑色,但是使用hook api就會解決這個問題)

處理:

支持圖像濾鏡,如亮度划乖,色度,飽和度調節(jié),摳像等蚊夫。當然我們自己也可以加入磨皮美顏等功能琅轧。后面會講到。

支持音頻濾鏡剩檀,如降噪甥绿,增益等士复。

支持多路混音,媒體資源聲音,系統(tǒng)聲卡聲音盔粹,麥克風聲音等进萄,多路混音只祠。

輸出:

支持rtmp推流

支持本地錄制flv晶府, mp4(軟鳞绕,硬編碼都有)

支持裸數(shù)據(jù)輸出(pcm冤竹,yuv,rgb)望浩。

三:obs模塊介紹

核心庫

libobs: ? obs的核心庫啦吧,其他的插件都基于他的基礎上在孝,同時它也會操作管理各個插件資源造垛。就好像爪子一樣奔脐,伸向各個地方,暫且可以這么理解拴曲。

基礎庫

glad ?對OpenGL函數(shù)的封裝 ?使用?dlopen和dlsym是用于打開動態(tài)鏈接庫中的函數(shù),將動態(tài)鏈接庫中的函數(shù)或類導入到本程序中革砸,為了解決 沒有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有關復用的函數(shù)

下面三個模塊使用hook技術贷腕,共同完成游戲畫面的抓取

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壓力亿鲜,同時提高渲染效率與質量。 使用著色器語言渲染(定點和片著色器冤吨,分別控制位置矢量和色值蒿柳,感興趣的同學可以詳細了解一下)。gpu映射

libobs-d3d11

libobs-opengl

obs-ffmpeg: nvenc(N卡硬編)漩蟆,aac編碼垒探,復用,以及編碼怠李,解碼流程控制等圾叼。

obs-filters: ?圖像濾鏡(如亮度仔引,色度,飽和度調節(jié)褐奥,摳像等)

obs-outputs: 輸出模塊(如寫錄制文件flv咖耘,rtmp調用控制等)

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: ?對聲音輸入(麥克風等)輸出(揚聲器等)設備的抓取

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的內容并不會自動下載下來的)

如果有內容執(zhí)行git?submodule?update?--init


2:安裝VS2013 Update4及以上输钩。安裝Qt 以及相應的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 并設置編譯選項。

其中依賴的庫和頭文件需要點擊 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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子他爸,更是在濱河造成了極大的恐慌聂宾,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诊笤,死亡現(xiàn)場離奇詭異系谐,居然都是意外死亡,警方通過查閱死者的電腦和手機讨跟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門纪他,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晾匠,你說我怎么就攤上這事茶袒。” “怎么了凉馆?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵薪寓,是天一觀的道長。 經(jīng)常有香客問我澜共,道長预愤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任咳胃,我火速辦了婚禮植康,結果婚禮上,老公的妹妹穿的比我還像新娘展懈。我一直安慰自己销睁,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布存崖。 她就那樣靜靜地躺著冻记,像睡著了一般。 火紅的嫁衣襯著肌膚如雪来惧。 梳的紋絲不亂的頭發(fā)上冗栗,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音供搀,去河邊找鬼隅居。 笑死,一個胖子當著我的面吹牛葛虐,可吹牛的內容都是我干的胎源。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼屿脐,長吁一口氣:“原來是場噩夢啊……” “哼涕蚤!你這毒婦竟也來了宪卿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤万栅,失蹤者是張志新(化名)和其女友劉穎佑钾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烦粒,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡次绘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了撒遣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邮偎。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖义黎,靈堂內的尸體忽然破棺而出禾进,到底是詐尸還是另有隱情,我是刑警寧澤廉涕,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布泻云,位于F島的核電站,受9級特大地震影響狐蜕,放射性物質發(fā)生泄漏宠纯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一层释、第九天 我趴在偏房一處隱蔽的房頂上張望婆瓜。 院中可真熱鬧,春花似錦贡羔、人聲如沸廉白。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猴蹂。三九已至,卻和暖如春楣嘁,著一層夾襖步出監(jiān)牢的瞬間磅轻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工逐虚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留聋溜,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓痊班,卻偏偏與公主長得像勤婚,于是被迫代替她去往敵國和親摹量。 傳聞我的和親對象是個殘疾皇子涤伐,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容