me
me copied to clipboard
学习 C++ (Part 4: OBS)
规模
obs-studio
➜ npx cloc .
7907 text files.
5412 unique files.
2639 files ignored.
github.com/AlDanial/cloc v 1.92 T=3.02 s (1791.8 files/s, 326760.6 lines/s)
---------------------------------------------------------------------------------------
Language files blank comment code
---------------------------------------------------------------------------------------
C 1152 58417 59480 274276
C/C++ Header 930 23149 35259 110991
C++ 268 22179 6666 101207
INI 2005 200 0 96073
XML 39 17 41 42235
m4 18 1406 1946 16362
Qt 36 0 0 15594
CMake 175 3099 2297 14395
...
关键目录:
- libobs: 8万行C
- libobs-d3d11: 5000行C++
- libobs-opengl: 6000行C
- libobs-winrt: 700行C++
- plugins: 18万行C, 5万行C++
- UI: 7万行C++
主要以libobs, UI和plugins三个部分为主。
起始的0.2.4 (May 2014), 差不多10万行C, 2000行Qt
- libobs: 20000行C
- plugins: 13000行C
- obs (UI): 3000行C++,2000行Qt
相关项目规模:
- ffmpeg: 100万行C, 11万行C++
- opencv: 100万行C++, 20万行C
- srs: 37万行C, 21万行Go
- ZLMediaKit: 7万行C++
编译

M1 因为无法编译luajit, 所以只能看看代码。根据网上的文章,OBS的架构如下图:
MacOS的framework如下,和Windows还是有很大的差异:
Chromium Embedded Framework.framework
OBS Helper (GPU).app
OBS Helper (Plugin).app
OBS Helper (Renderer).app
OBS Helper.app
QtCore.framework
QtDBus.framework
QtGui.framework
QtMacExtras.framework
QtNetwork.framework
QtPrintSupport.framework
QtSvg.framework
QtWidgets.framework
QtXml.framework
Sparkle.framework
ali_rts_sdk.dylib
libRtsSDK.dylib
libavcodec.58.dylib
libavdevice.58.dylib
libavfilter.7.dylib
libavformat.58.dylib
libavutil.56.dylib
libfreetype.6.dylib
libjansson.4.dylib
libluajit-5.1.2.1.0.dylib
libmbedcrypto.2.24.0.dylib
libmbedtls.2.24.0.dylib
libmbedx509.2.24.0.dylib
libobs-frontend-api.dylib
libobs-opengl.so
libobs-scripting.dylib
libobs.0.dylib
libpostproc.55.dylib
librnnoise.0.dylib
libspeexdsp.1.dylib
libswresample.3.dylib
libswscale.5.dylib
libx264.161.dylib
- 从lib来看主要分为: Qt, ffmpeg, codec以及obs自身几个部分。
plugin体系分为4个类型:
- obs_source_info: 输入
- obs_output_info: 输出
- obs_encoder_info: 编码
- obs_service_info: 推流
OBS的关键流程
OBS的数据流程