Ubuntu16.04 recpt1/recdvb + Mirakurun + Chinachu Gamma のインストール

・必要パッケージのインストール

# apt install autoconf build-essential curl git-core libccid libpcsc-perl libpcsclite-dev libpcsclite1 libssl-dev libtool linux-headers-`uname -r` mercurial pcsc-tools pcscd pkg-config yasm

・カードリーダの動作確認

# pcsc_scan

・arib25(放送波のデコード)のインストール

# cd /usr/local/src/
# wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
# unzip c44e16dbb0e2.zip
# cd pt1-c44e16dbb0e2/arib25
# make
# make install

・ドライバと録画プログラムのインストール

PT3 を使う場合
1. PT3専用ドライバ、recpt1
2. DVBドライバ(Linux標準ドライバ)、recdvb をインストールする

PX-S1UD を使う場合
3. PX-S1UDファームウェア、recdvb をインストールする

PT3専用ドライバのインストール

# cd /usr/local/src/
# git clone https://github.com/m-tsudo/pt3.git
# cd pt3/
# make
# make install

# echo "blacklist earth-pt3" >> /etc/modprobe.d/blacklist.conf
# modprobe pt3_drv
# reboot

# ls /dev/ | grep pt3
※デバイスが存在することを確認

PX-S1UDファームウェアのインストール

# cd /usr/local/src/
# wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
# unzip PX-S1UD_driver_Ver.1.0.1.zip
# cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/

recpt1 のインストール

# cd /usr/local/src/
# git clone https://github.com/stz2012/recpt1.git
# cd recpt1/recpt1
# ./autogen.sh
# ./configure --enable-b25
# make
# make install

# adduser  video
※videoグループに追加しておかないとPT3を使用できない

# recpt1 --b25 --strip 22 10 test.ts --device /dev/pt3video2
※録画できることを確認
 デバイス:video0/1:衛星放送
      video2/3:地上デジタル
 チャネル:22ch
 録画時間:10秒

recdvb のインストール

# cd /usr/local/src/
# wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz
# tar xvzf recdvb-1.3.1.tgz
# cd recdvb-1.3.1
# ./autogen.sh
# ./configure --enable-b25
# make
# make install

# adduser <recdvbコマンドを使いたいユーザ> video
※videoグループに追加しておかないとPX-S1UDを使用できない

# recdvb --b25 --strip 22 10 test.ts
※録画できることを確認

・Mirakurun のインストール
事前準備として node.js、npm をインストールする
https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2

公式ドキュメントに従い Mirakurun をインストールする
https://github.com/Chinachu/Mirakurun/blob/master/README.md

Mirakurunでスクランブル解除する場合は arib-b25-stream-test をインストール
※録画コマンドで --b25 オプションを使う場合は不要

# npm install arib-b25-stream-test -g --unsafe

PT3 で recpt1 を使う場合には下記を変更

# mirakurun config tuners
- name: PT3-S1
  recpt1 --b25 --device /dev/pt3video0 <channel> - -
  isDisabled: false

※BS/CSアンテナへの給電が不要であれば、recpt1コマンドの --lnb 15 オプションは削除する
※recpt1コマンドでスクランブル解除する場合は --b25 オプションを追加、decoder行を削除
※isDisabled を false に変更
※PT3-S2、PT3-T1、PT3-T2 についても同様に変更

PX-S1UD を使う場合には下記を追記

# mirakurun config tuners
- name: PX-S1UD-1
  types:
  - GR
  command: recdvb --b25 --strip <channel> - -
  isDisabled: false

・チャンネル設定

# mirakurun config channels
※受信地域に合わせてチャンネル設定を修正する
http://www.maspro.co.jp/contact/bro/bro_ch.html

# mirakurun restart
※EPG受信するので、10分ほど待つ

# rivarun --list | sed 's/},/},\n/g'
※チャンネル情報が表示されることを確認
※要Rivarun

・Rivarun のインストール(任意)
公式ドキュメント:https://github.com/Chinachu/Rivarun

・動作確認
# rivarun --ch GR/27 10 test.m2ts

