ライブ配信サーバー構築 〜 エンコーダ (FFmpeg) の設定 〜
エンコーダの準備 (Ubuntu 8.10 Server)
FFmpeg を利用してカメラの映像をエンコードします。IEEE1394 (/dev/raw1394
) から入力をもらうことを想定。
公開用の Web サーバとエンコーダを分けて用意する場合は両方に同じ FFmpeg をインストールすること。
FFmpeg
余計なライブラリや設定が入っているかもしれません。
インストール
- FFmpeg (FFserver デフォルトで付属) + 必要なコーデック
- dvgrab
- IEEE1394 の入力を受け取るソフト
ビルド環境
ソースからビルドする環境を準備する
sudo apt-get install gcc build-essential autoconf automake texinfo libtool gawk git git-core subversion nasm yasm
ソースからインストールする際の注意点
- ソースの保存場所
/usr/local/src
で作業する ./configure --help
でオプションを必ず確認する。--enable-hoge
と--with-hoge
類に注意する。
sudo
を念のため全部につけてある。
コーデックの準備
依存関係があるものもあるので順番に注意
lame
sudo wget http://sourceforge.net/projects/lame/files/lame/3.98/lame-398.tar.gz/download
sudo tar xzvf lame-398.tar.gz
cd lame-398
sudo ./configure
sudo make
sudo make install
x264
sudo git clone git://git.videolan.org/x264.git
cd x264
sudo ./configure --enable-shared # オプションに注意 (要らないかも)
sudo make
sudo make install
libmp4v2
sudo wget http://resare.com/libmp4v2/dist/libmp4v2-1.5.0.1.tar.bz2
sudo tar -xjvf libmp4v2-1.5.0.1.tar.bz2
cd libmp4v2-1.5.0.1
sudo ./configure
sudo make
sudo make install
libogg
sudo wget http://downloads.xiph.org/releases/ogg/libogg-1.1.4.tar.gz
sudo tar xzvf libogg-1.1.4.tar.gz
cd libogg-1.1.4
sudo ./configure
sudo make
sudo make install
liboil
sudo wget http://liboil.freedesktop.org/download/liboil-0.3.16.tar.gz
sudo tar xzvf liboil-0.3.16
cd liboil-0.3.16
sudo ./configure
sudo make
sudo make install
libraw1394
sudo wget http://sourceforge.net/projects/libraw1394/files/libraw1394/libraw1394-2.0.0.tar.gz/download
sudo tar xzvf libraw1394-2.0.0.tar.gz
cd libraw1394-2.0.0
sudo ./configure
sudo make
sudo make install
sudo make dev # make dev すると /dev/raw1394 のデバイスファイルが作成される
libfaad2
sudo wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
sudo tar xzvf faad2-2.7.tar.gz
cd faad2-2.7
sudo ./configure
sudo make
sudo make install
faac
sudo wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
sudo tar xzvf faac-1.28.tar.gz
cd faac-1.28
sudo ./configure --with-mp4v2 # オプションに注意 (要らないかも)
sudo make
sudo make install
libdc1394
sudo wget http://sourceforge.net/projects/libdc1394/files/libdc1394-2/2.1.2/libdc1394-2.1.2.tar.gz/download
tar xzvf libdc1394-2.1.2.tar.gz
cd libdc1394-2.1.2
sudo ./configure
sudo make
sudo make install
libgsm
sudo wget http://user.cs.tu-berlin.de/~jutta/gsm/gsm-1.0.13.tar.gz
tar xzvf gsm-1.0.13.tar.gz
cd gsm-1.0.13
- Makefile の修正
sudo vi Makefile
INSTALL_ROOT =/usr
GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include
- 74行目前後の
INSTALL_ROOT =
をINSTALL_ROOT =/usr
に変更 GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc
をGSM_INSTALL_INC =$(GSM_INSTALL_ROOT)/include
に変更
sudo make
sudo make install
古いバージョンのコーデックがインストールされている時に削除しようとしてエラーが出ます。コーデックも関連ライブラリもちゃんとインストールされますので無視してください。
libvorbis
sudo wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz
sudo tar xzvf libvorbis-1.2.3.tar.gz
cd libvorbis-1.2.3
sudo ./configure
sudo make
sudo make install
./configure の test run でエラーしたら $ sudo ldconfig して ./configure を再実行
libtheora
sudo wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
sudo tar xjvf libtheora-1.1.1.tar.bz2
cd libtheora-1.1.1
sudo ./configure
sudo make
sudo make install
libao
sudo wget http://downloads.xiph.org/releases/ao/libao-0.8.8.tar.gz
sudo tar xzvf libao-0.8.8.tar.gz
cd libao-0.8.8
sudo ./configure
sudo make
sudo make install
xvidcore
sudo git clone git://git.debian-maintainers.org/git/unofficial/xvidcore.git
cd xvidcore/build/generic
sudo ./configure
sudo make
sudo make install
libdirac (FFmpeg のビルドでエラーしたので結果的には要らなかった)
sudo wget http://sourceforge.net/projects/dirac/files/dirac-codec/Dirac-1.0.2/dirac-1.0.2.tar.gz/download
sudo tar xzvf dirac-1.0.2.tar.gz
cd dirac-1.0.2
sudo ./configure
sudo make
sudo make install
FFmpeg のビルド
sudo svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
sudo ./configure --enable-gpl --enable-nonfree --enable-pthreads --disable-debug --enable-libdc1394 --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-bzlib --enable-version3 --enable-avfilter --enable-avfilter-lavf
sudo make
sudo make install
ビルドオプションが長いけどこれでうまくいったので。(たぶん要らないのいっぱい)
FFmpeg の動作チェック
- FFmpeg を実行して
/dev/raw1394
の入力が受け取れるかチェック。
sudo ffmpeg -f libdc1394 -s 320x240 -i /dev/raw1394 test.swf
パラメータが動いてエンコードが始まったらOK.
libdc1394 error: Failed to initialize libdc1394
このようなエラーが返ってきたらNG. IEEE1394 の DV Input にまだまだバグがあるっぽい。 (Ubuntu 固有の問題かも)
- NG だったら dvgrab をインストールする
sudo apt-get install dvgrab
これを利用してデバイスから映像を受け取ります。
IEEE1394 (Web Cam) -> dvgrab (DV avi) -> FFmpeg -> swf
という流れ。
- dvgrab を利用して FFmpeg を実行する
sudo dvgrab --format dv2 - | ffmpeg -f dvvideo -s 320x240 -f pcm_s16le -i - -ar 44100 -acodec libmp3lame test.swf
ハイフン “-“ で標準入力出力を扱える。たまに固まるが パイプの前の sudo の認証が切れているのが原因。sudo vi など適当に sudo をいったん認証通してから再度実行。