#
# This is a test configuration file. You can invoke it with
# ../ffserver -f ffserver.conf
# when in the tests directory and once the vsynth1 subdirectory
# has been populated. Then point your browser at http://whatever:9999/teststat.html
# and you can look at the streams
#

#
# Port on which the server is listening. You must select a different
# port from your standard http web server if it is running on the same
# computer.

HTTPPort 9999
RTSPPort 9990

# Address on which the server is bound. Only useful if you have
# several network interfaces.

HTTPBindAddress 0.0.0.0

# Number of simultaneous requests that can be handled. Since FFServer
# is very fast, this limit is determined mainly by your Internet
# connection speed.

MaxClients 1000

MaxBandwidth 100000

# Access Log file (uses standard Apache log file format)
# '-' is the standard output

CustomLog -

##################################################################
# Definition of the live feeds. Each live feed contains one video
# and/or audio sequence coming from an ffmpeg encoder or another
# ffserver. This sequence may be encoded simultaneously with several
# codecs at several resolutions.

<Feed feed1.ffm>

# You must use 'ffmpeg' to send a live feed to ffserver. In this
# example, you can type:
#
# ffmpeg http://localhost:8090/feed1.ffm

# ffserver can also do time shifting. It means that it can stream any
# previously recorded live stream. The request should contain:
# "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify
# a path where the feed is stored on disk. You also specify the
# maximum size of the feed (100M bytes here). Default:
# File=/tmp/feed_name.ffm FileMaxSize=5M

File tests/feed1.ffm
FileMaxSize 100M

# Fire up ffmpeg pointing at this stream

Launch ./ffmpeg -v 0 -y -f image2 -i tests/vsynth1/%02d.pgm

ACL allow localhost
</Feed>

##################################################################
# Now you can define each stream which will be generated from the
# original audio and video stream. Each format has a filename (here
# 'test128.mpg'). FFServer will send this stream when answering a
# request containing this filename.

<Stream test_h.avi>
Feed feed1.ffm
Format avi
#
BitExact
DctFastint
IdctSimple
VideoFrameRate 10
VideoSize 352x288
VideoBitRate 100
VideoGopSize 30
NoAudio

PreRoll 10
StartSendOnKey
MaxTime 100

</Stream>

<Stream test_l.avi>
Feed feed1.ffm
Format avi
#
BitExact
DctFastint
IdctSimple
VideoFrameRate 2
VideoSize 320x240
VideoBitRate 40
VideoGopSize 20
NoAudio

PreRoll 20
StartSendOnKey
MaxTime 100

</Stream>

#<Stream test_h.mpg>
#Feed feed1.ffm
#
#VideoFrameRate 10
#VideoSize 352x288
#VideoBitRate 100
#VideoGopSize 30
#NoAudio

#PreRoll 10
#StartSendOnKey
#MaxTime 100
#
#</Stream>
#
#<Stream test_l.mpg>
#Feed feed1.ffm
##
#VideoFrameRate 2
#VideoSize 320x240
#VideoBitRate 40
#VideoGopSize 20
#NoAudio
#
#PreRoll 20
#StartSendOnKey
#MaxTime 100
#
#</Stream>
#
<Stream test.swf>
Feed feed1.ffm
#
BitExact
DctFastint
IdctSimple
Qscale 10
VideoFrameRate 10
VideoSize 352x288
VideoBitRate 100
VideoGopSize 30
NoAudio

PreRoll 10
StartSendOnKey
MaxTime 100

</Stream>

<Stream test_h.asf>
Feed feed1.ffm
Format asf
#
BitExact
DctFastint
IdctSimple
Qscale 10
VideoFrameRate 10
VideoSize 320x240
VideoBitRate 100
VideoGopSize 30
NoAudio

PreRoll 10
StartSendOnKey
MaxTime 100

AVOptionVideo flags +global_header

Metadata title "Test data stream"

</Stream>

<Stream test_l.asf>
Feed feed1.ffm
Format asf
#
BitExact
DctFastint
IdctSimple
Qscale 10
VideoFrameRate 2
VideoSize 320x240
VideoBitRate 40
VideoGopSize 20
NoAudio

PreRoll 20
StartSendOnKey
MaxTime 100

AVOptionVideo flags +global_header

Metadata title "Test data stream"

</Stream>

<Stream test_h.rm>

Feed feed1.ffm
Format rm

BitExact
DctFastint
IdctSimple
Qscale 10
VideoBitRate 100
VideoFrameRate 10
VideoGopSize 30
VideoSize    320x240
NoAudio

PreRoll 10
StartSendOnKey
MaxTime 100

</Stream>

<Stream test_l.rm>

Feed feed1.ffm
Format rm

BitExact
DctFastint
IdctSimple
Qscale 10
VideoBitRate 40
VideoFrameRate 2
VideoGopSize 20
VideoSize    320x240
NoAudio

PreRoll 20
StartSendOnKey
MaxTime 100

</Stream>


<Stream test.jpg>

Feed feed1.ffm
Format jpeg
Strict -1

BitExact
DctFastint
IdctSimple
VideoFrameRate 1
VideoSize 352x288
NoAudio

PreRoll 2

</Stream>

<Stream test_small.jpg>

Feed feed1.ffm
Format jpeg
Strict -1

BitExact
DctFastint
IdctSimple
VideoFrameRate 1
VideoSize 160x128
NoAudio

PreRoll 2

</Stream>

<Stream test.mjpg>

Feed feed1.ffm
Format mpjpeg
Strict -1

BitExact
DctFastint
IdctSimple
VideoFrameRate 1
VideoSize    320x240
NoAudio
StartSendOnKey

PreRoll 1
MaxTime 100

</Stream>


##################################################################
# Special stream : server status

<Stream teststat.html>

Format status

</Stream>