・Chinachu のインストール
公式ドキュメントに従いインストールする
https://github.com/Chinachu/Chinachu/wiki

・ログローテート設定(任意だが、そのままだとログが肥大化するので実施推奨)

# pm2 install pm2-logrotate
※PM2のログローテート

# vi /etc/logrotate.d/mirakurun
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
{
  daily
  compress
  rotate 7
  missingok
  notifempty
}

# vi /etc/logrotate.d/chinachu
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
  weekly
  compress
  rotate 4
  missingok
  notifempty
}

・録画ファイルの2バイト記号の削除(任意)
ファイル名に2バイト記号が含まれているとOSがファイル名を正しく取得できない場合があるため、「_」に置換するようにする。

# vi chinachu/common/lib/chinachu-common.js
※220行目あたり
         a = a.replace(/\//g, '/').replace(/\\/g, '\').replace(/:/g, ':').replace(/\*/g, '*').replace(/\?/g, '?');
         a = a.replace(/"/g, '”').replace(/</g, '<').replace(/>/g, '>').replace(/\|/g, '|').replace(/≫/g, '>>');
         a = a.replace(/\r\n/g, ' ').replace(/\n/g, ' ').replace(/\r/g, ' ');
この行を追加 → a = a.replace(/〜/g, '_').replace(/−/g, '_').replace(/×/g, '_');

Linux OpenVPN 高速化チューニング

OpenVPNで通信速度に影響する下記設定について検証。
udp or tcp
・comp-lzo の有無
tcp-nodelay の有無(tcpのみ)
・mssfix、fragment のチューニング

mssfix … カプセル化されるTCPパケットのサイズ制限(デフォルト値:1450)
fragment UDPで接続するときのカプセル化されるパケットのサイズ制限
tun-mtu … tunデバイスを使用する場合のMTUサイズの制限(デフォルト値:1500)
※tun-mtuも変更可能だが、1500以下にすると「mssfix、fragmentを指定する場合はtun-mtuは1500にしろ」という
 ワーニングが接続時に出るので、そのままとした

※各パラメータについて:https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
※パケットサイズのチューニングは下記が参考になる
https://wiki.archlinux.jp/index.php/OpenVPN#Fragment_.E3.81.A8_MSS_.E3.81.AB.E3.82.88.E3.82.8B_MTU_.E3.81.AE.E8.A8.AD.E5.AE.9A

検証1 ローカル接続

・通信経路
 ノートPC <-> (無線LAN OpenVPN接続)
  <-> OpenVPN仮想サーバ <-> (KVM ブリッジ接続)
   <-> Web仮想サーバ
・ダウンロードするファイル
 158MB の 映像ファイルのHTTPダウンロードにかかった時間を5回測定して中央値を採用
接続オプション ダウンロード時間(中央値)
直接ダウンロード 15秒
tcp接続 オプションなし 18秒
tcp接続 comp-lzo 19秒
tcp接続 tcp-nodelay 22秒
tcp接続 mssfix:1280 19秒
tcp接続 comp-lzo mssfix:1280 tcp-nodelay 25秒
udp接続 オプションなし 16秒
udp接続 comp-lzo 16秒
udp接続 mssfix:1280 fragment:1280 17秒
udp接続 comp-lzo mssfix:1280 fragment:1280 16秒
udpの方が速く、直接ダウンロードと比べてもほとんどオーバーヘッドが無い
・tcp-nodelay が無い方がなぜか速い
・comp-lzo は速度にあまり影響しない(映像ファイルなので圧縮の余地がないから?)
・tun-mtu等は速度にあまり影響しない(ローカル接続だから?)

検証2 インターネット接続

測定タイミングによって速度が変わるため、定量的な測定ができなかった。

CentOS7 WAF(ModSecurity)のインストール

apacheのインストール

# yum install httpd

・ModSecurityのインストール

# yum install mod_security mod_security_crs

・設定

# cp -p /etc/httpd/conf.d/mod_security.conf /etc/httpd/conf.d/mod_security.conf.org

# vi /etc/httpd/conf.d/mod_security.conf
 # Default recommended configuration
 # SecRuleEngine On ←コメントアウト
 SecRuleEngine DetectionOnly ←検知はするが、遮断はしない

apacheの再起動

# systemctl restart apache

・ログ確認

# less /var/log/httpd/modsec_audit.log

・ルールの場所

# cd /etc/httpd/modsecurity.d/

KVM VMの自動起動/自動シャットダウン設定

・ホスト側の設定

# vi /etc/sysconfig/libvirt-guests
START_DELAY=30
ON_SHUTDOWN=shutdown
SHUTDOWN_TIMEOUT=180

# virsh autostart <自動起動したいVM名>
# ls /etc/libvirt/qemu/autostart

解除する場合は下記
# virsh autostart --disable <自動起動したいVM名>
# ls /etc/libvirt/qemu/autostart

・ゲスト側の設定
ホストのシャットダウン命令を受け付けるようにする

# yum -y install acpid
# systemctl start acpid
# systemctl enable acpid

KVM libvirt で cdrom をマウントする

# virus edit vm_name

<controller type='ide' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/mnt/storage-1/application_installer/ISO/virtio-win-0.1.139.iso'/>
  <target dev='hdb' bus='ide'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>

CentOS7 VAAPIでHWエンコード

リポジトリの追加

# yum -y install yum-utils epel-release
# yum-config-manager --disable epel-release
# yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
# yum-config-manager --disable epel-multimedia

・インストール

# yum --enablerepo=epel,epel-multimedia install libva libva-devel libva-intel-driver libva-utils

# vainfo
※利用可能なプロファイル一覧が表示されればOK

ffmpegのインストール
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

ffmpegで動作確認

※vaapi_device で指定するHWエンコードバイスは ls -n /dev/dri で確認

# ffmpeg -vaapi_device /dev/dri/card0 \
  -hwaccel vaapi \
  -hwaccel_output_format vaapi \
  -i input.mp4 \
  -c:v h264_vaapi  -profile:v 100 -level 40 -qp 22 \
  -c:a copy \
  output.mp4

・TSのエンコード

# ffmpeg \
  -vaapi_device /dev/dri/card0 \
  -hwaccel vaapi \
  -hwaccel_output_format vaapi \
  -i input.ts \
  -analyzeduration 30M -probesize 30M \
  -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=720:h=480' \
  -c:v h264_vaapi -profile:v 77 -level 31 -qp 22 -quality 0 -aspect 16:9 \
  -c:a libfdk_aac  -ac 2 -ab 96k -ar 48000 \
  output.mp4

hwaccel vaapi
 → HWデコードする
hwaccel_output_format vaapi
 → HWデコード結果をそのままHWエンコーダに渡す
   ※ソフトウェアフィルタを使う場合はyuv420p等を指定する
analyzeduration、probesize
 → TSなどのフォーマットでは読み込みのために動画ストリームの解析が必要
   デフォルトの解析時間・解析サイズでは動画を読み込めない場合があるため、長めに修正する
   analyzeduration:デフォルト 5秒(5Mマイクロ秒)
   probesize:デフォルト 5Mバイト
scale_vaapi
 → HWエンコーダでリサイズ
profile:v
 → h.264のプロファイル
   High:100 Main:77 Baseline:66
level 
 → h.264のレベル
   4.0 → 40 3.1 → 31 1.3 → 13
qp
 → 画質
   デフォルト20
   数値が低いほど高画質、高ビットレート
quality
 → 品質
   デフォルト0
   数値が低いほど高画質、低速

・VAAPIの情報
https://wiki.libav.org/Hardware/vaapi
https://gist.github.com/Brainiarc7/95c9338a737aa36d9bb2931bed379219
https://trac.ffmpeg.org/wiki/Hardware/VAAPI

CentOS7 HandBrakeを野良リポジトリからインストールする

リポジトリの追加

# yum -y install yum-utils epel-release
# yum-config-manager --disable epel-release
# yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
# yum-config-manager --disable epel-multimedia

・インストール

# yum --enablerepo=epel install libmfx
# yum --enablerepo=epel-multimedia install HandBrake-cli