ffserverでStreaming

WEBCAM streaming 2003/11/xx

  1. ffserverはffmpegとともにインストールされる。
    ffserverを動かすには設定ファイルが必要。雛形は/usr/local/src/ffmpeg/ffmpeg-0.4.8/doc/ffserver.confにある。これをもとに自分用の設定ファイルを作る。
    cp /usr/local/src/ffmpeg/ffmpeg-0.4.8/doc/ffserver.conf ~/ffserver.conf

    修正個所は
    修正・確認 修正内容 memo
    Port 8090
    BindAddress 0.0.0.0
    MaxClients 1000
    MaxBandwidth 1000
    CustomLog -
    NoDaemon
    確認のみ Portは必ず確認すること
    <Feed ffd1.ffm>
    File /tmp/feed1.ffm
    FileMaxSize 200K
    ACL allow 127.0.0.1
    </Feed>
    確認のみ カメラの画像は/tmp/feed1.ffmに記録する

    このサーバーに接続したカメラのみ可能
    他のマシンから配信させるにはACLに追加が必要
    <Stream test.asf>
    Feed feed1.ffm
    Format asf
    VideoFrameRate 15
    VideoSize 352x240
    VideoBitRate 256
    VideoGopSize 30
    AudioBitRate 64
    StartSendOnKey
    </Stream >
    確認のみ  ビデオに関する記述
    feed1.ffmをasfに変換して配信
    再生にはWindows Media Playerを使う

    <Stream video2.rm>
    Feed feed1.ffm
    Format rm

    </Stream >
    追加する 音声付ビデオに関する記述
    feed1.ffmをrmに変換して配信
    再生にはRealPlayerを使う

    同様の指定内容としてtest.rmを使用しても良い
    <Stream stat.html>
    Format status

    # Only allow local people to get to the status
    ACL allow localhost
    ACL allow 192.168.0.0 192.168.255.255

    #FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
    </Stream>
    確認する ffserverの状態に関する記述

    http://servername:8090/stat.htmlとして表示する
    # Redirect index.html to the appropriate site

    <Redirect index.html>
    URL http://ffmpeg.sourceforge.net/
    </Redirect>
    確認する  


  2. Streamingに挑戦
    httpサーバー(Apache)が動いていることを確認。Apacheが動いていないときはここで稼動させる。
    #/usr/local/apache2/bin/apachectl start
    Apacheが動いたことを確認した後、ffserver,ffmpegの順で起動していく。
    ffserverをBackgroundで実行した後、ffmpegを実行する。
    # ffserver -f ffserver.conf &
    [1] xxxx
    Index & Id do not match for stream 1
    ffserver started.
    ffserverが動いた後、ffmpegを起動する。起動時に入力デバイスとして/dev/video0を指定する。
    配信用サーバーが別にあるときは、http://127.0.0.1:8090/feed1.ffmを配信用サーバーに指定する。
    配信用サーバーが自分自身であるときは、"ffmpeg -s 320x240 -vd /dev/video0 http://tm.hakodate-ct.ac.jp:8090/feed1.ffm"とすることもできるが、配信サーバー側(自分自身)のffserver.confの<Feed>タグにACL記述をACL 192.168.0.0 192.168.255.255のように追加する。
    ffmpegが動くとframe=....が表示される。
    # ffmpeg -s 320x240 -vd /dev/video0 http://127.0.0.1:8090/feed1.ffm
    127.0.0.1 - - [Sun Nov  2 10:57:29 2003] "GET /feed1.ffm HTTP/1.0" 200 4165
    Input #0, video4linux, from '':
      Duration: N/A, bitrate: N/A
      Stream #0.0: Video: rawvideo, yuv420p, 320x240, 15.00 fps
    Input #1, audio_device, from '':
      Duration: N/A, bitrate: N/A
      Stream #1.0: Audio: pcm_s16le, 44100 Hz, mono, 705 kb/s
    Output #0, ffm, to 'http://127.0.0.1:8090/feed1.ffm':
      Stream #0.0: Audio: mp2, 44100 Hz, mono, 32 kb/s
      Stream #0.1: Video: mpeg1video, 320x240, 15.00 fps, q=3-31, 64 kb/s
      Stream #0.2: Audio: mp2, 22050 Hz, mono, 64 kb/s
      Stream #0.3: Video: msmpeg4, 160x128, 5.00 fps, q=3-31, 256 kb/s
      Stream #0.4: Audio: ac3, 22050 Hz, mono, 64 kb/s
      Stream #0.5: Video: rv10, 160x128, 5.00 fps, q=3-31, 64 kb/s
    Stream mapping:
      Stream #1.0 -> #0.0
      Stream #0.0 -> #0.1
      Stream #1.0 -> #0.2
      Stream #0.0 -> #0.3
      Stream #1.0 -> #0.4
      Stream #0.0 -> #0.5
    Press [q] to stop encoding
    frame=    3 q=8.0 q=3.0 q=25.0 size=      20kB time=0.1 bitrate=1568.0kbits/s
    frame=   13 q=31.0 q=3.0 q=20.0 size=      44kB time=0.8 bitrate= 470.4kbits/s
    frame=   23 q=31.0 q=3.0 q=11.0 size=      64kB time=1.5 bitrate= 358.4kbits/s
    frame=   33 q=17.0 q=3.0 q=7.0 size=      92kB time=2.1 bitrate= 360.6kbits/s
    frame=   43 q=20.0 q=3.0 q=12.0 size=     120kB time=2.8 bitrate= 355.0kbits/s
    frame=   53 q=31.0 q=3.0 q=20.0 size=     144kB time=3.4 bitrate= 342.1kbits/s
    frame=   63 q=31.0 q=3.0 q=25.0 size=     164kB time=4.1 bitrate= 326.9kbits/s
    frame=   72 q=31.0 q=3.0 q=25.0 size=     180kB time=4.7 bitrate= 315.9kbits/s
    frame=   81 q=31.0 q=3.0 q=17.0 size=     200kB time=5.3 bitrate= 310.5kbits/s
    frame=   90 q=31.0 q=3.0 q=10.0 size=     228kB time=5.9 bitrate= 316.4kbits/s
    frame=   99 q=17.0 q=3.0 q=18.0 size=     252kB time=6.5 bitrate= 318.7kbits/s


  3. http://servername:8090/stat.htmlでffserverの状態を確認する。




  4. stat.htmlで表示されたtest.asfやvideo2.ramを開くと、ビデオの配信が始まる。
    test.asfを再生(Microsoft Media Player 7.1)

    Microsoft Media Player7.1

    配信されている画像は実際の画像より10秒遅延していました。
    [ツール]-[オプション]でバッファの設定を小さくすると遅延時間は4秒まで小さくなりました。

    video2.ramを再生(RealPlayer 8 Basic)
    RealPlayer 8 Basic
    RealPlayer 8 Basic (Build 6.0.9.584)

    配信されている画像は実際の画像より10秒ほど遅延していました。



  5. 再生ツールはWindows Media Player,RealPlayerにいずれの場合も、配信画像は数秒の遅延がある。ネットワークの輻輳を考慮するとバッファが必要であるが、再生ツールはバッファに蓄積したデータを再生することになるの画像の遅延は避けられない。