👻

【失敗記事】OBSでFDK-AAC入れたい人生だった【供養】

2023/09/27に公開

警告

この記事は、供養失敗記事です。

この記事見ても、出来なかった以外に、何も得るものはありません。

多分のこの問題への解は、存在せず、この沼は存在すらない可能性が大きいです。

やりたいこと!

OBSでFDK-AACが使いたいというリスナーさんのご要望に応え、やってみた!です。

やったこと

1.PowerShellで下記のコマンドを叩く

& 'C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1'

git clone https://github.com/mstorsjo/fdk-aac.git

cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
cmake --build . --config Release

git clone https://github.com/obsproject/obs-studio.git

2.obs-studio\CMakePresets.jsonの一部を下記の通りに書き換え。

    {
      "name": "windows-x64",
      "displayName": "Windows x64",
      "description": "Default Windows build (x64)",
      "inherits": ["environmentVars"],
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Windows"
      },
      "architecture": "x64",
      "binaryDir": "${sourceDir}/build_x64",
      "generator": "Visual Studio 17 2022",
      "cacheVariables": {
        "OBS_CMAKE_VERSION": {"type": "STRING", "value": "3.0.0"},
        "ENABLE_BROWSER": true,
        "VIRTUALCAM_GUID": {"type": "STRING", "value": "A3FCE0F5-3493-419F-958A-ABA1250EC20B"},
        "GPU_PRIORITY_VAL": {"type": "STRING", "value": "$penv{GPU_PRIORITY_VAL}"},
        "ENABLE_CCACHE": false,
        "CMAKE_PREFIX_PATH": "C:/Users/link/source/repos/obs/fdk-aac" ,
        "ENABLE_LIBFDK": true
      }
    },

3.obs-studio\plugins\CMakeLists.txtの37行目に下記を追加。

add_subdirectory(obs-libfdk)

4.obs-studio\plugins\obs-libfdk\CMakeLists.txtを下記の通りに書き換え。

project(obs-libfdk)

option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)

if(NOT ENABLE_LIBFDK)
  obs_status(DISABLED "obs-libfdk")
  return()
endif()

#find_package(Libfdk REQUIRED)

add_library(obs-libfdk MODULE)
add_library(OBS::libfdk ALIAS obs-libfdk)

target_include_directories(obs-libfdk PUBLIC libobs "C:/Users/link/source/repos/obs/fdk-aac/libAACdec/include" "C:/Users/link/source/repos/obs/fdk-aac/libAACdec/src" "C:/Users/link/source/repos/obs/fdk-aac/libAACenc/include" "C:/Users/link/source/repos/obs/fdk-aac/libAACenc/src" "C:/Users/link/source/repos/obs/fdk-aac/libArithCoding/include" "C:/Users/link/source/repos/obs/fdk-aac/libArithCoding/src" "C:/Users/link/source/repos/obs/fdk-aac/libDRCdec/include" "C:/Users/link/source/repos/obs/fdk-aac/libDRCdec/src" "C:/Users/link/source/repos/obs/fdk-aac/libFDK/include" "C:/Users/link/source/repos/obs/fdk-aac/libFDK/src" "C:/Users/link/source/repos/obs/fdk-aac/libMpegTPDec/include" "C:/Users/link/source/repos/obs/fdk-aac/libMpegTPDec/src" "C:/Users/link/source/repos/obs/fdk-aac/libMpegTPEnc/include" "C:/Users/link/source/repos/obs/fdk-aac/libMpegTPEnc/src" "C:/Users/link/source/repos/obs/fdk-aac/libPCMutils/include" "C:/Users/link/source/repos/obs/fdk-aac/libPCMutils/src" "C:/Users/link/source/repos/obs/fdk-aac/libSACdec/include" "C:/Users/link/source/repos/obs/fdk-aac/libSACdec/src" "C:/Users/link/source/repos/obs/fdk-aac/lbSACenc/include" "C:/Users/link/source/repos/obs/fdk-aac/libSACenc/src" "C:/Users/link/source/repos/obs/fdk-aac/libSBRdec/include" "C:/Users/link/source/repos/obs/fdk-aac/libSBRdec/src" "C:/Users/link/source/repos/obs/fdk-aac/libSBRenc/include" "C:/Users/link/source/repos/obs/fdk-aac/libSBRenc/src" "C:/Users/link/source/repos/obs/fdk-aac/libSYS/include" "C:/Users/link/source/repos/obs/fdk-aac/libSYS/src" )


