T-CREATOR

FFmpeg 配信設計の実際:tee muxer でマルチプラットフォーム同時配信

FFmpeg 配信設計の実際:tee muxer でマルチプラットフォーム同時配信

YouTube、Twitch、Facebook Live など、複数のプラットフォームに同時に配信したいというニーズは年々高まっています。しかし、単純に FFmpeg を複数起動すると CPU 負荷が倍増し、エンコード品質も安定しません。

この記事では、FFmpeg の tee muxer を使って、1 回のエンコードで複数のプラットフォームに効率的に同時配信する方法を解説します。実際の配信設計に必要な設定、エラー処理、デバッグ方法まで、実践的な内容をお届けします。

背景

ライブ配信におけるマルチプラットフォーム展開

現代のライブ配信では、視聴者の接点を増やすために複数のプラットフォームへの同時配信が一般的になっています。企業のウェビナーでは YouTube と自社サイトへ、ゲーム実況では Twitch と YouTube Gaming へ、というように複数の配信先を持つケースが増えました。

従来の方法では、配信先ごとに FFmpeg プロセスを起動していました。しかし、この方法では配信先が増えるほど CPU 負荷が増大し、エンコード品質の維持が困難になります。

FFmpeg と muxer の役割

FFmpeg は動画・音声の変換や配信を行う強力なツールです。その処理フローは以下のように整理できます。

以下の図は、FFmpeg の基本的な処理フローを示しています。

mermaidflowchart LR
  input["入力ソース<br/>(カメラ/ファイル)"] --> decoder["デコーダ"]
  decoder --> encoder["エンコーダ<br/>(H.264/AAC)"]
  encoder --> muxer["Muxer<br/>(コンテナ化)"]
  muxer --> output["出力先<br/>(RTMP/ファイル)"]

muxer(マルチプレクサ)は、エンコードされた映像・音声ストリームを特定のコンテナフォーマット(FLV、MP4、TS など)にパッケージ化する役割を担います。通常、1 つの muxer は 1 つの出力先に対応しますが、tee muxer はこの常識を覆す特別な存在なのです。

課題

複数プロセス起動による問題点

複数のプラットフォームに配信する際、最も単純な方法は FFmpeg を配信先の数だけ起動することです。

bash# YouTube 向け
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://youtube.com/live/KEY1
bash# Twitch 向け(別プロセス)
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://twitch.tv/app/KEY2

この方法には以下の深刻な課題があります。

#課題詳細
1CPU 負荷の増大エンコード処理が配信先の数だけ実行されるため、2 配信なら約 2 倍の CPU を消費
2メモリ消費各プロセスが独立してバッファを保持するため、メモリ使用量も増加
3同期のずれ各プロセスが独立して動作するため、配信のタイミングがずれる可能性
4管理の複雑化複数プロセスの起動・停止・監視が必要で、エラー処理が煩雑

エンコード処理のボトルネック

動画配信において、最も CPU 負荷が高いのはエンコード処理です。H.264 エンコーダは複雑な圧縮アルゴリズムを実行するため、フル HD(1920×1080)の映像を 30fps でエンコードする場合、通常 CPU の 1〜2 コアを占有します。

配信先が 3 つあれば、単純計算で 3〜6 コアが必要になり、一般的なマシンでは処理しきれなくなってしまいます。配信中にエンコードが間に合わなくなると、フレームドロップが発生し、視聴者に カクカクした映像が届いてしまうのです。

以下の図は、複数プロセス起動時のリソース消費を示しています。

mermaidflowchart TD
  source["映像ソース"] --> proc1["FFmpeg<br/>プロセス 1"]
  source --> proc2["FFmpeg<br/>プロセス 2"]
  source --> proc3["FFmpeg<br/>プロセス 3"]

  proc1 --> encode1["エンコード処理<br/>(CPU 使用)"]
  proc2 --> encode2["エンコード処理<br/>(CPU 使用)"]
  proc3 --> encode3["エンコード処理<br/>(CPU 使用)"]

  encode1 --> yt["YouTube"]
  encode2 --> tw["Twitch"]
  encode3 --> fb["Facebook Live"]

この図から分かるように、各プロセスが独立してエンコード処理を実行しているため、CPU リソースが 3 倍消費されています。

解決策

tee muxer の仕組み

tee muxer は、1 回のエンコード結果を複数の出力先に分配する特殊な muxer です。名前の由来は UNIX の tee コマンド(標準入力を複数の出力先に分岐する)と同じ概念から来ています。

