動画配信サーバー構築(nginx+nginx-rtmp-module)

最終更新日: 2017.04.08

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

■概要

オンデマンド配信、ライブ配信を行う動画配信サーバーを構築する。ここでは、nginx+nginx-rtmp-moduleを使用して動画配信サーバーを構築する。動画はFlash Video形式(Flash Video形式以外の動画はXMedia RecodeでFlash Video形式へ変換)で配信し、Flash Videoを再生できないiPhone・iPad向けにはHTTP Live Streaming形式で配信することにより、すべてのクライアントで動画を視聴できるようにする。
また、Webカメラを接続したPCからカメラ映像・音声をFlash Media Live Encoderで動画配信サーバーへ送信し、動画配信サーバーでは受信したカメラ映像・音声をFlash Video形式またはHTTP Live Streaming形式で配信することにより、すべてのクライアントでライブ動画を視聴できるようにする。(下図参照)

※なお、本ページでは既にWebサーバーが稼動しているものとし、nginxの使用ポートを通常の80番ではなく8080番とすることにより既存のWebサーバーと並存できるようにしている。




■nginx+nginx-rtmp-moduleインストール

[root@centos ~]# wget https://nginx.org/download/nginx-1.10.3.tar.gz ← nginxダウンロード
※最新版のURLはダウンロードページで確認すること

[root@centos ~]# tar zxvf nginx-1.10.3.tar.gz ← nginx展開

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

[root@centos nginx-1.10.3]# git clone https://github.com/arut/nginx-rtmp-module.git ← nginx-rtmp-moduleダウンロード

[root@centos nginx-1.10.3]# ./configure --add-module=nginx-rtmp-module/ && make && make install ← nginx+nginx-rtmp-moduleインストール

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

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

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

■nginx設定

[root@centos ~]# vi /usr/local/nginx/conf/nginx.conf ← nginx設定ファイル編集
    server {
        listen       8080; ← HTTPポート変更

RTMPサーバー設定を最後尾へ追加(ここから)
rtmp_auto_push on;
rtmp {
    server {
        listen 1935;
        access_log logs/rtmp_access.log;
        chunk_size 4096;
        timeout 10s;
        # ライブ配信設定
        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)ファイル分割時間
        }
        # オンデマンド配信設定
        application vod {
            play /usr/local/nginx/html/vod; # 動画ファイル格納先
        }
    }
}
RTMPサーバー設定を最後尾へ追加(ここまで)

[root@centos ~]# mkdir /usr/local/nginx/html/vod ← 動画ファイル格納先ディレクトリ作成

[root@centos ~]# chown nobody /usr/local/nginx/html/vod ← 動画ファイル格納先ディレクトリ所有者変更

