ffmpegでストリーミング配信

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

現在(2016/2/19)3.0系が最新です
1.x系、2.0、2.1、2.2、2.3、2.4系はメンテされていないそうです。
3.x系は3.0
2.x系は2.8.6
2.7.6
2.6.8
2.5.1 がそれぞれリリースされています。 双方コンパイルオプションが異なるので、適宜追加していきますか。

2.8系から3.0系でのコンパイルオプションの変更点としては
AACがネイティブサポートになったことで、libaacplus及びlibvo-aacencの
サポートがなくなったようです。
それ以外にlibquvi、libstagefright-h264がコンパイルオプションから消えて
chromaprint、gcrypt、gmp、librubberband、libtesseract、libzimg、netcdfが
新たに増えています。

2.5系ではx265(libx265 hevc)でのエンコードに対応したところでしょうか

Fedora/RHEL系のrpmを作ってあるので、使ってみたい方はこちらから適当に持って行ってください。

なお、momo-i-reposのrpm入れておくとyumで依存関係もろもろインストールしてくれると思いますよ

Fedora23での3.0用のコンパイルオプション

--extra-cflags='-fPIC \
-I/usr/include/samba-4.0' \
--extra-ldflags='-lstdc++ \
-lsmbclient' \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-avresample \
--enable-videotoolbox \
--enable-bzlib \
--enable-chromaprint \
--enable-fontconfig \
--enable-gcrypt \
--enable-gmp \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libdc1394 \
--enable-libfaac \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libopenh264 \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-libzimg \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-pthreads \
--enable-postproc \
--enable-avfilter \
--enable-x11grab \
--enable-libxcb \
--enable-libxcb-shm \
--enable-libxcb-xfixes \
--enable-libxcb-shape \
--enable-libopencv \
--enable-libcdio \
--enable-libfreetype \
--enable-libvo-amrwbenc \
--enable-libfdk-aac \
--enable-frei0r \
--enable-libcelt \
--enable-libvpx \
--enable-libfribidi \
--enable-libtesseract \
--enable-libtheora \
--enable-libass \
--enable-libbluray \
--enable-libv4l2 \
--enable-netcdf \
--enable-openal \
--enable-libschroedinger \
--enable-libpulse \
--enable-librubberband \
--enable-gnutls \
--enable-openssl \
--enable-libspeex \
--enable-libgme \
--enable-libzmq \
--enable-libshine \
--enable-libsmbclient \
--enable-libgsm \
--enable-libtwolame \
--enable-libopus \
--enable-ladspa \
--enable-libcaca \
--enable-libiec61883 \
--enable-libmodplug \
--enable-libilbc \
--enable-libssh \
--enable-libvidstab \
--enable-libwavpack \
--enable-libzvbi \
--enable-pic \
--enable-thumb \
--enable-libbs2b \
--enable-libwebp \
--enable-libx265 \
--enable-opengl \
--enable-opencl \
--enable-libdcadec \
--enable-decklink \
--enable-libkvazaar \
--enable-libsnappy

Fedora22での2.7.1用のコンパイルオプション

./configure \
'--extra-cflags=-fPIC -I/usr/include/samba-4.0' \
'--extra-ldflags=-lstdc++ -lsmbclient' \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-avresample \
--enable-bzlib \
--enable-fontconfig \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libdc1394 \
--enable-libfaac \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-pthreads \
--enable-postproc \
--enable-avfilter \
--enable-x11grab \
--enable-libxcb \
--enable-libxcb-shm \
--enable-libxcb-xfixes \
--enable-libxcb-shape \
--enable-libaacplus \
--enable-libopencv \
--enable-libcdio \
--enable-libfreetype \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc \
--enable-libfdk-aac \
--enable-frei0r \
--enable-libcelt \
--enable-libvpx \
--enable-libfribidi \
--enable-libtheora \
--enable-libass \
--enable-libbluray \
--enable-libv4l2 \
--enable-openal \
--enable-libschroedinger \
--enable-libpulse \
--enable-gnutls \
--enable-openssl \
--enable-libspeex \
--enable-libgme \
--enable-libzmq \
--enable-libshine \
--enable-libsmbclient \
--enable-libgsm \
--enable-libtwolame \
--enable-libopus \
--enable-ladspa \
--enable-libcaca \
--enable-libiec61883 \
--enable-libmodplug \
--enable-libilbc \
--enable-libssh \
--enable-libvidstab \
--enable-libwavpack \
--enable-libzvbi \
--enable-pic \
--enable-thumb \
--enable-libbs2b \
--enable-libwebp \
--enable-libx265 \
--enable-opengl \
--enable-opencl \
--enable-libdcadec \
--enable-decklink

