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
この方法には以下の深刻な課題があります。
| # | 課題 | 詳細 |
|---|---|---|
| 1 | CPU 負荷の増大 | エンコード処理が配信先の数だけ実行されるため、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 つの配信先で障害が発生しても、他の配信先への送信を継続する重要な設定です。
主要なオプションを表にまとめました。
| # | オプション | 説明 | 使用例 |
|---|---|---|---|
| 1 | f | 出力フォーマット(コンテナ形式)を指定 | f=flv, f=mpegts |
| 2 | onfail | 送信失敗時の動作(ignore で他の出力を継続) | onfail=ignore |
| 3 | select | 送信するストリームを選択 | select=v:0,a:0 |
| 4 | movflags | MP4 出力時のフラグ指定 | 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:v | libx264 | H.264 エンコーダを使用 |
| 2 | -preset | veryfast | エンコード速度を優先(ultrafast 〜 veryslow まで選択可能) |
| 3 | -b:v | 3000k | 映像ビットレート 3 Mbps |
| 4 | -maxrate | 3000k | 最大ビットレート(VBR 制御用) |
| 5 | -bufsize | 6000k | レートコントロールバッファサイズ(通常は 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 をサポートしていないバージョンでコンパイルされている場合に発生します。
解決方法:
- FFmpeg のバージョンを確認します
bashffmpeg -version
- tee muxer のサポート状況を確認します
bashffmpeg -muxers | grep tee
- 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 | ネットワークがブロックしている | ファイアウォール設定を確認 |
| 3 | RTMP サーバーがダウンしている | 別のツールで接続テスト |
| 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 "..."
ログレベルは以下から選択できます。
| # | レベル | 説明 |
|---|---|---|
| 1 | quiet | ログを出力しない |
| 2 | error | エラーのみ出力 |
| 3 | warning | 警告以上を出力 |
| 4 | info | 情報メッセージも出力(デフォルト) |
| 5 | verbose | 詳細情報を出力 |
| 6 | debug | デバッグ情報を出力 |
配信の監視とモニタリング
配信が正常に動作しているかをリアルタイムで監視する方法です。
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 オプションは、エンコード速度と圧縮率のトレードオフを制御します。
| # | preset | CPU 負荷 | 圧縮効率 | 推奨用途 |
|---|---|---|---|---|
| 1 | ultrafast | 最小 | 最低 | 高解像度・複数配信先 |
| 2 | veryfast | 低 | 低 | 一般的な配信 |
| 3 | fast | 中 | 中 | 品質重視の配信 |
| 4 | medium | 高 | 高 | 録画用途 |
| 5 | slow | 最大 | 最高 | オフライン変換 |
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 回だけ: tee muxer により、1 回のエンコード結果を複数の配信先に分配できるため、CPU 負荷を大幅に削減できます
-
柔軟な設定: 各出力先に対して個別のオプション(
onfail=ignoreなど)を指定でき、1 つの配信先の障害が他に影響しない設計が可能です -
実用的なエラー処理: ログ出力、エラーハンドリング、監視スクリプトを組み合わせることで、本番環境でも安定した配信を実現できます
-
パフォーマンス最適化:
-preset、ビットレート、バッファサイズなどを環境に応じて調整することで、配信品質と負荷のバランスを取れます
活用シーン
tee muxer は以下のようなシーンで特に有効です。
- 企業のウェビナーを YouTube と自社サイトで同時配信
- ゲーム実況を Twitch、YouTube Gaming、Facebook Gaming に同時配信
- イベント配信を複数のプラットフォームと録画ファイルに同時出力
- CDN の複数エッジサーバーへの配信
次のステップ
この記事で学んだ内容をベースに、以下のような発展的な取り組みも可能です。
- Docker コンテナ化して、スケーラブルな配信基盤を構築
- Kubernetes でオートスケーリング可能な配信システムを設計
- プログラムから FFmpeg を制御して、動的に配信先を追加・削除
- Prometheus と Grafana で配信状態をリアルタイム監視
tee muxer は、マルチプラットフォーム配信における強力な武器となります。ぜひ実際の環境で試してみてください。
関連リンク
articleFFmpeg 配信設計の実際:tee muxer でマルチプラットフォーム同時配信
articleFFmpeg マッピング完全攻略:-map/-disposition/-metadata の黄金レシピ
articleFFmpeg 静的ビルド完全版:x264/x265/aom/opus/fdk-aac 対応のフル装備手順
articleFFmpeg 画質評価の作法:VMAF/SSIM/PSNR を揃えて測るベンチ手順
articleFFmpeg 「Non-monotonous DTS」エラー徹底対策:muxer 選定と再エンコード条件
articleFFmpeg コーデック地図 2025:H.264/H.265/AV1/VP9/ProRes/DNxHR の使いどころ
articleGit rev-spec チートシート:^/~/A..B/A...B を完全図解
article【早見表】JavaScript MutationObserver & ResizeObserver 徹底活用:DOM 変化を正しく監視する
articlehtmx × Laravel/PHP 導入手順:Blade パーシャルとルート設計の落とし穴回避
articleHomebrew の Bottle vs ソースビルド比較検証:時間・サイズ・再現性の差をデータで解説
articleGemini CLI プロンプト型カタログ:仕様化・バグ調査・コード変換の雛形 40 パターン
articleHaystack で RAG アーキテクチャ設計:ハイブリッド検索と再ランキングの最適解
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来