target_link_libraries(obs-libfdk PRIVATE OBS::libobs "C:/Users/link/source/repos/obs/fdk-aac/build/Release/fdk-aac.lib" )

#set_target_properties(obs-libfdk PROPERTIES FOLDER "plugins" PREFIX "")

#setup_plugin_target(obs-libfdk)

target_sources(obs-libfdk PRIVATE obs-libfdk.c)

set_target_properties_obs(obs-libfdk PROPERTIES FOLDER plugins/obs-libfdk PREFIX "")

5.obs-studio\plugins\obs-libfdk\obs-libfdk.cの10行目を下記の通りに書き換え

#include <aacenc_lib.h>

6.PowerShellで下記のコマンドを叩く

cmake --preset windows-x64
cmake --build --preset windows-x64

何をしたのか?

1番目(PowerShellで下記のコマンドを叩く)は、ごく普通方法だと思います。

2番目は、なぜ、CMakePresets.jsonを書き換えたのかというと、FDK-AACをプログラインとして組み込む場合は、cmakeにENABLE_LIBFDKを入れなければいけないとあるので、書き換えました。
https://obsproject.com/wiki/Building-OBS-Studio

3番目からが、難題です。
公式には、ENABLE_LIBFDKを使えば、libfdkが使えると謡っていますが、これは、間違いです。現状(OBS Studio 29.1.3)では、フラグ建ててもlibfdkのcソースコードのcmakeが動きません。
なので、いい感じなところに、必ずlibfdkが動くように編集しました。

4番目ですが、find_packageは、cmakeを求められて面倒だったので、コメントアウトして、直書きでincludeやlibを指定しました。で、setup_plugin_targetが、またもや難題です。
現状(OBS Studio 29.1.3)のバージョンでは、このsetup_plugin_targetは、動きません。
そもそも、このsetup_plugin_targetは、他のcmakeファイルでも使われていますが、使われているファイルは、legacy(遺産).cmakeという名前のものばかりで、あからさまに使われませんという匂いがします。そして極めつけが、setup_plugin_target内で使われている_setup_plugin_targetを参照しようとするのですが、どこにも_setup_plugin_targetが書かれていないと言う形になっています。

3番目でも怪しかったですけど、この時点で、本格的にヤバい匂いがしてますね。

5番目では、オリジナルではhファイルの参照の前にライブラリ名があるのですが、cmakeファイルの書き方の関係上、前のライブラリ名は要らなくなったので、削除しました。

6番目は、普通にOBSのビルドを行うコマンドです。

結果

結果、obs-studio\build_x64\rundir\RelWithDebInfo\bin\64bitにobs64.exeが作成され、ソフトを使用することが出来ます。
しかし、ログファイル上で、「LoadLibrary failed for '../../obs-plugins/64bit/obs-libfdk.dll': The specified module could not be found.」というエラーが発生しており、fdk-aacが動いてないことが分かる。

なぜ動かないのか

今回やったことを見て、察してほしいのだけども、これやっていることがビルド…というよりかは、プログラム書き直している。

そんなわけで、そもそも論、今のOBSバージョンにおいて、libfdkプラグインが動くようにメンテナンスされてない可能性が大。
だが、しかし、obs-libfdk.cで100行ちょっとしないものだが、私は最高にめんどくさがり屋なので、手を入れたくない。
──だから、この話は、これで終わりなんだ。ロック。

/(^o^)\

Discussion