Fedora20での1.2.6のコンパイルオプション

./configure \
--extra-cflags=-fPIC \
--extra-ldflags="-lstdc++" \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-avresample \
--enable-bzlib \
--enable-fontconfig \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libdc1394 \
--enable-libfaac \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-pthreads \
--enable-postproc \
--enable-avfilter \
--enable-x11grab \
--enable-libaacplus \
--enable-libopencv \
--enable-libcdio \
--enable-libfreetype \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc \
--enable-libfdk-aac \
--enable-frei0r \
--enable-libcelt \
--enable-libvpx \
--enable-libtheora \
--enable-libass \
--enable-libbluray \
--enable-libv4l2 \
--enable-openal \
--enable-libschroedinger \
--enable-libpulse \
--enable-gnutls \
--enable-openssl \
--enable-libspeex \
--enable-libgsm \
--enable-libmodplug \
--enable-libtwolame \
--enable-libopus \
--enable-libcaca \
--enable-libiec61883 \
--enable-libilbc \
--enable-pic \
--enable-thumb

Fedora20での2.1.4のコンパイルオプション

./configure \
--extra-cflags=-fPIC \
--extra-ldflags=-lstdc++ \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-avresample \
--enable-bzlib \
--enable-fontconfig \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libdc1394 \
--enable-libfaac \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-pthreads \
--enable-postproc \
--enable-avfilter \
--enable-x11grab \
--enable-libaacplus \
--enable-libopencv \
--enable-libcdio \
--enable-libfreetype \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc \
--enable-libfdk-aac \
--enable-frei0r \
--enable-libcelt \
--enable-libvpx \
--enable-opencl \
--enable-libtheora \
--enable-libass \
--enable-libbluray \
--enable-libv4l2 \
--enable-openal \
--enable-libschroedinger \
--enable-libpulse \
--enable-gnutls \
--enable-openssl \
--enable-libspeex \
--enable-libgme \
--enable-libzmq \
--enable-libshine \
--disable-yasm \
--enable-libgsm \
--enable-libmodplug \
--enable-libtwolame \
--enable-libopus \
--enable-ladspa \
--enable-libcaca \
--enable-libiec61883 \
--enable-libilbc \
--enable-libssh \
--enable-libvidstab \
--enable-libwavpack \
--enable-libzvbi \
--enable-pic \
--enable-thumb

更に久しぶりに更新(2012/5/8)

コミットの3bbf3f7e42247b7a8b34b1e8cc891b59e1327bb8でlibdiracが消え去りました。
で、コミットの653d117c29123d353ce3bdd7de71e830a26733c1までで新しいっぽいのがいくつか増えてます?

--enable-fontconfig
--enable-frei0r
--enable-libass
--enable-libbluray
--enable-libcelt
--enable-libgsm
--enable-libmodplug
--enable-libstagefright-h264
--enable-libutvideo
--enable-libv4l2

久しぶりにちょっとだけ更新(2011/10/01)

HP: http://ffmpeg.org/

SVNはもうオワタらしいので、git使うようにしましょう。

git clone git://git.ffmpeg.org/ffmpeg/
cd ffmpeg
git pull

久しぶりにコンパイルオプションのぞいたらいっぱい増えてました?

--enable-openal
--enable-libaacplus
--enable-libopencv
--enable-libcdio
--enable-libfreetype
--enable-libvo-aacenc
--enable-libvo-amrwbenc

リビジョン15000辺りからだいぶコンパイルオプションが安定してきました。
いろいろと(後述)遊ぶためにコンパイルオプションを追加しています。