tee muxer を使用すると、以下のような処理フローが実現できます。

mermaidflowchart TD
  source["映像ソース"] --> ffmpeg["FFmpeg<br/>プロセス"]
  ffmpeg --> decode["デコード"]
  decode --> encode["エンコード処理<br/>(1回のみ)"]
  encode --> tee["tee muxer"]

  tee --> mux1["FLV muxer"]
  tee --> mux2["FLV muxer"]
  tee --> mux3["FLV muxer"]

  mux1 --> yt["YouTube"]
  mux2 --> tw["Twitch"]
  mux3 --> fb["Facebook Live"]

この図から分かるように、エンコード処理は1 回だけ実行され、その結果が tee muxer によって複数の muxer に分配されます。これにより CPU 負荷を大幅に削減できるのです。

tee muxer の基本構文

tee muxer を使用する基本的な構文は以下の通りです。

bashffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f tee "[f=flv]rtmp://server1/stream|[f=flv]rtmp://server2/stream"

この構文の各要素を分解してみましょう。

bash# 入力ソースの指定
-i input.mp4

入力ソースとして input.mp4 を指定しています。リアルタイム配信の場合は、カメラデバイス(-i ​/​dev​/​video0)や RTMP ソース(-i rtmp:​/​​/​source​/​stream)を指定します。

bash# エンコーダの指定
-c:v libx264 -c:a aac

映像コーデックに H.264(libx264)、音声コーデックに AAC(aac)を指定します。このエンコード処理は 1 回だけ実行されます。

bash# tee muxer の指定
-f tee "[f=flv]rtmp://server1/stream|[f=flv]rtmp://server2/stream"

-f tee で tee muxer を指定し、その後の文字列で各出力先を |(パイプ)で区切って列挙します。各出力先は [オプション]URL の形式で記述します。

出力先ごとのオプション指定

tee muxer では、各出力先に対して個別のオプションを指定できます。これにより、プラットフォームごとに異なる設定を適用できるのです。

bashffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://youtube.com/live/KEY1|\
[f=flv:onfail=ignore]rtmp://twitch.tv/app/KEY2"

この例では onfail=ignore オプションを各出力先に指定しています。このオプションは、1 つの配信先で障害が発生しても、他の配信先への送信を継続する重要な設定です。

主要なオプションを表にまとめました。

#オプション説明使用例
1f出力フォーマット(コンテナ形式)を指定f=flv, f=mpegts
2onfail送信失敗時の動作(ignore で他の出力を継続)onfail=ignore
3select送信するストリームを選択select=v:0,a:0
4movflagsMP4 出力時のフラグ指定movflags=+faststart

具体例

YouTube と Twitch への同時配信

実際に YouTube と Twitch に同時配信する具体的なコマンドを見てみましょう。

bash#!/bin/bash
# YouTube と Twitch への同時配信スクリプト

# 配信キーの設定
YOUTUBE_KEY="your-youtube-stream-key"
TWITCH_KEY="your-twitch-stream-key"

配信キーは各プラットフォームのダッシュボードから取得します。本番環境では環境変数や設定ファイルから読み込むことを推奨します。

bash# FFmpeg による同時配信コマンド
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}"

このコマンドの各オプションについて詳しく解説します。

bash# 入力オプション
-re -i input.mp4

-re オプションは、入力を元のフレームレートで読み込むことを指示します。これにより、ファイルからの配信でもリアルタイム配信のように動作します。

bash# 映像エンコード設定
-c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k

各パラメータの意味を説明します。

#パラメータ説明
1-c:vlibx264H.264 エンコーダを使用
2-presetveryfastエンコード速度を優先(ultrafastveryslow まで選択可能)
3-b:v3000k映像ビットレート 3 Mbps
4-maxrate3000k最大ビットレート(VBR 制御用)
5-bufsize6000kレートコントロールバッファサイズ(通常は maxrate の 2 倍)
bash# 音声エンコード設定
-c:a aac -b:a 128k -ar 44100

音声は AAC コーデックで 128 kbps、サンプリングレート 44.1 kHz で エンコードします。ほとんどのプラットフォームがこの設定をサポートしています。

bash# GOP(Group of Pictures)設定
-g 60 -keyint_min 60 -sc_threshold 0

