HLS.js使用ガイドとベストプラクティス
HLS.jsの動作原理、適用シーン、長所と短所を詳しく解説し、完全なコード例とよくある問題の解決策を提供します。
続きを読む →ゼロから始める、あなただけのライブストリーミングサーバー構築
Nginx-RTMPは、ロシアの開発者Roman Arutyunyanによって開発されたオープンソースのNginxサードパーティモジュールです。NginxにRTMP(Real-Time Messaging Protocol)プロトコルのサポートを追加し、Nginxを機能豊富なストリーミングサーバーに変えることができます。
RTMPプロトコルはもともとMacromedia社(後にAdobeに買収)によって開発され、Flashプレーヤーとサーバー間の音声・動画伝送に使用されていました。Flashが歴史の舞台から消えた現在でも、RTMPプロトコルは低遅延で成熟・安定しているという特徴から、今でもライブ配信の事実上の標準となっています。
UbuntuにNginx-RTMPをインストールするには、RTMPモジュールがNginxの公式モジュールではないため、ソースコードからのコンパイルが必要です。以下に詳細なコンパイルインストール手順を示します。
まず、コンパイルに必要な依存パッケージをインストールします:
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y
NginxとNginx-RTMPモジュールのソースコードをダウンロードします:
cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip -O nginx-rtmp-module.zip
sudo tar zxvf nginx-1.24.0.tar.gz
sudo unzip nginx-rtmp-module.zip
コンパイルパラメータを設定し、RTMPモジュールを追加します:
cd nginx-1.24.0
sudo ./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--add-module=../nginx-rtmp-module-master
sudo make
sudo make install
systemdサービスファイルを作成し、Nginxの管理を容易にします:
sudo tee /etc/systemd/system/nginx.service << EOF
[Unit]
Description=NGINX with RTMP module
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
Windowsシステムでは、コンパイル済みバージョンを使用することで、コンパイルの手間を省けます。
GitHubで有志がコンパイルしたWindowsバージョンをダウンロードするか、以下の方法を使用できます:
# 1. Nginx for Windowsをダウンロード
# http://nginx.org/en/download.html からダウンロード
# 2. nginx-rtmp-moduleをダウンロード
# https://github.com/arut/nginx-rtmp-module からダウンロード
# 注意:Windowsバージョンは特定のコンパイルが必要なため、既製のnginx-rtmp-win32バージョンを直接検索することを推奨
WindowsでDockerを使用するのがより簡単な方法です:
docker run -d \
--name nginx-rtmp \
-p 1935:1935 \
-p 8080:8080 \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
tiangolo/nginx-rtmp
Nginx-RTMPの設定ファイルは nginx.conf で、通常 /usr/local/nginx/conf/ ディレクトリにあります。以下に各設定を詳しく説明します。
これは最も基本的なRTMP設定です:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
HLS出力を設定し、ライブストリームをウェブページで再生できるようにします:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
hls on;
hls_path /tmp/hls;
hls_fragment 3;
hls_playlist_length 15;
hls_cleanup on;
hls_sync 100ms;
}
}
}
http {
server {
listen 8080;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
}
}
MPEG-DASHのサポートを設定します:
application live {
live on;
record off;
dash on;
dash_path /tmp/dash;
dash_fragment 2;
dash_playlist_length 10;
dash_format mp4;
}
FFmpegと連携してリアルタイムマルチビットレートトランスコードを実現します:
application live {
live on;
record off;
exec ffmpeg -i rtmp://localhost/live/$name
-c:v libx264 -crf 23 -preset veryfast -maxrate 2000k -bufsize 4000k -s 1280x720 -c:a aac -b:a 128k -f flv rtmp://localhost/live720/$name
-c:v libx264 -crf 23 -preset veryfast -maxrate 1000k -bufsize 2000k -s 854x480 -c:a aac -b:a 96k -f flv rtmp://localhost/live480/$name
-c:v libx264 -crf 23 -preset veryfast -maxrate 500k -bufsize 1000k -s 640x360 -c:a aac -b:a 64k -f flv rtmp://localhost/live360/$name;
}
application live720 {
live on;
record off;
hls on;
hls_path /tmp/hls/720p;
}
application live480 {
live on;
record off;
hls on;
hls_path /tmp/hls/480p;
}
application live360 {
live on;
record off;
hls on;
hls_path /tmp/hls/360p;
}
最も簡単な配信方法はFFmpegを使用することです:
# ローカルファイルを配信
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://サーバーIP/live/stream1
# 画面を配信
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset fast -pix_fmt yuv420p -f flv rtmp://サーバーIP/live/stream1
OBS Studioは最も人気のあるライブ配信ソフトです。設定方法は以下の通りです:
rtmp://サーバーIP/livestream1(カスタマイズ可能)ffplayまたはVLCでRTMPストリームを再生します:
# FFplayで再生
ffplay rtmp://サーバーIP/live/stream1
# VLCで再生
vlc rtmp://サーバーIP/live/stream1
HLSを設定している場合は、ブラウザで再生することもできます:
http://サーバーIP:8080/hls/stream1.m3u8
HLS(HTTP Live Streaming)はAppleが開発したストリーミングプロトコルです。HTTPベースで互換性が高いという特徴から、ウェブライブ配信やモバイル端末での再生に広く使用されています。
より低い遅延を追求する場合は、以下のように設定できます:
hls on;
hls_path /tmp/hls;
hls_fragment 1;
hls_playlist_length 3;
hls_sync 50ms;
hls_cleanup on;
hls_delete_threshold 3;
この設定により遅延を3-5秒程度に削減できますが、サーバー負荷とネットワークオーバーヘッドが増加します。
Nginx-RTMPは強力なライブ録画機能を提供しており、ライブコンテンツを動画ファイルとして保存できます。
application live {
live on;
record all;
record_path /tmp/records;
record_suffix -%Y%m%d-%H%M%S.flv;
record_unique on;
record_max_size 1000M;
record_max_files 5;
record_interval 30m;
# 録画完了後に実行するスクリプト
exec_record_done ffmpeg -i $path -c copy /path/to/$basename.mp4;
}
Nginx-RTMPには統計機能が標準搭載されており、HTTPページから現在のサーバー状態と接続情報を確認できます。
http {
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/src/nginx-rtmp-module-master/;
}
location /control {
rtmp_control all;
}
}
}
設定完了後、以下のアドレスからアクセスできます:
統計パネルに表示される情報は以下の通りです:
controlインターフェースを通じてライブ配信をリモート制御できます:
ファイアウォールで必要なポートが開放されていることを確認してください:
# UFWファイアウォール
sudo ufw allow 1935/tcp
sudo ufw allow 8080/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 1935 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
NginxがHLSセグメントディレクトリへの書き込み権限を持っていることを確認してください:
sudo mkdir -p /tmp/hls /tmp/records
sudo chown -R www-data:www-data /tmp/hls /tmp/records
Nginxの設定を調整して同時接続能力を向上させます:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
他人による無断配信を防ぐため、認証を追加できます:
application live {
live on;
record off;
# 簡単なURL認証
on_publish http://localhost/auth;
}
# HTTP認証サービス(例)
location /auth {
if ($arg_key = "your-secret-key") {
return 200;
}
return 403;
}
Nginx-RTMPは機能豊富なオープンソースのストリーミングサーバーモジュールであり、これを使用することで自分だけのライブ配信システムを簡単に構築できます。本記事では、モジュールの紹介、インストール・デプロイ、設定の詳細解説から機能の使用方法まで、Nginx-RTMPの使い方を全面的に紹介しました。
個人配信、企業研修、オンライン教育のいずれにおいても、Nginx-RTMPは安定して信頼できるストリーミングサービスを提供できます。FFmpegと組み合わせることで、リアルタイムトランスコードやマルチビットレート出力など、より多くの高度な機能を実現できます。
ストリーミングサーバーを構築した後は、当社の M3U8オンラインプレーヤー を使用してHLSライブストリームの再生效果をテストできます。ブラウザでHLSアドレスを入力するだけで再生できます。
その他の役立つ記事とツール