#
# This is a test configuration file. You can invoke it with
# ../ffserver -f test.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.

Port 9999
RTSPPort 9990

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

BindAddress 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 pgmyuv -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

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

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>

