【失敗記事】OBSでFDK-AAC入れたい人生だった【供養】
警告
この記事は、供養失敗記事です。
この記事見ても、出来なかった以外に、何も得るものはありません。
多分のこの問題への解は、存在せず、この沼は存在すらない可能性が大きいです。
やりたいこと!
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
を入れなければいけないとあるので、書き換えました。
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行ちょっとしないものだが、私は最高にめんどくさがり屋なので、手を入れたくない。
──だから、この話は、これで終わりなんだ。ロック。
Discussion