me icon indicating copy to clipboard operation
me copied to clipboard

学习 C++ (Part 4: OBS)

Open nonocast opened this issue 2 years ago • 0 comments

规模

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的架构如下图:

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自身几个部分。

obs插件设计

plugin体系分为4个类型:

  • obs_source_info: 输入
  • obs_output_info: 输出
  • obs_encoder_info: 编码
  • obs_service_info: 推流

OBS的关键流程

OBS关键流程

OBS的数据流程

obs数据流程

参考阅读

nonocast avatar Apr 20 '22 20:04 nonocast