🗂

RTMPサーバーでローカルにある動画を配信する

2024/12/06に公開

この記事はAkitoshi's Advent Calendar 2024の5日目の記事です

これは何

Nginxを使ってRTMPサーバーを建ててひたすらローカルにある動画ファイルを連続再生するストリーミングサーバーを作る話

環境

OS

Ubuntu Server

ソフトウェア

Nginx(RTMP モジュール付き)
FFmpeg(動画のエンコードおよび配信に使用)

Nginx + RTMP モジュールのインストール

必要なパッケージのインストール

sudo apt update
sudo apt install -y nginx libnginx-mod-rtmp ffmpeg

Nginx の設定変更

Nginx の設定ファイルを編集し、RTMP サーバーを有効にします。

sudo nano /etc/nginx/nginx.conf

以下の設定をファイルの末尾に追加します。

rtmp {
    server {
        listen 1935; # RTMP ポート
        chunk_size 4096;

        application live {
            live on; # ライブ配信を有効化
            record off; # 配信の録画を無効化
        }
    }
}

Nginx の再起動

設定を反映させるため、Nginx を再起動します。
sudo systemctl restart nginx

ローカル動画ファイルを配信する

FFmpeg を使用した RTMP 配信

FFmpeg を使用して、ローカルの動画ファイルを RTMP サーバーに送信します。
以下のコマンドを使用します。

ffmpeg -re -i /path/to/your/video.mp4 -c:v copy -c:a aac -f flv rtmp://localhost/live/stream

/path/to/your/video.mp4: 配信する動画ファイルのパスを指定します。
rtmp://localhost/live/stream: 配信先の RTMP サーバー URL。

配信の確認

RTMP 配信を確認するには、以下の方法を使用します。

VLC メディアプレイヤーでの確認

VLC メディアプレイヤーを起動します。
「メディア」 → 「ネットワークストリームを開く」 を選択します。
URL に rtmp://<サーバーのIPアドレス>/live/stream を入力して再生を開始します。

OBS Studio または他の RTMP クライアントでの確認

RTMP URL を指定してストリームを確認できます。

配信の自動化(スクリプトの使用)

配信スクリプトの作成

以下のスクリプトを stream.sh として保存します。

#!/bin/bash

# 配信する動画ファイル
VIDEO_FILE="./videos/processed/merged.mp4"

# RTMP サーバーの URL
RTMP_URL="rtmp://localhost/live/stream"

# 配信開始
ffmpeg -re -i "$VIDEO_FILE" -c:v copy -c:a aac -f flv "$RTMP_URL"

スクリプトに実行権限を付与します。

chmod +x stream.sh

配信スクリプトの実行

以下のコマンドでスクリプトを実行し、配信を開始します。

./stream.sh

配信の停止

RTMP 配信を停止するには、ffmpeg プロセスを終了します。

pkill -f ffmpeg

Discussion