[root@centos ~]# vi /etc/logrotate.d/nginx ← nginxログローテーション設定ファイル作成
/usr/local/nginx/logs/*.log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload nginx.service > /dev/null 2>/dev/null || true
    endscript
}

■nginx起動

(1)nginx起動
[root@centos ~]# vi /usr/lib/systemd/system/nginx.service ← nginx起動スクリプト作成
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

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

[root@centos ~]# systemctl enable nginx ← nginx自動起動設定

(2)ポートTCP8080番、TCP1935番のOPEN
ルーター側の設定でポートTCP8080番、TCP1935番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

Portチェックテスト【外部からのPort開放確認】で「ホスト名(FQDN) または グローバルIPアドレス」にサーバー名(例:centossrv.com)、「チェックポート番号」に8080または1935と入力して「Portチェック実行」ボタンを押下し、「ホスト:centossrv.com ポート:8080または1935 にアクセスできました」と表示されることを確認。


■オンデマンド配信確認

(1)XMedia Recodeインストール
XMedia Recodeを使用して動画をFlash Video形式に変換するため、XMedia RecodeダウンロードサイトでXMedia Recode Installerをダウンロードしてインストール

(2)動画をFlash Video形式に変換
XMedia Recodeを起動

「ファイルを開く」で変換対象ファイルを開く

「形式」タブの「形式」で"FLV"を選択

「クロップ/プレビュー」タブの「映像サイズ」で"カスタム"を選択

「リストに追加」

「エンコード」

保存先(初期値はC:\Users\%USERNAME%\Videos)へFlash Video形式に変換された動画が出力される。

変換した動画をWinSCPで動画格納先(/usr/local/nginx/html/vod)へ格納する。

(3)動画をHLS形式に変換
[root@centos ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm ← nux-dextopリポジトリインストール

[root@centos ~]# yum -y install ffmpeg ← ffmpegインストール

[root@centos ~]# vi convert_to_hls.sh ← FLV形式⇒HLS形式動画変換スクリプト作成
#!/bin/sh
ffmpeg -re -i ${1} -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f segment -segment_format mpegts -segment_time 10 -segment_list `basename ${1} .flv`.m3u8 `basename ${1} .flv`-%03d.ts

[root@centos ~]# cd /usr/local/nginx/html/vod ← 動画格納先ディレクトリへ移動

[root@centos vod]# sh /root/convert_to_hls.sh test.flv ← FLV形式⇒HLS形式動画変換

[root@centos vod]# cd ← 動画格納先ディレクトリを抜ける

(4)動画視聴用ページ作成
[root@centos ~]# vi /usr/local/nginx/html/vod.html ← 動画視聴用ページ作成
<!DOCTYPE html>
<html lang="en" class="">
<head>
    <title>ONDEMAND</title>
    <link href="//vjs.zencdn.net/5.11.6/video-js.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.11.6/video.js"></script>
</head>
<body>
  <video id="ONDEMAND" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="640" height="480" data-setup="{}">
    <source src="/vod/HLSファイル名(例:test.m3u8)" type="application/x-mpegURL">
    <source src="rtmp://サーバー名/vod/FLVファイル名(例:test.flv)" type="rtmp/mp4">
    <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>
  </video>
</body>
</html>

□PCブラウザからhttp://サーバー名:8080/vod.htmlへアクセスして動画が視聴できること
□iPhoneまたはiPadからhttp://サーバー名:8080/vod.htmlへアクセスして動画が視聴できること


■ライブ配信確認

【PCから配信する場合】

(1)Flash Media Live Encoderインストール
Flash Media Live Encoderを使用してカメラ映像・音声をサーバーへ送信するため、カメラを接続する端末でFlash Media Live EncoderダウンロードサイトでFlash Media Live Encoderをダウンロードしてインストール

(2)ライブ配信
Flash Media Live Encoderを起動

「Encoding Options」タブを選択

【画面左側】
「Preset」で「High Bandwidth(300bps)-H.264」を選択

「Format」のレンチボタンを押下して「Advanced Encoder Settings」ダイアログボックスの「Keyframe Frequency」で「4 Seconds」を選択

【画面右側】
「FMS URL」に"rtmp://サーバーIPアドレス/live"と入力※左記の"live"はアプリケーション名(nginx.confのapplicationで指定した値)を指定

「Stream」に"live"と入力※左記の"live"はストリームキー(任意の値)を指定

「Connect」ボタン押下

「Start」ボタン押下

これでサーバーにカメラ映像・音声の送信が開始される。


【iPhoneから配信する場合】

(1)Broadcast Meインストール
iPhoneにBroadcast Me(無料)をインストール

(2)ライブ配信
Broadcast Meを起動


「Start streaming!」をタップ


左へスワイプ


歯車アイコンをタップ


「Server URL」をタップ


「Stream Server URL」に"rtmp://サーバー名/live/live"と入力して「Add」、「Done」の順にタップ※左記の"/live/live"は"/アプリケーション名(nginx.confのapplicationで指定した値)/ストリームキー(任意の値)"を指定


右へスワイプ


「録画」ボタン(赤い○)をタップ

これでサーバーにカメラ映像・音声の送信が開始される。

(3)ライブ動画視聴用ページ作成
[root@centos ~]# vi /usr/local/nginx/html/live.html ← ライブ動画視聴用ページ作成
<!DOCTYPE html>
<html lang="en" class="">
<head>
    <title>LIVE</title>
    <link href="//vjs.zencdn.net/5.11.6/video-js.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.11.6/video.js"></script>
</head>
<body>
  <video id="LIVE" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="640" height="480" data-setup="{}">
    <source src="/HLS(HTTP Live Streaming)ファイル作成先/アプリケーション名.m3u8(例:/live/live.m3u8)" type="application/x-mpegURL">
    <source src="rtmp://サーバー名/アプリケーション名/ストリームキー(例:/live/live)" type="rtmp/mp4">
    <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>
  </video>
</body>
</html>

□PCブラウザからhttp://サーバー名:8080/live.htmlへアクセスしてカメラ映像・音声が視聴できること
□iPhoneまたはiPadからhttp://サーバー名:8080/live.htmlへアクセスしてカメラ映像・音声が視聴できること




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

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