GOP 設定はライブ配信において非常に重要です。

  • -g 60: キーフレーム間隔を 60 フレーム(30fps なら 2 秒)に設定
  • -keyint_min 60: 最小キーフレーム間隔も 60 に固定
  • -sc_threshold 0: シーン検出によるキーフレーム挿入を無効化

これらの設定により、キーフレームが一定間隔で挿入され、配信の安定性が向上します。

3 つ以上のプラットフォームへの配信

配信先を追加する場合も、tee muxer の出力先リストに追記するだけです。

bash#!/bin/bash
# YouTube、Twitch、Facebook Live への同時配信

YOUTUBE_KEY="your-youtube-key"
TWITCH_KEY="your-twitch-key"
FACEBOOK_KEY="your-facebook-key"
bashffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}|\
[f=flv:onfail=ignore]rtmps://live-api-s.facebook.com:443/rtmp/${FACEBOOK_KEY}"

Facebook Live は RTMPS(RTMP over TLS)を使用するため、rtmps:​/​​/​ プロトコルを指定します。ポート番号 443 も明示的に指定しています。

カメラからのリアルタイム配信

ファイルではなく、カメラデバイスから直接配信する場合の設定です。

bash# Linux(V4L2)の場合
ffmpeg -f v4l2 -i /dev/video0 \
  -f alsa -i hw:0 \
  -c:v libx264 -preset veryfast -b:v 2500k -maxrate 2500k -bufsize 5000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}"
bash# macOS(AVFoundation)の場合
ffmpeg -f avfoundation -i "0:0" \
  -c:v libx264 -preset veryfast -b:v 2500k -maxrate 2500k -bufsize 5000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}"

macOS の場合、-f avfoundation -i "0:0" で、デバイス 0(カメラ)とデバイス 0(マイク)を入力として指定します。使用可能なデバイスは ffmpeg -f avfoundation -list_devices true -i "" で確認できます。

配信とローカル録画の同時実行

配信しながら、同時にローカルにも高品質で録画したいケースがあります。tee muxer を使えばこれも簡単に実現できます。

bashffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}|\
[f=mp4:movflags=+faststart]archive_$(date +%Y%m%d_%H%M%S).mp4"

最後の出力先として MP4 ファイルを指定しています。movflags=+faststart オプションにより、ファイルのメタデータが先頭に配置され、後から再生しやすい形式で保存されます。

ファイル名に $(date +%Y%m%d_%H%M%S) を使用することで、実行時のタイムスタンプが自動的に付与されます(例:archive_20250120_153045.mp4)。

エラー処理とログ出力

本番環境では、適切なエラー処理とログ出力が不可欠です。

bash#!/bin/bash
# エラー処理を含む配信スクリプト

set -euo pipefail  # エラー時に即座にスクリプトを終了

LOG_DIR="./logs"
LOG_FILE="${LOG_DIR}/stream_$(date +%Y%m%d_%H%M%S).log"

set -euo pipefail により、コマンドがエラーを返した場合に即座にスクリプトが終了します。これにより、エラーを見逃すリスクが減少します。

bash# ログディレクトリの作成
mkdir -p "${LOG_DIR}"

# 配信キーの検証
if [[ -z "${YOUTUBE_KEY:-}" ]] || [[ -z "${TWITCH_KEY:-}" ]]; then
  echo "Error: 配信キーが設定されていません" >&2
  exit 1
fi

配信キーが設定されているか事前にチェックし、未設定の場合はエラーメッセージを標準エラー出力に出力してスクリプトを終了します。

bash# FFmpeg 実行(ログ出力付き)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}" \
  2>&1 | tee "${LOG_FILE}"

2>&1 | tee "${LOG_FILE}" により、標準エラー出力を標準出力にリダイレクトし、tee コマンドで画面とログファイルの両方に出力します。

bash# 終了コードの確認
EXIT_CODE=${PIPESTATUS[0]}
if [[ ${EXIT_CODE} -ne 0 ]]; then
  echo "Error: FFmpeg が終了コード ${EXIT_CODE} で終了しました" >&2
  echo "詳細はログファイルを確認してください: ${LOG_FILE}" >&2
  exit ${EXIT_CODE}
fi

echo "配信が正常に完了しました"

${PIPESTATUS[0]} を使用することで、パイプの最初のコマンド(FFmpeg)の終了コードを取得できます。これにより、tee コマンドの終了コードではなく、FFmpeg 自体の終了コードを確認できます。

デバッグとトラブルシューティング

よくあるエラーと対処法

