録画サーバ構築 QSVエンコード CentOS7.3編

幾つかのハードウェアエンコードを試してきたんだけど、やはりIntelのQSVエンコードが比較にならないくらい美しい。VAAPIを使ってOSの自由度を上げることも考えたんだけど、品質を犠牲にするのは忍びない。最新のIntel Media Server StudioがCentOS7.2をGold OSとしているため、OSの選択が硬直化してしまうことがデメリット。一応、Generic Installという手順もあり、それを使えばOSの選択肢は自由になるはずなので、今回はこのGeneric Install手順を確立したい。

[新品] インテル Core i3 6100 BOX LGA1151
価格 : 12,800円(税込、送料無料)
by Yahoo! ショッピング

ぶっちゃけ、CentOS7.2から7.3に上げるためだけに見合う苦労ではないように思うかもしれないが、今後のCentOSのVersion UPに追従できないことを危惧すると、そろそろそこの自由度を確保しておきたい。細かいところで言うと、GlusterFSの3.10系もCentOS7.3を前提としているため、最新を使えないことによる制限がそれなりにない訳でもないし。chefでの構成管理を考えると、パッケージインストール以外での構築方法はrecipeが複雑化するので可能な限り避けたい。

Generic Installの場合、まずはetc, opt, lib, usrなどに必要なファイルをコピーする手順になるんだけど、CentOS7.3の場合は7.2用のrpmをそのまま流用できる。IntelからダウンロードしたMediaServerStudioEssentials2017.tar.gzが/usr/local/srcにあると仮定すると、以下の手順で必要なrpmをinstallしておく。

cd /usr/local/src
tar xzf MediaServerStudioEssentials2017R2.tar.gz
cd MediaServerStudioEssentials2017R2
tar xzf SDK2017Production16.5.1.tar.gz
cd SDK2017Production16.5.1/CentOS
yum install -y *.rpm

これでドライバやらライブラリはインストールできるので、次にQSVに対応したkernelを用意する。Generic InstallでIntel MSSを使うにはまず4系のkernelを利用する。kernel-ml-4.4.0.2をダウンロードしてpatchを当ててrpmbuildでパッケージ化する。よくわからないところでbuildが抜けてしまうので、SPECファイルの一部をコメントアウトして進めた。以下のような感じ。

cd /usr/local/src/MediaServerStudioEssentials2017/SDK2017Production16.5/Generic
tar xzf intel-linux-media_generic_16.5.1-59511_64bit.tar.gz
cd /usr/local/src
tar xjf /usr/local/src/MediaServerStudioEssentials2017R2/SDK2017Production16.5.1/Generic/opt/intel/mediasdk/opensource/patches/kmd/4.4/intel-kernel-patches.tar.bz2
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.gz
tar xzf linux-4.4.tar.gz
cd linux-4.4
for i in ../intel-kernel-patches/*.patch; do patch -p1 < $i; done
wget http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/SRPMS/kernel-ml-4.4.0-2.el7.elrepo.nosrc.rpm
rpm -ivh kernel-ml-4.4.0-2.el7.elrepo.nosrc.rpm
cd ..
tar cJf linux-4.4.tar.xz linux-4.4
cp linux-4.4.tar.xz ~/rpmbuild/SOURCES
yum install --disablerepo=local-extras,elrepo asciidoc openssl-devel xmlto audit-libs-devel binutils-devel elfutils-devel libunwind-devel libunwind-devel newt-devel numactl-devel python-devel slang-devel xz-devel zlib-devel ncurses-devel pciutils-devel perl-ExtUtils-Embed
cd ~/rpmbuild/SPECS
vi kernel-ml-4.4.spec
    :
    294     if [ -s .newoptions ]; then
    295         cat .newoptions
    296 #    exit 1
    297     fi

rpmbuild -ba kernel-ml-4.4.spec
cd ~/rpmbuild/RPMS/x86_64
yum install kernel-ml-4.4.0-2.el7.centos.x86_64.rpm
sed -i 's/GRUB_DEFAULT=.*$/GRUB_DEFAULT=0/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

再起動後にvainfoが正しく表示されればOK。続いてSDKに付属のサンプルを動かして動作確認をする。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

【送料無料】 インテル Core i3 – 6100 BOX品 [CPU]
価格:12808円(税込、送料無料) (2017/8/31時点)

cd /usr/local/src/MediaServerStudioEssentials2017R2
tar xzf MediaSamples_Linux_2017R2.tar.gz
cd MediaSamples_Linux_2017R2_b634/samples/_bin/x64
./sample_multi_transcode -i::h264 ../content/test_stream.264 -o::h264 test_out.h264 -hw -la
    :
Multi Transcoding Sample Version 7.0.16053634

libva info: VA-API version 0.99.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_0_32
libva info: va_openDriver() returns 0
Pipeline surfaces number (DecPool): 59
MFX HARDWARE Session 0 API ver 1.21 parameters:
Input  video: AVC
Output video: AVC

Session 0 was NOT joined with other sessions

Transcoding started
..
Transcoding finished

Common transcoding time is 0.099324 sec
-------------------------------------------------------------------------------
*** session 0 PASSED (MFX_ERR_NONE) 0.099167 sec, 101 frames
-i::h264 ../content/test_stream.264 -o::h264 test_out.h264 -hw -la

-------------------------------------------------------------------------------

The test PASSED

こんな感じでパスすれば成功。あとはh264_qsvに対応したffmpegをinstallして動作確認。うちは以前にビルドしたffmpegでそのまま動作したので、ffmpegの構築は割愛。過去記事をご参照下さい。この手順であれば、Intel MSSに同梱されたrpmとpatch適用済みのkernel-ml-4.4のrpmをinstallすれば再構築可能なので、構成管理もしやすい。CentOSのバージョンが上がっても今回作ったkernel4.4をinstallするだけだし。しばらくは、この環境で運用してみよう。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)