録画サーバ構築 QSVエンコード Skylake+Linux編

今更ながらshuttleのSH170R8機でCentOS7.2の標準インストールに成功したので、skylake CPUでのQSV検証を進める。skylakeに対応したMedia Server Studio 2017がIntelより数ヶ月前にリリース済み。今回のMSSはCentOS7.2のkernelを推奨しているので、このディストリビューションであればインストールは容易。DLしたMSSを以下のようにインストールして再起動。

cd /usr/local/src
tar xzf MediaServerStudioEssentials2017.tar.gz
cd MediaServerStudioEssentials2017
tar xzf SDK2017Production16.5.tar.gz 
cd SDK2017Production16.5
cd CentOS
tar xzf install_scripts_centos_16.5-55964.tar.gz
./install_sdk_CentOS.sh
reboot

起動してきたら以前と同様にサンプルで動作確認。

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

Intel Core i3-6100 BOX品
価格:12510円(税込、送料無料) (2016/10/27時点)

cd /usr/local/src/MediaServerStudioEssentials2017
tar xzf MediaSamples_Linux_2017.tar.gz 
cd /usr/local/src/MediaServerStudioEssentials2017/MediaSamples_Linux_2017/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.16053497

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
Illegal instruction (core dumped)

ぐは、大失敗。。。うんざりしながら手探りで調査。結果から言うと、またもCPUがサポート外だったというだけ。一番安いCeleron G3900を使っていたんだけど、今回のMSSはCore i3以上でなければいけないらしい。Celeron買ったのが初めてなので気にしてなかったんだけど、過去のMSSもそうだったのかも。QSVを使うならCPUのスペックアップが必要。悩んだ挙句、泣く泣くCore i3-6100を買いました!もうここまで来れば意地だしね。数日後に届いたCore i3-6100をG3900と交換して改めて動作確認。

cd /usr/local/src/MediaServerStudioEssentials2017/MediaSamples_Linux_2017/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.16053497

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.19 parameters:
Input  video: AVC
Output video: AVC

Session 0 was NOT joined with other sessions

Transcoding started
..
Transcoding finished

Common transcoding time is  0.18 sec
MFX session 0 transcoding PASSED:
Processing time: 0.18 sec
Number of processed frames: 101

The test PASSED

さすがに今度はうまく行きました。これでダメだったらどうしようかと思ったよ。続いてQSVに対応したffmpegの準備。今回はQSV対応させたrpmを作ってみる。QSVだけを考えればffmpegの3系でもいけるんだけど、rpm化されているcomskipが対応していないので、2系を使っています。ちなみにnvencのときに2.6系は2.8系より大分遅かったので、2系最新がオススメ。

新製品 Shuttle SH170R8 新デザイン!アルミ製シャーシ採用 キューブ型ベアボーン
価格 : 35,620円(税込、送料無料)
by Yahoo! ショッピング

yum install --enablerepo=epel,nux-dextop bzip2-devel faac-devel gnutls-devel gsm-devel ladspa-devel libass-devel libcdio-paranoia-devel libdc1394-devel libmodplug-devel libtheora-devel libv4l-devel libvdpau-devel libXvMC-devel openal-soft-devel openjpeg-devel pulseaudio-libs-devel schroedinger-devel SDL-devel soxr-devel speex-devel xvidcore-devel fdk-aac-devel gsm-devel lame-devel ladspa-devel libvorbis-devel libva-devel opus-devel texinfo x264-devel x265-devel yasm
mkdir /opt/intel/mediasdk/include/mfx
cp /opt/intel/mediasdk/include/*.h /opt/intel/mediasdk/include/mfx

cat<<"EOF">/usr/lib64/pkgconfig/libmfx.pc
prefix=/opt/intel/mediasdk
exec_prefix=${prefix}
libdir=${prefix}/lib/lin_x64
includedir=${prefix}/include

Name: libmfx
Description: Intel Media SDK
Version: 16.5
Libs: -L${libdir} -lmfx -lva -lstdc++ -ldl -lva-drm -ldrm
Cflags: -I${includedir} -I/usr/include/libdrm
EOF

wget https://li.nux.ro/download/nux/dextop/el7/SRPMS/ffmpeg-2.6.8-3.el7.nux.src.rpm
rpm -ivh ffmpeg-2.6.8-3.el7.nux.src.rpm
cd /root/rpmbuild/SOURCES
wget https://ffmpeg.org/releases/ffmpeg-2.8.8.tar.bz2
cd ../SPECS
cp ffmpeg.spec _ffmpeg.spec
vi ffmpeg.spec
diff -u _ffmpeg.spec ffmpeg.spec
--- _ffmpeg.spec    2016-10-24 17:09:24.574643626 +0900
+++ ffmpeg.spec 2016-10-24 17:16:03.905096761 +0900
 Summary:        Digital VCR and streaming server
 Name:           ffmpeg
-Version:        2.6.8
+Version:        2.8.8
 Release:        3%{?date}%{?date:git}%{?rel}%{?dist}
 %if 0%{?_with_amr:1}
 License:        GPLv3+
@@ -166,6 +166,8 @@
     --enable-avresample \\\
     --enable-postproc \\\
     --enable-pthreads \\\
+    --enable-libmfx \\\

rpmbuild -ba ffmpeg.spec
cd ../RPMS/x86_64
yum install *.rpm

うんうん、ffmpegの準備ももう慣れたもの。さっそく今までと同じくアメトーーク1時間の録画データをmp4に変換してみる。

time ffmpeg -y -i ame.ts -f mp4 -preset medium -tune film -vcodec h264_qsv -s 1280x720 -vf yadif -q 22 -look_ahead 0 -acodec aac -strict -2 -ac 2 -ar 48000 -ab 128k -threads 4 ame_qsv.mp4

処理時間15分ほどで2GB強のmp4ファイルが出来た。画質の細かい評価はできないけど、自分の感覚からすると充分なものだし、サイズ相当と考えてもらって問題ないはず。処理速度的にはhaswellの2.5倍くらいでnvencよりも早いくらい。SH170R8でGeForceを積むと500Wの電源ユニットに換装せざるを得ないことを考えれば、QSVを使う方がリーズナブルという判断になるだろう。録画用の機能もSH170R8に戻して、GlusterFSサーバ兼録画サーバ兼エンコードサーバという位置付けに戻せるかな。

2 replies on “録画サーバ構築 QSVエンコード Skylake+Linux編”

  1. とおりすがった より:

    余りにドキュメントが不足でウンザリするのはずっと変わらないですね。Linux環境でのQSV使用。
    ところでintel製MSS(これも名前が変わったりして覚えにくい。)がCore i7/5/3 だけをサポートするのに対して
    01.orgというサイトにあるドライバー等はセレロン・ペンティアムでもいけるような情報もあります。
    ドキュメント不足ではっきりしないのが大変クソですが。

    github.com/mpv-player/mpv/issues/3747
    ここを見るとG3900でHWデコードは出来ているようです。エンコードは分かりませんが一応参考になれば。

    • aqua より:

      とおりすがった様
      みなさん、いろいろな事に挑戦されているのですね!
      今は換装したG3900を刺せる筐体がなく、すぐに試すことはできないのですが、
      何かの機会に参考にさせて頂きたいと思います(性能も気になりますし)。
      貴重な情報提供、ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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