執筆時点でVRizeで盛り上がってるYothubaです。勢いにまかせて流行りのストリーミングプロトコルのSRTを利用するためのライブラリであるlibsrtをWindows向けにビルドする方法を書いていきます!!!!!!!!!!!!!!!
SRTとは?という方はここを参照してください。
対象者
- SRTを独自のアプリケーションに組み込みたい方
はじめに
SRTを試す場合libsrtを導入する必要があります。Gstreamer、ffmpegなど一部アプリケーションではその必要はありませんが自分のプログラムにSRTを含みたい場合は、当然のことながらlibsrtが必須です。
linux系などで利用する場合は簡単にビルドできるのですがWindowsでは手順がややこしくなります。また、SRTのGithubが公開してるビルド手順だとWindowsビルドは失敗する可能性があります。(私は成功しませんでした。)
前提ライブラリの準備
srtのビルドには前提として
・pthreads(vcpkgで明示的に64bit版を指定します)
・OpenSSL
の2点が必要です。
vcpkg install libsrt
で全部込みがインストールできますがsrtのバージョンが古かったり、依存関係が解決できてなかったりするので個別に2つのパッケージをインストールします。
どちらもWindowsの公式パッケージマネージャであるvcpkgを使ってインストールします。
vcpkgのバージョンは2020.02.04-nohashを利用しています。
pthreadsについて
pthreadsにはvcpkgで入れたもの以外にもう一つライブラリが必要です。
SRTのGithubのReadMeにやり方が掲載されています。
- 以下のリンクからpthread-win32をダウンロードします。
https://github.com/GerHobbelt/pthread-win32
ダウンロードしたフォルダの中のpthread_lib.2013.vcxprojを選択しVisualStudioを起動します。(2013verである必要はないようです。私は2017で実行しました。) - 構成が
Release
、x64
になっていることを確認します。 - プロジェクトをビルドします。(pthread_libがビルドされることを確認してください)
- ビルド後、
pthread_lib.lib
がbin/x64_****_.Release
に生成されているはずです。これをpthreadsのlib
ファイルにコピーします。
pthreadsのライブラリのパスは[path to vcpkg]/installed/x64-windows/
以下にあります。
OpenSSLについて
こちらはvcpkgで通常通りインストールすれば大丈夫です。
CMakeLists.txtにpthreadsへのパスを通す
githubからクローンしたsrtのフォルダを開くとCMakeLists.txt
があるのでこれをテキストエディタ(文字検索機能があるものが好ましい)で開きます。
開いたらPTHREAD
で部分検索します。ヒットしたら一番最初にPTHREAD
の文字が出てくる直前で下記のコードを追記します。
pthreadのinclude,libディレクトリは先ほど同様[path to vcpkg]/installed/x64-windows/
です。PTHREAD_LIBRARY
は必ずディレクトリではなくファイル単体を指定してください。
set(PTHREAD_INCLUDE_DIR pthreadsのincludeディレクトリのpath)
set(PTHREAD_LIBRARY pthreadsのlibディレクトリ内の.libファイルのpathを全て空白区切りで入力)
ちなみに私の場合はこんな感じです。
set(PTHREAD_INCLUDE_DIR C:/vcpkg/packages/pthreads_x86-windows/include)
set(PTHREAD_LIBRARY C:/vcpkg/packages/pthreads_x86-windows/lib/pthreadVC3.lib C:/vcpkg/packages/pthreads_x86-windows/lib/pthreadVCE3.lib C:/vcpkg/packages/pthreads_x86-windows/lib/pthreadVSE3.lib C:/vcpkg/packages/pthreads_x86-windows/lib/pthread_lib.lib)
いざビルド!
srtのディレクトリ下で行いますが、そのまま実行すると既存のファイルとビルドファイルが混在してしまうのでbuild
などの分かりやすい名前でディレクトリを作成し、buildがカレントディレクトリの状態で以下のコマンドを実行してください。
僕の場合のディレクトリ構成を載せておきます。
srt-1.3.4/
├ srt-1.3.4/
├ build/
├ CMakeLists.txt
├ その他
makeコマンドはこちらです。
[vcpkg root]
のところにはvcpkgをインストールしたディレクトリを指定してください。
cmake ../ -G "Visual Studio 16 2019" -A x64
-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake
makeが出来たらbuild
ディレクトリ下にSRT.slnというプロジェクトファイルが生成されているので選択してVisualStudio2019を起動します。
ビルドが完了したら今度はビルドから構成マネージャーを開きます。
構成マネージャーからINSTALLプロジェクトをビルド対象にします。
もう一度ソリューションのビルドを実行します。
これでビルドは完了です!
デフォルトであればProgram Files(x86)
下にSRTディレクトリが作成されます!
後はVisualStudioでSRTを利用したいプロジェクトを作成し、先ほど生成されたSRTディレクトリ内のincludeディレクトリなどのパスをVisualStudioに通してあげます。
ちなみにですが、今後外部ライブラリを使うにあたって、一々パス指定をするのは面倒なので、私はライブラリをひとまとめにして管理しています。
SRTのライブラリもinclude
,lib
,bin
ディレクトリを全てuserLibrary
というディレクトリに移動させています。
ただ、それでもinclude
、lib
、dll
は個別に指定してあげなくてはいけないのでそれが面倒な場合は、プロパティシートを使うと簡単に管理できます。
そこらへんの話はこちらを見てもらえたらと思います。
おわりに
Linuxとかだと数行で終わることがWindowsになっただけでこんだけ複雑になるとほんとにどうにかならないかなーという気持ちです。近々WSLに来るアプデでどうなるのか楽しみです。
もしも誤記や手順通りにやっても上手くいかなかった場合は気軽に聞いてください。わかる範囲で答えます。