faac faad2(23620位からなくなった) a52codec amr x264 xvid libvpx librtmpはソースから
うちの環境では、それ以外はyumでインストールされてました。

Fedora15にして、カーネルが2.6.38になったんですが、linux/videodev.hがなくなったせいで
ffmpegのmake時にlibdc1394が原因でエラーが出てました。

とりあえずはコンパイルオプションから消して動いてます。

git-N-30266-g701012d時点

x264が115以上じゃないとコンパイルで怒られます。

リビジョン23620時点

amrがopencore-amrに変更されています。

vp8でのエンコード/デコードができるようになったみたいです

librtmpを使えるようになったそうです。

今のところこんな感じ

LDFLAGS="-lssl -lcrypto" CFLAGS="-fPIC -m64" ./configure \
--extra-cflags=-fPIC \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-bzlib \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libdc1394 \
--enable-libdirac \
--enable-libfaac \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libschroedinger \
--enable-libspeex \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libxvid \
--enable-encoder=h264 \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-pthreads \
--enable-postproc \
--enable-avfilter \
--enable-x11grab \
--enable-libxavs \
--enable-openal \
--enable-libaacplus \
--enable-libopencv \
--enable-libcdio \
--enable-libfreetype \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc

リビジョン12665時点

「--cross-compile」が「--enable-cross-compile」に変更されています。

ffprobeというメディアファイルの情報のみ取得するツールが増えています。

リビジョン12420時点

「--enable-pp」と「--enable-swscaler」が
「--enable-postproc」と「--enable-swscale」に変更されています。

リビジョン11660時点

libamrがnonfreeになったそうで
--enable-nonfreeを追加しなければコンパイルできません。

リビジョン11113時点

ここのパッチをあてておきます。
http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2007-November/038837.html

cd /usr/local/src<br>svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure \
--enable-shared \
--enable-gpl \
--enable-nonfree \
--enable-postproc \
--enable-swscale \
--enable-avfilter \
--enable-avfilter-lavf \
--enable-pthreads \
--enable-x11grab \
--enable-libamr-nb \
--enable-libamr-wb \
--enable-libdc1394 \
--enable-libdirac \
--enable-libfaac \
--enable-libfaad \
--enable-libfaadbin \
--enable-libgsm \
--enable-libmp3lame \
--enable-libnut \
--enable-libschroedinger \
--enable-libspeex \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-zlib \
--enable-encoder=h264 \
--enable-memalign-hack \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
export CPATH=/usr/local/include:$CPATH
make
make install

exportしておくとmakeでundefined reference to~~が
出なくなるかもしれないそうです。

リビジョン15589時点

「--enable-liba52bin」がなくなりました。

リビジョン15668時点

lix264のバージョンが最新で無いと怒られます。

libx264 version must be >= 0.65.

リビジョン15741時点

CFLAGS="-fPIC -m64" ./configure \
--enable-shared \
--enable-gpl \
--enable-pthreads \
--enable-libamr-nb \
--enable-libamr-wb \
--enable-libfaac \
--enable-libfaad \
--enable-libmp3lame \
--enable-libtheora \
--enable-libvorbis \
--enable-libxvid \
--enable-cross-compile \
--enable-x11grab \
--enable-libgsm \
--enable-libfaadbin \
--extra-ldflags=-fPIC \
--extra-cflags=-fPIC \
--enable-nonfree \
--enable-postproc \
--enable-swscale \
--enable-avfilter \
--enable-avfilter-lavf \
--enable-libx264 \
--enable-encoder=h264 \
--enable-libdc1394

リビジョン18021時点

「--enable-swscale」がなくなりました。

リビジョン19631頃

amr-wbとamr-nbが消えてopencore-amrを使用するようになりました。
「--enable-libamr-nb --enable-libamr-wb」の代わりに
「--enable-libopencore-amrnb」と「--enable-libopencore-amrwb」を使用しないといけません。

