ライブ映像配信パイプラインを自分で構築する:FFmpeg×MediaMTXの実践ガイド

問題:カメラはRTSPで話しかけるのに、ブラウザは聞き取れない

セキュリティカメラやIoTデバイスからのライブ映像をWebアプリに表示したいとしよう。カメラの大部分はRTSP(Real Time Streaming Protocol)で配信してる。だけブラウザは2010年代からRTSP対応を打ち切った。要するに「カメラが喋ってる言語」と「ブラウザが理解できる言語」が違うのが根本問題だ。

この翻訳を担当するのがFFmpeg(動画処理の万能ナイフ)とMediaMTX(プロトコル変換サーバー)。この2つを組み合わせれば、プロ並みの低遅延ストリーミングパイプラインが組める。

ツール解説

FFmpeg:あらゆる動画形式を変換する魔法の杖

FFmpegの処理フロー:

  • デマルチプレックス:コンテナから動画と音声を分離
  • デコード:圧縮データを生フレームに変換
  • フィルタリング:スケーリング、色補正など適用
  • エンコード:H.264やVP9で圧縮
  • マルチプレックス:出力コンテナにパッケージ化

ストリーミング用途では、FFmpegは入力エンジンとして動作。Webカメラやファイルから映像をキャプチャし、効率良くエンコードして、RTSPやRTMPでサーバーに送出する。

MediaMTX:複数クライアント対応のプロトコルハブ

FFmpegは単一出力だけど、MediaMTXは複数クライアントに同時配信できる。さらに:

  • RTSP/RTMP/WebRTC/HLSで受信
  • 異なるクライアント向けに再パッケージ化
  • RTSPをWebRTCに変換(ブラウザで再生可能に)
  • 認証・負荷分散・クライアント管理

たった1つのバイナリとYAML設定ファイルで、従来は複数専用サーバーが必要な複雑なシーン対応できる。

実装ステップ

ステップ1:ツールをインストール

Ubuntu/Debian:

sudo apt update sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree make -j$(nproc) sudo make install

macOS:

brew install ffmpeg

Windows: gydan.devからダウンロード→C:\ffmpegに解凍→システムPATHに追加

MediaMTX v1.15.0もインストール(単一バイナリで簡単)。

ステップ2:動画ファイルをストリーミング

mediamtx.ymlを作成:

paths: test_video: source: publisher

MediaMTXを起動:

mediamtx mediamtx.yml

FFmpegで動画をRTSPで送出:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re:フレームレート保持(ライブストリーミング必須) -preset fast:エンコード速度のバランス

VLC Media Playerで確認:Media → Open Network Stream → rtsp://localhost:8554/test_video

ステップ3:Webカメラをライブ配信

Windows:

ffmpeg -f dshow -rtbufsize 100M -i video=“Integrated Webcam” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

Linux:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatencyがポイント。リアルタイムストリーミング最適化。

ステップ4:ブラウザで再生(WebRTC化)

mediamtx.ymlを更新:

webrtc: yes webrtcAddress: :8889 webrtcEncryption: no webrtcAllowOrigin: ‘*’

paths: webcam: source: publisher

MediaMTXを再起動して、ブラウザでhttp://localhost:8889を開く→ライブ映像がブラウザに表示される。

データの流れ

  1. Webカメラ → 生フレーム生成
  2. FFmpeg → H.264でエンコード&RTSP送出
  3. MediaMTX → RTSP受信・WebRTC変換
  4. ブラウザ → WebRTCでリアルタイム再生

MediaMTXは再エンコードしない。H.264ストリームを異なるプロトコルのコンテナに詰め替えるだけ。だから低レイテンシー実現。

今回のまとめ

基本的なパイプライン完成:

  • FFmpegとMediaMTX導入済み
  • 動画ファイルとWebカメラのストリーミング確認
  • WebRTC経由ブラウザ再生成功

だけ本番運用には課題あり:

  • 認証・セキュリティなし
  • localhostのみ動作
  • 実IPカメラ対応未
  • エラーハンドリングなし

Part 2では認証追加、IPカメラ接続、インターネット対応に進む。

このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
コメントを追加
コメントを追加
コメントなし
  • ピン