備忘録

備忘録

nginx でストリーミングサーバを作る方法

Ⅰ. はじめに

タイトルの通り「nginx でストリーミングサーバを作る方法」です。

Ⅱ. 環境

Ⅲ. やり方

1. ビルドに必要なものをインストールする
yum -y install wget gcc pcre-devel openssl openssl-devel git libxslt-devel
2. nginx-rtmp-module を clone する
git clone https://github.com/arut/nginx-rtmp-module.git
3. nginx をダウンロードする

2018/10/16 時点で 1.14 が stable です。

wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar zxvf nginx-1.14.0.tar.gz
cd nginx-1.14.0/
4. nginx をビルドする
./configure --sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_xslt_module \
--add-module=/root/nginx-rtmp-module

make
make install

groupadd nginx
useradd -g nginx nginx
usermod -s /bin/false nginx
5. init scriptを作成する

以下を全てコピペする
https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

vim /etc/init.d/nginx
chmod 755 /etc/init.d/nginx
6. nginx の設定を変更する
$ vim /etc/nginx/nginx.conf
# 一番下に追記
rtmp {
    server {
        listen 1935;
        access_log /var/log/nginx/rtmp_access.log;
         application live001 {
            live on;
            wait_video on;
            hls on;
            hls_path /usr/local/nginx/html;
            hls_fragment 1s;
            hls_type live;
            # 配信開始時にPOSTされる
            # on_publish http://localhost/api/rtmp/on_publish;
            # 配信終了時にPOSTされる
            # on_publish_done http://localhost/api/rtmp/on_publish_done;
        }
    }
}
7. nginx を起動する
service nginx start

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=1935/tcp --permanent
firewall-cmd --reload
8. 配信を開始する

OBS 等のRTMPに対応した配信クライアントを利用します

URL 5で設定した application の値と合わせます
ストリームキー 何でもOK

f:id:kagasu:20181016155319p:plain

9. 閲覧用のWebページを作成する

index.html

<link href="https://vjs.zencdn.net/6.6.3/video-js.css" rel="stylesheet">
<div>
  <video id="player" width="960" height="540" class="video-js vjs-default-skin" controls>
    <source src="http://[your ip address]/livestream001.m3u8" type="application/x-mpegURL">
  </video>
</div>

<script src="https://vjs.zencdn.net/6.6.3/video.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>
<script>
  let player = videojs('player')
  player.play()
</script>
10. 実行結果

f:id:kagasu:20181016155708p:plain

その他

Q. 視聴者数をリアルタイムで知りたい

A. rtmpで接続されたクライアントのみ統計情報が取得できます。
https://github.com/arut/nginx-rtmp-module/wiki/Getting-number-of-subscribers