また、「--enable-version3」が増えました。(GPLV3用


ffmpegを使って動画変換でyoutubeとかニコニコみたいな
動画投稿型配信サービス?ができるらしいですね。

そこらへんもphpmotionやらclipbucketの辺りでやるとしましょう。

ffmpegでストリーミング配信

とりあえず動くっぽいことが判明しました。
物はMicrosoft Corp. LifeCam NX-6000です。

/etc/ffserver.conf

Port 12345
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 500
MaxBandwidth 10000
CustomLog /var/log/ffmpeg.log
#NoDaemon
<Feed feed.ffm>
	File /tmp/feed.ffm
	FileMaxSize 200M
	ACL allow 127.0.0.1
</Feed>
<Stream hogehoge.asf>
	Feed feed.ffm
	Format asf
	VideoFrameRate 25
	VideoBufferSize 40
	VideoSize 320x240
	VideoBitRate 512
	VideoGopSize 30
	NoAudio
	StartSendOnKey
</Stream>
<Stream hogehoge.3gp>
	Feed feed.ffm
	Format 3gp
	NoAudio
	VideoFrameRate 25
	VideoBufferSize 40
	VideoSize 320x240
	VideoBitRate 512
	VideoGopSize 30
	VideoCodec mpeg4
</Stream>
#<Stream room.mpg>
	#Feed feed.ffm
	#Format rtp
	#VideoCodec libx264
	#VideoFrameRate 24
	#VideoBitRate 100
	#VideoSize 480x272
	#AVPresetVideo default
	#AVPresetVideo baseline
	#AVOptionVideo flags +global_header
	#AudioCodec libfaac
	#AudioBitRate 32
	#AudioChannels 2
	#AudioSampleRate 22050
	#AVOptionAudio flags +global_header
#</Stream>
<Stream stat.html>
	Format status
	ACL allow localhost
	ACL allow 192.168.xx.0 192.168.255.255
</Stream>
<Redirect index.html>
	URL http://www.example.com/
</Redirect>

うちのF13+ffmpeg-r23620ではrawvideoがこんどは使えなくなったのでvideo4linux2に変更

ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 http://localhost:12345/feed1.ffm

利用するプラグインの置き場所

いつも何処からダウンロードするのか忘れるので
メモをのこしておこうと思います。(久しぶりに更新)

  • xvid(1.3.3): http://www.xvid.org/
  • x264(git): git://git.videolan.org/x264.git
  • x265(hg): http://hg.videolan.org/x265
  • libogg(1.3.2): http://xiph.org/
  • libvorbis(1.3.4): http://xiph.org/
  • libtheora(1.1.1): http://xiph.org/
  • libflac(1.3.1): http://xiph.org/
  • libnut(svn): svn://svn.mplayerhq.hu/nut/src/trunk
  • lame(3.99.5): http://lame.sourceforge.net/download.php
  • gsm(1.0.13): http://www.quut.com/gsm/
  • faad2(2.7): http://sourceforge.net/projects/faac/
  • faac(1.28): http://sourceforge.net/projects/faac/
  • amrwb(7.0.0.3): http://www.penguin.cz/~utx/amr.en.html
  • amrnb(7.0.0.2): http://www.penguin.cz/~utx/amr.en.html
  • opencore-amr(0.1.3): http://sourceforge.net/projects/opencore-amr/
  • liba52(0.7.4): http://liba52.sourceforge.net/
  • libsndfile(1.0.25): http://www.mega-nerd.com/libsndfile/
  • libdc1394(2.2.3): http://sourceforge.net/projects/libdc1394/
  • libschroedinger(1.1): http://www.diracvideo.org/download/schroedinger/ (http://gnunet.org/libextractor/)
  • dirac(1.0.2): http://www.diracvideo.org/download/dirac-research/
  • speex(git): http://git.xiph.org/speex.git
  • libvpx(1.3.0): http://code.google.com/p/webm/downloads/list
  • librtmp(svn): http://rtmpdump.mplayerhq.hu/
  • aacplus: http://217.20.164.161/~tipok/aacplus
  • vo-aacenc: http://sourceforge.net/projects/opencore-amr/
  • vo-amrwbenc: http://sourceforge.net/projects/opencore-amr/

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.