NVENC実戦配備

昨日、NVENCに対応したUbuntuでのハードウェアエンコード環境ができたので、溜まったtsファイルをエンコードしていくことに。

PT2とPT3の複数実装で録画は並列でできるものの、GPUエンコードは並列処理できないと思われるので予約録画の流れでエンコードさせる仕組みは見直し、録画スクリプトはtsファイルを/mnt/ts_pool/10_recordedに移動させたところで終了とする。

yano@GT110b:~$ ll /mnt/ts_pool/
total 76
drwxr-xr-x 6 yano family 97 Feb 3 22:00 ./
drwxr-xr-x 14 root root 4096 Dec 9 17:23 ../
drwxrwxrwx 2 yano family 49152 Feb 4 22:45 10_recorded/
drwxrwxrwx 2 yano family 4096 Feb 4 09:39 19_encode_failed/
drwxrwxrwx 2 yano family 12288 Feb 4 22:45 20_encoded/
drwxrwxrwx 2 yano family 16384 Feb 4 08:02 30_ts_files/
yano@GT110b:~$

10分ごとにcronで起動する周期タスク~/etc/cron.sh/encode_mp4.cron/mnt/ts_pool/10_recordedから古い順に数本ずつピックアップして、エンコードできたのは/mnt/ts_pool/20_encodedに、エラーになったものは/mnt/ts_pool/19_encode_failedに移動させていく仕組みに。PIDFILEを使って重複起動しないようにするのを忘れずに。

yano@GT110b:~$ cat ~/etc/cron.sh/encode_mp4.cron
#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NUM_FILES=5
EXT_TS=".ts"

PIDFILE=/home/yano/run/`basename $0`.pid

UUID=`id | sed 's/uid=\([0-9]*\)(.*/\1/'`;
[ $UUID -eq 0 ] && PIDFILE=/var/run/`basename $0`.pid;

if [ -e ${PIDFILE} ];
then
exit;
fi
echo $$ > ${PIDFILE}
trap "/bin/rm -f ${PIDFILE}; exit" 1 2 3 15

CONFIGFILE=/etc/default/epgrec
# source config info
[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}

TS_FILES=`ls -1 ${TS_RECORDED}/*${EXT_TS} | head -${NUM_FILES}`

for f in ${TS_FILES};
do
/home/yano/bin/ts2mp4_nvidia.sh $f 2>&1 > /dev/null
if [ $? -eq 0 ];
then
chown ${OWNER} ${MP4DIR}/`basename $f ${EXT_TS}`.mp4;
mv $f ${TS_ENCODED};
else
mv $f ${TS_ENCODE_FAILED};
fi;
done

if [ -e ${PIDFILE} ];
then
rm -f ${PIDFILE};
fi
yano@GT110b:~$

【参照】
●www.nodoka.org http://www.nodoka.org/
録画サーバ構築 QSVエンコード Linux編 2016年5月27日
録画サーバ構築 NVENCエンコード Linux編 2016年6月15日
●FFmpeg https://ffmpeg.org/
CompilationGuide/Ubuntu
●Wikipedia http://ja.wikipedia.org/wiki/
LGA1150
Haswellマイクロアーキテクチャ
Broadwellマイクロアーキテクチャ
LGA1151
Skylakeマイクロアーキテクチャ