ライブ配信録画

最終更新日: 2017.04.08

<<トップページ <<新着情報 <<逆引き集 <<リンク集 <<サイト内検索 <<メルマガ <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

動画配信サーバーで配信するライブ配信動画を録画できるようにする。ここでは、ライブ配信動画をFlash Video形式で録画し、過去24時間分を保存しておくようにする。また、録画したライブ配信動画の視聴用ページを自動生成する。

動画配信サーバー構築済であること


■nginx設定

[root@centos ~]# vi /usr/local/nginx/conf/nginx.conf ← nginx設定ファイル編集
        # ライブ配信設定
        application live {
            live on;

            # 192.168.1.0/24からのみライブ配信データの受信を許可
            allow publish 192.168.1.0/24;
            deny publish all;

            # HLS配信設定
            hls on;
            hls_path /usr/local/nginx/html/live; # HLS(HTTP Live Streaming)ファイル作成先
            hls_fragment 10s; # HLS(HTTP Live Streaming)ファイル分割時間

            ライブ配信録画設定追加(ここから)
            # ライブ配信録画設定
            record all;
            record_path /usr/local/nginx/html/rec; # ライブ配信録画ファイル保存先
            record_suffix -%Y%m%d%H%M%S.flv; # ライブ配信録画ファイル名付与文字列(例:live-20170226194852.flv)
            record_max_size 50M; # ライブ配信録画1ファイルあたり最大サイズ(サイズは任意)
            exec_record_done /usr/local/bin/record_done.sh $path $filename $basename $dirname; # ライブ配信録画ファイル視聴ページ自動生成
            ライブ配信録画設定追加(ここまで)

        }
        ライブ配信録画視聴設定追加(ここから)
        # ライブ配信録画設定
        application rec {
            play /usr/local/nginx/html/rec; # ライブ配信録画ファイル保存先
        }
        ライブ配信録画視聴設定追加(ここまで)

[root@centos ~]# mkdir /usr/local/nginx/html/rec ← ライブ配信録画ファイル保存先ディレクトリ作成

[root@centos ~]# chown nobody /usr/local/nginx/html/rec/ ← ライブ配信録画ファイル保存先ディレクトリ所有者変更

■ライブ配信録画ファイル視聴ページ生成スクリプト作成

(1)yamdiインストール
録画された動画にはMetaDataが挿入されていないことから、そのままでは正常に視聴することができないため、yamdiを利用してMetaDataを挿入する。
[root@centos ~]# wget https://downloads.sourceforge.net/project/yamdi/yamdi/1.9/yamdi-1.9.tar.gz ← yamdiダウンロード
※最新版のURLはダウンロードページで確認すること

[root@centos ~]# tar zxvf yamdi-1.9.tar.gz ← yamdi展開

[root@centos ~]# cd yamdi-1.9/ ← yamdi展開先ディレクトリへ移動

[root@centos yamdi-1.9]# gcc yamdi.c -o yamdi -O2 -Wall ← yamdiコンパイル

[root@centos yamdi-1.9]# /bin/mv yamdi /usr/sbin/ ← yamdiインストール

[root@centos yamdi-1.9]# cd ← yamdi展開先ディレクトリを抜ける

[root@centos ~]# rm -rf yamdi-1.9 ← yamdi展開先ディレクトリを削除

[root@centos ~]# rm -f yamdi-1.9.tar.gz ← ダウンロードしたファイルを削除

(2)ライブ配信録画ファイル視聴ページ生成スクリプト作成
ライブ配信録画ファイル一覧ページ(後述)への表示用サムネイル画像作成、ライブ配信録画ファイルへのMetaData挿入、ライブ配信録画ファイル視聴ページ生成を一括して行うスクリプトを作成する。
[root@centos ~]# vi /usr/local/bin/record_done.sh ← ライブ配信録画ファイル視聴ページ生成スクリプト作成
#!/bin/sh

# ${1} path - recorded file path (/tmp/rec/mystream-1389499351.flv)
# ${2} filename - path with directory omitted (mystream-1389499351.flv)
# ${3} basename - file name with extension omitted (mystream-1389499351)
# ${4} dirname - directory path (/tmp/rec)

# 録画ファイルのサムネイル画像作成
JPG_NAME=${4}/${3}.jpg
ffmpeg -i ${1} -ss 1 -vframes 1 -f image2 ${JPG_NAME} > /dev/null 2>&1

# 録画ファイルにMetaData挿入
tmpflv=`mktemp -u`
/usr/sbin/yamdi -i ${1} -o ${tmpflv}
/bin/mv ${tmpflv} ${1}