tee muxer を使用した配信でよく遭遇するエラーとその解決方法を紹介します。

エラー 1: No such filter: 'tee'

lua[NULL @ 0x7f8b9c000000] Unable to find a suitable output format for 'tee'
tee: No such filter
Error: Output format 'tee' not found

発生条件: FFmpeg が tee muxer をサポートしていないバージョンでコンパイルされている場合に発生します。

解決方法:

  1. FFmpeg のバージョンを確認します
bashffmpeg -version
  1. tee muxer のサポート状況を確認します
bashffmpeg -muxers | grep tee
  1. tee が表示されない場合は、FFmpeg を再インストールします
bash# Ubuntu/Debian の場合
sudo apt update
sudo apt install --reinstall ffmpeg
bash# macOS(Homebrew)の場合
brew reinstall ffmpeg

エラー 2: Connection to tcp:​/​​/​... failed

vbnet[tcp @ 0x7f8b9c000000] Connection to tcp://a.rtmp.youtube.com:1935 failed: Connection refused
rtmp://a.rtmp.youtube.com/live2/KEY: Connection refused
Error: Connection failed

発生条件: RTMP サーバーへの接続が拒否された場合に発生します。主な原因は以下の通りです。

#原因確認方法
1配信キーが間違っているプラットフォームのダッシュボードで確認
2ネットワークがブロックしているファイアウォール設定を確認
3RTMP サーバーがダウンしている別のツールで接続テスト
4配信が有効化されていないアカウント設定を確認

解決方法:

bash# telnet で RTMP サーバーへの接続をテスト
telnet a.rtmp.youtube.com 1935

接続できない場合は、ネットワーク設定やファイアウォールを確認します。

bash# curl で HTTPS 経由の疎通確認
curl -v https://www.youtube.com

エラー 3: Past duration ... too large

sql[flv @ 0x7f8b9c000000] Past duration 0.123456 too large
Error: Invalid timestamp

発生条件: タイムスタンプの整合性が取れない場合に発生します。特にカメラデバイスから入力する際に発生しやすいエラーです。

解決方法:

bash# タイムスタンプを再生成する
ffmpeg -re -i input.mp4 \
  -c:v libx264 -c:a aac \
  -fflags +genpts \
  -f tee "..."

-fflags +genpts オプションを追加することで、FFmpeg がタイムスタンプを再生成します。

エラー 4: frame= ... fps= ... q= ... size= ... time= ... bitrate= ... speed=... が表示されない

これはエラーではなく、-f tee 使用時に進捗情報が表示されない仕様です。

解決方法: 詳細なログを出力するには -loglevel オプションを使用します。

bashffmpeg -re -i input.mp4 \
  -c:v libx264 -c:a aac \
  -loglevel info \
  -f tee "..."

ログレベルは以下から選択できます。

#レベル説明
1quietログを出力しない
2errorエラーのみ出力
3warning警告以上を出力
4info情報メッセージも出力(デフォルト)
5verbose詳細情報を出力
6debugデバッグ情報を出力

配信の監視とモニタリング

配信が正常に動作しているかをリアルタイムで監視する方法です。

bash#!/bin/bash
# 配信監視スクリプト

YOUTUBE_KEY="your-youtube-key"
TWITCH_KEY="your-twitch-key"
STATS_FILE="./stream_stats.log"
bash# FFmpeg を進捗情報出力モードで実行
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -progress pipe:1 \
  -f tee \
  "[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|\
[f=flv:onfail=ignore]rtmp://live.twitch.tv/app/${TWITCH_KEY}" \
  2>&1 | tee -a "${STATS_FILE}"

-progress pipe:1 オプションにより、FFmpeg は進捗情報を key=value 形式で標準出力に出力します。これを解析することで、現在のビットレート、処理フレーム数、速度などをリアルタイムで取得できます。

以下は、進捗情報を解析して統計を表示するスクリプトです。

bash#!/bin/bash
# 配信統計表示スクリプト

tail -f stream_stats.log | while read line; do
  if [[ $line =~ ^frame=([0-9]+) ]]; then
    FRAME="${BASH_REMATCH[1]}"
    echo "処理フレーム数: ${FRAME}"
  elif [[ $line =~ bitrate=([0-9.]+)kbits/s ]]; then
    BITRATE="${BASH_REMATCH[1]}"
    echo "現在のビットレート: ${BITRATE} kbps"
  elif [[ $line =~ speed=([0-9.]+)x ]]; then
    SPEED="${BASH_REMATCH[1]}"
    echo "処理速度: ${SPEED}x"
  fi
