nvidia DeepStream SDK 3.0 のDocker ContainerにGStreamer用のH264のハードウエアエンコーダーが入っていなかったので、自前でインストールする方法の備忘録です。
前提条件
Ubuntu 18.04 x86_64
nvidiaグラフィックカード(RTX2060)
nvidiaドライバ(Driver Version: 418.56, CUDA Version: 10.1)
docker-ce
nvidia-docker
※カッコ内は自分の環境です。
ソースコードの取得
まず、ホスト側にソースコードをダウンロードしておきます。
また、コンテナ内のGStreamerのバージョンが1.8.3
なので、こちらも1.8.3
をチェックアウトします。
git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-bad
cd gst-plugins-bad/
git checkout -b 1.8.3 1.8.3
ヘッダファイルの取得
cuda.h
/usr/local/cuda/include/cuda.h
をgst-plugins-bad/sys/nvenc/
にコピーします。
nvEncodeAPI.h
こちらからVideo Codec SDKをダウンロードして解凍します。
include/nvEncodeAPI.h
をgst-plugins-bad/sys/nvenc/
にコピーします。
コンテナ起動
ダウンロードしたソースコードをマウントする設定を加えて、コンテナを起動します。
nvidia-docker run -it --rm -v /home/hogehoge/gst-plugins-bad:/root/gst-plugins-bad -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -w /root nvcr.io/nvidia/deepstream:3.0-18.11
事前準備&ビルド
以下、コンテナ内でのコマンドになります。
- /etc/apt/sources.listでdeb-srcを有効化
- ビルドに必要なライブラリとヘッダファイルをインストール
- ビルドに必要なライブラリのsoファイルのシンボリックリンクを作成
- config&make
sed -i -e 's/# deb-src/deb-src/g' /etc/apt/sources.list
apt updte
apt build-dep -y gstreamer1.0-plugins-bad
ln -s /usr/local/cuda/lib64/libcudart.so.10.0.130 /usr/local/cuda/lib64/libcudart.so
ln -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.418.56 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so
cd ~/gst-plugins-bad
NVENCODE_CFLAGS="-I/root/gst-plugins-bad/sys/nvenc" ./autogen.sh --with-cuda-prefix="/usr/local/cuda"
cd sys/nvenc
make
エラーが出ずにビルドが成功すると、gst-plugins-bad/sys/nvenc/.libs
にlibgstnvenc.so
ができてるはずなので、こちらを/usr/lib/x86_64-linux-gnu/gstreamer-1.0/
へコピーします。
gst-inspect-1.0 nvh264enc
を実行して、情報が表示されれば成功です。
次回起動以降はDockerfileを作って、libgstnvenc.so
を/usr/lib/x86_64-linux-gnu/gstreamer-1.0/
へADD
するのがよいと思います。
とりあえず、DeepStream 4.0ではサポートされるらしいのでそれまでのつなぎとして(^^)