# 録画ファイル視聴ページ作成
HTML_PATH=`echo ${4} | sed -e 's/\/usr\/local\/nginx\/html\([^ ]*\)/\1/p' -e d`
HTML_NAME=${4}/${3}.html
FLV_NAME=${3}
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' >> ${HTML_NAME}
echo '  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' >> ${HTML_NAME}
echo '<html xmlns="http://www.w3.org/1999/xhtml">' >> ${HTML_NAME}
echo '<head>' >> ${HTML_NAME}
echo '    <title>'${FLV_NAME}'</title>' >> ${HTML_NAME}
echo '    <link href="//vjs.zencdn.net/5.11.6/video-js.css" rel="stylesheet">' >> ${HTML_NAME}
echo '    <script src="//vjs.zencdn.net/5.11.6/video.js"></script>' >> ${HTML_NAME}
echo '</head>' >> ${HTML_NAME}
echo '<body>' >> ${HTML_NAME}
echo '    <video id="'${FLV_NAME}'" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="320" height="240" data-setup="{}">' >> ${HTML_NAME}
echo '        <source src="rtmp://'`hostname -d`"${HTML_PATH}/${FLV_NAME}"'" type="rtmp/mp4">' >> ${HTML_NAME}
echo '        <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>' >> ${HTML_NAME}
echo '    </video>' >> ${HTML_NAME}
echo '</body>' >> ${HTML_NAME}
echo '</html>' >> ${HTML_NAME}

# 録画ファイルの更新日時をファイル作成日時に変更
tmp=`echo ${3} | sed -e 's/live-\([^ ]*\)/\1/p' -e d`
datetime=`echo ${tmp:0:4}`/`echo ${tmp:4:2}`/`echo ${tmp:6:2}`' '`echo ${tmp:8:2}`:`echo ${tmp:10:2}`:`echo ${tmp:12:2}`
touch -d "${datetime}" ${4}/${3}.*

[root@centos ~]# chmod +x /usr/local/bin/record_done.sh ← ライブ配信録画ファイル視聴ページ生成スクリプトへ実行権限付加

[root@centos ~]# systemctl restart nginx ← nginx再起動

■ライブ配信録画確認

http://サーバー名:8080/rec/live-YYYYMMDDHHMMSS.htmlへアクセスしてライブ配信録画が視聴できること
※ライブ配信録画がrecord_pathで指定されたディレクトリ(/usr/local/nginx/html/rec)に作成され、録画ファイルのサイズがrecord_max_sizeで指定したサイズになるとexec_record_doneで指定されたスクリプト(/usr/local/bin/record_done.sh)が実行されることにより、ライブ配信録画ファイル視聴ページが作成される


■ライブ配信録画ファイル一覧ページ生成スクリプト作成

[root@centos ~]# vi /etc/cron.hourly/record_list ← ライブ配信録画ファイル一覧ページ生成スクリプト作成※1時間ごとに自動実行されるディレクトリへ作成
#!/bin/sh

RECORD_PATH=`grep record_path /usr/local/nginx/conf/nginx.conf|awk '{print $2}'|tr -d ";"`

# 24時間以前のライブ配信録画関連ファイル(録画ファイル本体、サムネイル、視聴ページ)を削除する
tmpwatch -m 24 ${RECORD_PATH}

# ライブ配信録画ファイル一覧ページ生成
HTML_PATH=`echo ${RECORD_PATH} | sed -e 's/\/usr\/local\/nginx\/html\([^ ]*\)/\1/p' -e d`
cd ${RECORD_PATH}
ls *.flv > /dev/null 2>&1 ; [ $? -ne 0 ] && exit

rm -f ${RECORD_PATH}/index.html
echo "<html>" >> ${RECORD_PATH}/index.html
echo "<head>" >> ${RECORD_PATH}/index.html
echo "<title>LIVE RECORD LIST</title>" >> ${RECORD_PATH}/index.html
echo "</head>" >> ${RECORD_PATH}/index.html
echo "<body>" >> ${RECORD_PATH}/index.html
echo "<table border=1 style=\"border-collapse:collapse;\">" >> ${RECORD_PATH}/index.html

for flv in `ls *.flv`
do
    fuser ${flv} > /dev/null 2>&1
    [ $? -eq 0 ] && continue
    jpg=`basename ${flv} .flv`.jpg
    html=`basename ${flv} .flv`.html
    datetime=`ls -l --time-style="+%Y/%m/%d %H:%M:%S" ${flv}|awk '{print $6 " " $7}'`
    echo "<tr><td><a href=\"${HTML_PATH}/${html}\" target=\"_blank\"><img src=\"${jpg}\" style=\"width:320px; height:240px;\"></a></td>" >> ${RECORD_PATH}/index.html
    echo "<td>${datetime}</td></tr>" >> ${RECORD_PATH}/index.html
done

echo "</table>" >> ${RECORD_PATH}/index.html
echo "</body>" >> ${RECORD_PATH}/index.html
echo "</html>" >> ${RECORD_PATH}/index.html

[root@centos ~]# chmod +x /etc/cron.hourly/record_list ← ライブ配信録画ファイル一覧ページ生成スクリプトへ実行権限付加

[root@centos ~]# /etc/cron.hourly/record_list ← ライブ配信録画ファイル一覧ページ自動生成(初回実行)

■ライブ配信録画ファイル一覧ページ確認

http://サーバー名:8080/rec/へアクセスしてライブ配信録画ファイル一覧が表示されること
□ライブ配信録画ファイル一覧から任意のライブ配信録画ページへアクセスしてライブ配信録画が視聴できること



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします