[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. 概要

一般的な構文は次のとおりです:

 
ffserver [options]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. 説明

FFserver はオーディオとビデオの両方に対応したストリーミングサーバです。 複数のライブフィード、ファイルからのストリーミング、およびライブフィードの 時間移動(ffserver.conf で十分に大きいフィード領域を設定すれば、 各ライブフィードでの過去の位置をシークできます)をサポートしています。

FFserver は既定では daemon モードで動作します; つまり、debug モードで 起動される、ないし NoDaemon オプションが設定ファイルで指定されない限りは、 自身をバックグラウンドに置き、TTY からデタッチします。

このドキュメントは ffserver / ffmpeg のストリーミングの側面のみを取り 扱っています。ffmpeg のパラメーターについての質問やコーデックの質問など 全て、ここでは扱いません。さらなる情報には ‘ffmpeg-doc.html’ を 読んでください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 どのように動作するの?

FFserver は事前に記録されたファイルまたは ffmpeg のインスタンスからの FFM ストリームを 入力として受け付け、そしてそれらを RTP/RTSP/HTTP を通じてストリームします。

ffserver のインスタンスは設定ファイルで指定されたポートを listen します。 1つまたはそれ以上の ffmpeg のインスタンスを起動でき、1つまたはそれ以上の FFM ストリームを ffserver がそれらを受け取ることになっているポートへ送ることができます。 あるいは、ffserver にそういった ffmpeg インスタンスをスタートアップ時に 起動させることもできます。

入力ストリームはフィードと呼ばれ、その1つ1つは設定ファイルの中の単一の <Feed> セクションによって指定されます。

各フィードについて、さまざなまフォーマットの異なる出力ストームを持つことができ、 その1つ1つは設定ファイルの中の単一の <Stream> セクションによって指定されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.2 状態ストリーム

FFserver はサーバの現在の状態を表示する HTTP インターフェースを備えています。

設定ファイルで指定された特別な状態ストリームのアドレスをブラウザで単に指示してください。

例えば

 
<Stream status.html>
Format status

# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>

となっている場合、特別なストリーム ‘status.html’ を要求すれば サーバは状態の情報を含むページを投げてくるでしょう。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3 これは何ができるの?

適切に構成され動作する場合には、リアルタイムで適当なキャプチャーカードから ビデオとオーディオをキャプチャーすることができ、それをインターネット経由で (いくらかの制限がありますが)Windows Media Player や RealAudio Player に向けて ストリームすることができます。

またファイルからストリームすることもできますが、現時点では壊れています。 非常に頻繁に、Web サーバは同様にファイルを供給するために利用できます。

.ffm ファイルから記録される前のビデオをストリームすることができますが、 正しく動作させるようとするといくらかトリッキーになります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.4 しなければならないことは?

私は 900 MHz Duron 上の Linux を cheapo Bt848 ベースの TV キャプチャーカード とともに使っています。平凡な Linux 2.4.17 を平凡なドライバーとともに使って います。[実際にはこれは本当ではなく、マザーボード搭載のサウンドカードの ためにいくつかの特別なドライバーが必要でした。]

FreeBSD システムでも同様に立派に動作することを私は把握しています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.5 動作させるには?

まず、キットをビルドしてください。LAME をまず最初にインストールしておく と*とても*役に立ちます。そして ffserver の ./configure を実行する際に、 確実に --enable-mp3lame フラグを有効にしておいてください。

LAME によって Windows Media Player に対して音声をストリーミングできるように なるため重要です。他のオーディオのタイプでは動作しない理由を訊かないでください。

単純なテストとして、INPUTFILE が ffmpeg でデコードできるファイルであるとして 次の2つのコマンドラインを実行してください:

 
./ffserver -f doc/ffserver.conf &
./ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm

この時点で Windows 機に行き Windows Media Player (WMP) を始動できるように するはずです。”URL を開く” を選択し、

 
    http://<linuxbox>:8090/test.asf

を入力してください。(ちょっと遅れて)映像が見れて音声が聞こえるはずです。

警告: test1.mpg をストリームしようとしても WMP では動作しません。 再生を開始する前にファイル全体を転送しようとするからです。 これは AVI ファイルにも当てはまります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.6 次にすることは?

(フレームレートなどの条件について)必要に合わせて ffserver.conf ファイルを 編集してするべきです。そして ffserver と ffmpeg をインストールし、 それらを開始するスクリプトを書き、そして始めてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7 トラブルシューティング


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7.1 音声が聞こえません、映像は問題ないのです。

おそらく LAME をインストールしなかったか、あるいは ./configure ステートメント が間違っていたのでしょう。MP3 を参照する行が現れていないか見るために ffmpeg の出力を確認してください。もし無ければ、あなたの構成は正しくない です。サウンドカードが正しい入力源からデータを取っていないのかもしれません。 ステレオでのみキャプチャーし、かつ1つのチャンネルは弾かれる必要があるような 本当にひどいオーディオインターフェースを(私のように)使っているのかもしれない。 あなたがこういった人たちの一員なら、ffmpeg を開始する前に ’AUDIO_FLIP_LEFT=1’ をエクスポートしてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7.2 しばらくしてから音声と映像を同期しなくなります。

そうです。しなくなります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7.3 WMP だとかなり時間が経ってから映像の更新レートが下がっていきます。

そうです。だれか理由が分かる?


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7.4 WMP 7 と WMP 6.4 が違う振る舞いをします。

そうです。これについての考えがあればどんなものでも感謝して受け付けます。 これらの違いはウェブページに WMP を埋め込むときにもあらわれます。 [利用できる2つのオブジェクト ID があります: 古い方はうまく動作せず、 新しい方は動作します(両方とも同じシステムでテストしました)。しかし、 WMP 7 をインストールしない限り新しい方は利用できないのではないかと思います。]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.8 他にできることは?

先に記録された .ffm ファイルからビデオを再生することができます。 しかし、多くの注意書きがあり、その中には ffserver のパラメーターは そのファイルが記録された時に使われた本来のパラメーターと一致していなければ ならない、という事実があります。そうでなければ、ファイルに記録する前に ffserver はそのファイルを削除します。 (今これを書いている段階では、この部分は壊れています。)

多くのコーデックの選択肢やエンコーディングのパラメーターをいじることができ、 制御できないパラメーターはさらにたくさんあります。’絶対にあるほうがよい’ パラメーターがあれば、メーリングリストにメッセージを投稿してください。 現時点で利用できる制御項目のリストについては ffserver.conf をのぞいてみてください。

ブラウザでよく使われる ASX または RAM ファイルを自動的に生成することが できます。これらのファイルは実際には基底にある ASF または RM ファイルへ リダイレクトされます。こうする理由は、ブラウザが外部のビューアを起動する 前にファイル全体を取得するからです。リダイレクト元のファイルはとても小さく すぐに転送できます。[ストリームそのものはしばしば’無限’で、そのため ブラウザはそれをダウンロードしようとし、決して終わりません。]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.9 ヒント

* ライブのストリームに接続しているとき、ほとんどのプレイヤー(WMP、RA、等)は 元の内容を数秒間バッファすることを求め、連続的に信号を表示することができる ようにします。しかし、ffserver は(既定の動作としては)リアルタイムでデータの 送信を開始します。この結果、プレイヤーによってバッファリングが行われている 間、数秒間一時停止します。都合の良いことに、URL の末尾に ’?buffer=5’ を追加 することによって、これを回復することができます。この追加の意味することは、 ストリームが5秒前に開始するようにする – そのためストリームの最初の5秒は ネットワークで可能な限り素早く送信されます。そして実時間に向けてスロー ダウンするでしょう。これによって顕著に起動体験が改善されるでしょう。

また ’Preroll 15’ という文を ffserver.conf に追加することで、別途時間が 指定されていない全ての要求に対して、15 秒間の事前バッファリングを加える ようにできます。さらに、ffserver はキーフレームが見つかるまでフレームを とばすようになります。これは、捨てられるであろうデータを転送しないことに より、さらに起動の遅れを減らします。

* ライブのストリームによって消費される帯域幅の量を制限するために ffserver.conf の中の MaxBandwidth を調整したくなるでしょう。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.10 しばらくするとバッファリング/事前ロールが止まるのはなぜ?

(少なくとも私のマシンでは)グラブに成功するフレームの数が増えるほど、 少しずつグラブされるべきフレームの数が減ります。これの意味することは、 エンコードされたデータストリームのタイムスタンプは実際の時間より 遅くなります。つまり、’Preroll 10’ とすると、ストリームが 10秒または それ以上遅れる際に、残る事前ロールがなくなります。

これを修正するには、タイムスタンプを扱う処理の内部を変更することが 求められます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.11 ?date= は有効ですか?

はい(上で述べた制限を受けますが)。また、ffserver を開始するときはいつでも (どれかのパラメーターが変わっていれば)ffm ファイルは削除されます、 したがって以前に記録したものは一掃されます。

?date=xxxxxx の書式はかなり柔軟です。 次の書式のいずれかを使うことになります(’T’ は文字そのものです):

 
* YYYY-MM-DDTHH:MM:SS     (現地時間)
* YYYY-MM-DDTHH:MM:SSZ    (世界標準時)

YYYY-MM-DD を省略できます。その場合現在の日付が参照されます。しかし ‘?date=16:00:00’ は本日の 16:00 を参照することに注意してください – これは未来になってしまうことがあり、そのため便利とはいえません。

ストリームのために URL の末尾に ?date= を加えることでこれを利用できます。 例えば: ‘http://localhost:8080/test.asf?date=2002-07-26T23:05:00’.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. オプション

数値のオプションは全て(そうではないと明記していない限り) 1つの数を表す入力文字列を受け取ります。それには国際単位系の接頭辞 (例えば ’K’、’M’、’G’)を1つ含めてもかまいません。 この接頭辞の直後に ’i’ を付け加えると、10の累乗の代わりに2の累乗 が使われます。 ’B’ という接尾辞は値を8倍し、また他の接尾辞に付け加えても単独でも どちらでも使えます。これによって例えば ’KB’、’MiB’、’G’ や ’B’ が接尾辞として許されます。

引数をとらないオプションはブール値のオプションであり、対応する値を true にします。オプション名の前に "no" をつけることで false に できます。例えば、コマンドラインで "-nofoo" とすることで "foo" という 名前のブール値のオプションが false になります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 一般的なオプション

これらのオプションは ff* ツールの間で共有されます。

-L

ライセンスを表示します。

-h, -?, -help, --help

ヘルプを表示します。

-version

バージョンを表示します。

-formats

利用可能なフォーマットを表示します。

フォーマット名の前にあるフィールドは次のような意味があります:

D

デコーディングが利用できる

E

エンコーディングが利用できる

-codecs

利用可能なコーデックを表示します。

コーデック名の前にあるフィールドは次のような意味があります:

D

デコーディングが利用できる

E

エンコーディングが利用できる

V/A/S

映像/音声/サブタイトルコーデック

S

コーデックがスライスをサポートしている

D

コーデックが direct rendering をサポートしている

T

コーデックがフレーム境界でだけでなくランダムな場所での切り取られた入力を扱える

-bsfs

利用可能な bitstream フィルターを表示します。

-protocols

利用可能なプロトコルを表示します。

-filters

利用可能な libavfilter フィルターを表示します。

-pix_fmts

利用可能な pixel フォーマットを表示します。

-loglevel loglevel

そのライブラリで使用されるログの冗長さを設定します。 loglevel は以下の値の1つを含んだ数値または文字列:

quiet
panic
fatal
error
warning
info
verbose
debug

既定ではプログラムは標準エラー出力にログを出力し、端末が色付けに 対応していれば、エラーと警告に印をつけるように色が使われます。 ログの色付けは環境変数 NO_COLOR をセットすることで無効にできます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Main options

-f configfile

/etc/ffserver.conf’ の代わりに ‘configfile’ を使います。

-n

no-launch モードを有効にします。このオプションは各種の <Stream> セクションの中の すべての Launch ディレクティブを無効にします。FFserver はどの ffmpeg インスタンスも 起動しないので、それらを手動で起動しなければならないでしょう。

-d

debug モードを有効にします。このオプションはログの冗長性を増やし、 ログメッセージを標準出力に向け、ffserver をデーモンとしてではなく フォアグラウンドで動作させます。


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Takeshi Abe on October 29, 2010 using texi2html 1.82.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back Previous section in reading order 1.2.2
[ > ] Forward Next section in reading order 1.2.4
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ Up ] Up Up section 1.2
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated by Takeshi Abe on October 29, 2010 using texi2html 1.82.