done

パフォーマンスチューニング

配信品質を最適化するためのチューニングポイントを紹介します。

CPU 使用率の最適化

-preset オプションは、エンコード速度と圧縮率のトレードオフを制御します。

#presetCPU 負荷圧縮効率推奨用途
1ultrafast最小最低高解像度・複数配信先
2veryfast一般的な配信
3fast品質重視の配信
4medium録画用途
5slow最大最高オフライン変換
bash# 高解像度で複数配信する場合は ultrafast を使用
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f tee "..."

ネットワーク帯域の最適化

アップロード帯域が限られている場合は、ビットレートを調整します。

bash# 低帯域環境向け設定(1.5 Mbps)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast \
  -b:v 1200k -maxrate 1200k -bufsize 2400k \
  -s 1280x720 \
  -c:a aac -b:a 96k -ar 44100 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -f tee "..."

解像度を 720p(-s 1280x720)に下げ、ビットレートも 1.2 Mbps に抑えています。音声ビットレートも 96 kbps に削減しました。

バッファリング設定

ネットワークの揺らぎに対応するため、適切なバッファ設定が重要です。

bashffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k \
  -rtbufsize 100M \
  -f tee "..."

-rtbufsize 100M により、リアルタイムバッファサイズを 100 MB に設定します。これにより、一時的なネットワーク遅延に対応できます。

以下の図は、tee muxer を使った最適化されたマルチプラットフォーム配信のフロー全体を示しています。

mermaidflowchart TB
  input["入力ソース<br/>(カメラ/ファイル)"] --> decode["デコード処理"]
  decode --> encode["H.264 エンコード<br/>(preset: veryfast)<br/>(bitrate: 3000k)"]

  encode --> tee["tee muxer<br/>(1回のエンコード結果を分配)"]

  tee --> flv1["FLV muxer<br/>(onfail: ignore)"]
  tee --> flv2["FLV muxer<br/>(onfail: ignore)"]
  tee --> flv3["FLV muxer<br/>(onfail: ignore)"]

  flv1 --> yt["YouTube<br/>(RTMP)"]
  flv2 --> tw["Twitch<br/>(RTMP)"]
  flv3 --> fb["Facebook Live<br/>(RTMPS)"]

  tee -.-> monitor["監視・ログ出力<br/>(-progress pipe:1)"]

この図から分かるように、エンコード処理が 1 回だけ実行され、tee muxer が各プラットフォームに効率的に分配しています。各出力先には onfail=ignore が設定されており、1 つの配信先で障害が発生しても他は継続します。

まとめ

FFmpeg の tee muxer を使用することで、複数のプラットフォームへの同時配信を効率的に実現できます。この記事で解説した内容を振り返ってみましょう。

重要なポイント

  1. エンコードは 1 回だけ: tee muxer により、1 回のエンコード結果を複数の配信先に分配できるため、CPU 負荷を大幅に削減できます

  2. 柔軟な設定: 各出力先に対して個別のオプション(onfail=ignore など)を指定でき、1 つの配信先の障害が他に影響しない設計が可能です

  3. 実用的なエラー処理: ログ出力、エラーハンドリング、監視スクリプトを組み合わせることで、本番環境でも安定した配信を実現できます

  4. パフォーマンス最適化: -preset、ビットレート、バッファサイズなどを環境に応じて調整することで、配信品質と負荷のバランスを取れます

活用シーン

tee muxer は以下のようなシーンで特に有効です。

  • 企業のウェビナーを YouTube と自社サイトで同時配信
  • ゲーム実況を Twitch、YouTube Gaming、Facebook Gaming に同時配信
  • イベント配信を複数のプラットフォームと録画ファイルに同時出力
  • CDN の複数エッジサーバーへの配信

次のステップ

この記事で学んだ内容をベースに、以下のような発展的な取り組みも可能です。

  • Docker コンテナ化して、スケーラブルな配信基盤を構築
  • Kubernetes でオートスケーリング可能な配信システムを設計
  • プログラムから FFmpeg を制御して、動的に配信先を追加・削除
  • Prometheus と Grafana で配信状態をリアルタイム監視

tee muxer は、マルチプラットフォーム配信における強力な武器となります。ぜひ実際の環境で試してみてください。

関連リンク