mirror of https://github.com/FFmpeg/FFmpeg.git
parent
2ca65fc7b7
commit
6b35a83214
39 changed files with 44 additions and 7340 deletions
@ -1,372 +0,0 @@ |
|||||||
# 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 8090 |
|
||||||
|
|
||||||
# Address on which the server is bound. Only useful if you have |
|
||||||
# several network interfaces. |
|
||||||
HTTPBindAddress 0.0.0.0 |
|
||||||
|
|
||||||
# Number of simultaneous HTTP connections that can be handled. It has |
|
||||||
# to be defined *before* the MaxClients parameter, since it defines the |
|
||||||
# MaxClients maximum limit. |
|
||||||
MaxHTTPConnections 2000 |
|
||||||
|
|
||||||
# Number of simultaneous requests that can be handled. Since FFServer |
|
||||||
# is very fast, it is more likely that you will want to leave this high |
|
||||||
# and use MaxBandwidth, below. |
|
||||||
MaxClients 1000 |
|
||||||
|
|
||||||
# This the maximum amount of kbit/sec that you are prepared to |
|
||||||
# consume when streaming to clients. |
|
||||||
MaxBandwidth 1000 |
|
||||||
|
|
||||||
# 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, where zero means unlimited. Default: |
|
||||||
# File=/tmp/feed_name.ffm FileMaxSize=5M |
|
||||||
File /tmp/feed1.ffm |
|
||||||
FileMaxSize 200K |
|
||||||
|
|
||||||
# You could specify |
|
||||||
# ReadOnlyFile /saved/specialvideo.ffm |
|
||||||
# This marks the file as readonly and it will not be deleted or updated. |
|
||||||
|
|
||||||
# Specify launch in order to start ffmpeg automatically. |
|
||||||
# First ffmpeg must be defined with an appropriate path if needed, |
|
||||||
# after that options can follow, but avoid adding the http:// field |
|
||||||
#Launch ffmpeg |
|
||||||
|
|
||||||
# Only allow connections from localhost to the feed. |
|
||||||
ACL allow 127.0.0.1 |
|
||||||
|
|
||||||
</Feed> |
|
||||||
|
|
||||||
|
|
||||||
################################################################## |
|
||||||
# Now you can define each stream which will be generated from the |
|
||||||
# original audio and video stream. Each format has a filename (here |
|
||||||
# 'test1.mpg'). FFServer will send this stream when answering a |
|
||||||
# request containing this filename. |
|
||||||
|
|
||||||
<Stream test1.mpg> |
|
||||||
|
|
||||||
# coming from live feed 'feed1' |
|
||||||
Feed feed1.ffm |
|
||||||
|
|
||||||
# Format of the stream : you can choose among: |
|
||||||
# mpeg : MPEG-1 multiplexed video and audio |
|
||||||
# mpegvideo : only MPEG-1 video |
|
||||||
# mp2 : MPEG-2 audio (use AudioCodec to select layer 2 and 3 codec) |
|
||||||
# ogg : Ogg format (Vorbis audio codec) |
|
||||||
# rm : RealNetworks-compatible stream. Multiplexed audio and video. |
|
||||||
# ra : RealNetworks-compatible stream. Audio only. |
|
||||||
# mpjpeg : Multipart JPEG (works with Netscape without any plugin) |
|
||||||
# jpeg : Generate a single JPEG image. |
|
||||||
# mjpeg : Generate a M-JPEG stream. |
|
||||||
# asf : ASF compatible streaming (Windows Media Player format). |
|
||||||
# swf : Macromedia Flash compatible stream |
|
||||||
# avi : AVI format (MPEG-4 video, MPEG audio sound) |
|
||||||
Format mpeg |
|
||||||
|
|
||||||
# Bitrate for the audio stream. Codecs usually support only a few |
|
||||||
# different bitrates. |
|
||||||
AudioBitRate 32 |
|
||||||
|
|
||||||
# Number of audio channels: 1 = mono, 2 = stereo |
|
||||||
AudioChannels 1 |
|
||||||
|
|
||||||
# Sampling frequency for audio. When using low bitrates, you should |
|
||||||
# lower this frequency to 22050 or 11025. The supported frequencies |
|
||||||
# depend on the selected audio codec. |
|
||||||
AudioSampleRate 44100 |
|
||||||
|
|
||||||
# Bitrate for the video stream |
|
||||||
VideoBitRate 64 |
|
||||||
|
|
||||||
# Ratecontrol buffer size |
|
||||||
VideoBufferSize 40 |
|
||||||
|
|
||||||
# Number of frames per second |
|
||||||
VideoFrameRate 3 |
|
||||||
|
|
||||||
# Size of the video frame: WxH (default: 160x128) |
|
||||||
# The following abbreviations are defined: sqcif, qcif, cif, 4cif, qqvga, |
|
||||||
# qvga, vga, svga, xga, uxga, qxga, sxga, qsxga, hsxga, wvga, wxga, wsxga, |
|
||||||
# wuxga, woxga, wqsxga, wquxga, whsxga, whuxga, cga, ega, hd480, hd720, |
|
||||||
# hd1080 |
|
||||||
VideoSize 160x128 |
|
||||||
|
|
||||||
# Transmit only intra frames (useful for low bitrates, but kills frame rate). |
|
||||||
#VideoIntraOnly |
|
||||||
|
|
||||||
# If non-intra only, an intra frame is transmitted every VideoGopSize |
|
||||||
# frames. Video synchronization can only begin at an intra frame. |
|
||||||
VideoGopSize 12 |
|
||||||
|
|
||||||
# More MPEG-4 parameters |
|
||||||
# VideoHighQuality |
|
||||||
# Video4MotionVector |
|
||||||
|
|
||||||
# Choose your codecs: |
|
||||||
#AudioCodec mp2 |
|
||||||
#VideoCodec mpeg1video |
|
||||||
|
|
||||||
# Suppress audio |
|
||||||
#NoAudio |
|
||||||
|
|
||||||
# Suppress video |
|
||||||
#NoVideo |
|
||||||
|
|
||||||
#VideoQMin 3 |
|
||||||
#VideoQMax 31 |
|
||||||
|
|
||||||
# Set this to the number of seconds backwards in time to start. Note that |
|
||||||
# most players will buffer 5-10 seconds of video, and also you need to allow |
|
||||||
# for a keyframe to appear in the data stream. |
|
||||||
#Preroll 15 |
|
||||||
|
|
||||||
# ACL: |
|
||||||
|
|
||||||
# You can allow ranges of addresses (or single addresses) |
|
||||||
#ACL ALLOW <first address> <last address> |
|
||||||
|
|
||||||
# You can deny ranges of addresses (or single addresses) |
|
||||||
#ACL DENY <first address> <last address> |
|
||||||
|
|
||||||
# You can repeat the ACL allow/deny as often as you like. It is on a per |
|
||||||
# stream basis. The first match defines the action. If there are no matches, |
|
||||||
# then the default is the inverse of the last ACL statement. |
|
||||||
# |
|
||||||
# Thus 'ACL allow localhost' only allows access from localhost. |
|
||||||
# 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and |
|
||||||
# allow everybody else. |
|
||||||
|
|
||||||
</Stream> |
|
||||||
|
|
||||||
|
|
||||||
################################################################## |
|
||||||
# Example streams |
|
||||||
|
|
||||||
|
|
||||||
# Multipart JPEG |
|
||||||
|
|
||||||
#<Stream test.mjpg> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format mpjpeg |
|
||||||
#VideoFrameRate 2 |
|
||||||
#VideoIntraOnly |
|
||||||
#NoAudio |
|
||||||
#Strict -1 |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Single JPEG |
|
||||||
|
|
||||||
#<Stream test.jpg> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format jpeg |
|
||||||
#VideoFrameRate 2 |
|
||||||
#VideoIntraOnly |
|
||||||
##VideoSize 352x240 |
|
||||||
#NoAudio |
|
||||||
#Strict -1 |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Flash |
|
||||||
|
|
||||||
#<Stream test.swf> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format swf |
|
||||||
#VideoFrameRate 2 |
|
||||||
#VideoIntraOnly |
|
||||||
#NoAudio |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# ASF compatible |
|
||||||
|
|
||||||
<Stream test.asf> |
|
||||||
Feed feed1.ffm |
|
||||||
Format asf |
|
||||||
VideoFrameRate 15 |
|
||||||
VideoSize 352x240 |
|
||||||
VideoBitRate 256 |
|
||||||
VideoBufferSize 40 |
|
||||||
VideoGopSize 30 |
|
||||||
AudioBitRate 64 |
|
||||||
StartSendOnKey |
|
||||||
</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# MP3 audio |
|
||||||
|
|
||||||
#<Stream test.mp3> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format mp2 |
|
||||||
#AudioCodec mp3 |
|
||||||
#AudioBitRate 64 |
|
||||||
#AudioChannels 1 |
|
||||||
#AudioSampleRate 44100 |
|
||||||
#NoVideo |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Ogg Vorbis audio |
|
||||||
|
|
||||||
#<Stream test.ogg> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Metadata title "Stream title" |
|
||||||
#AudioBitRate 64 |
|
||||||
#AudioChannels 2 |
|
||||||
#AudioSampleRate 44100 |
|
||||||
#NoVideo |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Real with audio only at 32 kbits |
|
||||||
|
|
||||||
#<Stream test.ra> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format rm |
|
||||||
#AudioBitRate 32 |
|
||||||
#NoVideo |
|
||||||
#NoAudio |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Real with audio and video at 64 kbits |
|
||||||
|
|
||||||
#<Stream test.rm> |
|
||||||
#Feed feed1.ffm |
|
||||||
#Format rm |
|
||||||
#AudioBitRate 32 |
|
||||||
#VideoBitRate 128 |
|
||||||
#VideoFrameRate 25 |
|
||||||
#VideoGopSize 25 |
|
||||||
#NoAudio |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
################################################################## |
|
||||||
# A stream coming from a file: you only need to set the input |
|
||||||
# filename and optionally a new format. Supported conversions: |
|
||||||
# AVI -> ASF |
|
||||||
|
|
||||||
#<Stream file.rm> |
|
||||||
#File "/usr/local/httpd/htdocs/tlive.rm" |
|
||||||
#NoAudio |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
#<Stream file.asf> |
|
||||||
#File "/usr/local/httpd/htdocs/test.asf" |
|
||||||
#NoAudio |
|
||||||
#Metadata author "Me" |
|
||||||
#Metadata copyright "Super MegaCorp" |
|
||||||
#Metadata title "Test stream from disk" |
|
||||||
#Metadata comment "Test comment" |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
################################################################## |
|
||||||
# RTSP examples |
|
||||||
# |
|
||||||
# You can access this stream with the RTSP URL: |
|
||||||
# rtsp://localhost:5454/test1-rtsp.mpg |
|
||||||
# |
|
||||||
# A non-standard RTSP redirector is also created. Its URL is: |
|
||||||
# http://localhost:8090/test1-rtsp.rtsp |
|
||||||
|
|
||||||
#<Stream test1-rtsp.mpg> |
|
||||||
#Format rtp |
|
||||||
#File "/usr/local/httpd/htdocs/test1.mpg" |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Transcode an incoming live feed to another live feed, |
|
||||||
# using libx264 and video presets |
|
||||||
|
|
||||||
#<Stream live.h264> |
|
||||||
#Format rtp |
|
||||||
#Feed feed1.ffm |
|
||||||
#VideoCodec libx264 |
|
||||||
#VideoFrameRate 24 |
|
||||||
#VideoBitRate 100 |
|
||||||
#VideoSize 480x272 |
|
||||||
#AVPresetVideo default |
|
||||||
#AVPresetVideo baseline |
|
||||||
#AVOptionVideo flags +global_header |
|
||||||
# |
|
||||||
#AudioCodec aac |
|
||||||
#AudioBitRate 32 |
|
||||||
#AudioChannels 2 |
|
||||||
#AudioSampleRate 22050 |
|
||||||
#AVOptionAudio flags +global_header |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
################################################################## |
|
||||||
# SDP/multicast examples |
|
||||||
# |
|
||||||
# If you want to send your stream in multicast, you must set the |
|
||||||
# multicast address with MulticastAddress. The port and the TTL can |
|
||||||
# also be set. |
|
||||||
# |
|
||||||
# An SDP file is automatically generated by ffserver by adding the |
|
||||||
# 'sdp' extension to the stream name (here |
|
||||||
# http://localhost:8090/test1-sdp.sdp). You should usually give this |
|
||||||
# file to your player to play the stream. |
|
||||||
# |
|
||||||
# The 'NoLoop' option can be used to avoid looping when the stream is |
|
||||||
# terminated. |
|
||||||
|
|
||||||
#<Stream test1-sdp.mpg> |
|
||||||
#Format rtp |
|
||||||
#File "/usr/local/httpd/htdocs/test1.mpg" |
|
||||||
#MulticastAddress 224.124.0.1 |
|
||||||
#MulticastPort 5000 |
|
||||||
#MulticastTTL 16 |
|
||||||
#NoLoop |
|
||||||
#</Stream> |
|
||||||
|
|
||||||
|
|
||||||
################################################################## |
|
||||||
# Special streams |
|
||||||
|
|
||||||
# Server status |
|
||||||
|
|
||||||
<Stream stat.html> |
|
||||||
Format status |
|
||||||
|
|
||||||
# Only allow local people to get the status |
|
||||||
ACL allow localhost |
|
||||||
ACL allow 192.168.0.0 192.168.255.255 |
|
||||||
|
|
||||||
#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico |
|
||||||
</Stream> |
|
||||||
|
|
||||||
|
|
||||||
# Redirect index.html to the appropriate site |
|
||||||
|
|
||||||
<Redirect index.html> |
|
||||||
URL http://www.ffmpeg.org/ |
|
||||||
</Redirect> |
|
@ -1,923 +0,0 @@ |
|||||||
\input texinfo @c -*- texinfo -*- |
|
||||||
@documentencoding UTF-8 |
|
||||||
|
|
||||||
@settitle ffserver Documentation |
|
||||||
@titlepage |
|
||||||
@center @titlefont{ffserver Documentation} |
|
||||||
@end titlepage |
|
||||||
|
|
||||||
@top |
|
||||||
|
|
||||||
@contents |
|
||||||
|
|
||||||
@chapter Synopsis |
|
||||||
|
|
||||||
ffserver [@var{options}] |
|
||||||
|
|
||||||
@chapter Description |
|
||||||
@c man begin DESCRIPTION |
|
||||||
|
|
||||||
@command{ffserver} is a streaming server for both audio and video. |
|
||||||
It supports several live feeds, streaming from files and time shifting |
|
||||||
on live feeds. You can seek to positions in the past on each live |
|
||||||
feed, provided you specify a big enough feed storage. |
|
||||||
|
|
||||||
@command{ffserver} is configured through a configuration file, which |
|
||||||
is read at startup. If not explicitly specified, it will read from |
|
||||||
@file{/etc/ffserver.conf}. |
|
||||||
|
|
||||||
@command{ffserver} receives prerecorded files or FFM streams from some |
|
||||||
@command{ffmpeg} instance as input, then streams them over |
|
||||||
RTP/RTSP/HTTP. |
|
||||||
|
|
||||||
An @command{ffserver} instance will listen on some port as specified |
|
||||||
in the configuration file. You can launch one or more instances of |
|
||||||
@command{ffmpeg} and send one or more FFM streams to the port where |
|
||||||
ffserver is expecting to receive them. Alternately, you can make |
|
||||||
@command{ffserver} launch such @command{ffmpeg} instances at startup. |
|
||||||
|
|
||||||
Input streams are called feeds, and each one is specified by a |
|
||||||
@code{<Feed>} section in the configuration file. |
|
||||||
|
|
||||||
For each feed you can have different output streams in various |
|
||||||
formats, each one specified by a @code{<Stream>} section in the |
|
||||||
configuration file. |
|
||||||
|
|
||||||
@chapter Detailed description |
|
||||||
|
|
||||||
@command{ffserver} works by forwarding streams encoded by |
|
||||||
@command{ffmpeg}, or pre-recorded streams which are read from disk. |
|
||||||
|
|
||||||
Precisely, @command{ffserver} acts as an HTTP server, accepting POST |
|
||||||
requests from @command{ffmpeg} to acquire the stream to publish, and |
|
||||||
serving RTSP clients or HTTP clients GET requests with the stream |
|
||||||
media content. |
|
||||||
|
|
||||||
A feed is an @ref{FFM} stream created by @command{ffmpeg}, and sent to |
|
||||||
a port where @command{ffserver} is listening. |
|
||||||
|
|
||||||
Each feed is identified by a unique name, corresponding to the name |
|
||||||
of the resource published on @command{ffserver}, and is configured by |
|
||||||
a dedicated @code{Feed} section in the configuration file. |
|
||||||
|
|
||||||
The feed publish URL is given by: |
|
||||||
@example |
|
||||||
http://@var{ffserver_ip_address}:@var{http_port}/@var{feed_name} |
|
||||||
@end example |
|
||||||
|
|
||||||
where @var{ffserver_ip_address} is the IP address of the machine where |
|
||||||
@command{ffserver} is installed, @var{http_port} is the port number of |
|
||||||
the HTTP server (configured through the @option{HTTPPort} option), and |
|
||||||
@var{feed_name} is the name of the corresponding feed defined in the |
|
||||||
configuration file. |
|
||||||
|
|
||||||
Each feed is associated to a file which is stored on disk. This stored |
|
||||||
file is used to send pre-recorded data to a player as fast as |
|
||||||
possible when new content is added in real-time to the stream. |
|
||||||
|
|
||||||
A "live-stream" or "stream" is a resource published by |
|
||||||
@command{ffserver}, and made accessible through the HTTP protocol to |
|
||||||
clients. |
|
||||||
|
|
||||||
A stream can be connected to a feed, or to a file. In the first case, |
|
||||||
the published stream is forwarded from the corresponding feed |
|
||||||
generated by a running instance of @command{ffmpeg}, in the second |
|
||||||
case the stream is read from a pre-recorded file. |
|
||||||
|
|
||||||
Each stream is identified by a unique name, corresponding to the name |
|
||||||
of the resource served by @command{ffserver}, and is configured by |
|
||||||
a dedicated @code{Stream} section in the configuration file. |
|
||||||
|
|
||||||
The stream access HTTP URL is given by: |
|
||||||
@example |
|
||||||
http://@var{ffserver_ip_address}:@var{http_port}/@var{stream_name}[@var{options}] |
|
||||||
@end example |
|
||||||
|
|
||||||
The stream access RTSP URL is given by: |
|
||||||
@example |
|
||||||
http://@var{ffserver_ip_address}:@var{rtsp_port}/@var{stream_name}[@var{options}] |
|
||||||
@end example |
|
||||||
|
|
||||||
@var{stream_name} is the name of the corresponding stream defined in |
|
||||||
the configuration file. @var{options} is a list of options specified |
|
||||||
after the URL which affects how the stream is served by |
|
||||||
@command{ffserver}. @var{http_port} and @var{rtsp_port} are the HTTP |
|
||||||
and RTSP ports configured with the options @var{HTTPPort} and |
|
||||||
@var{RTSPPort} respectively. |
|
||||||
|
|
||||||
In case the stream is associated to a feed, the encoding parameters |
|
||||||
must be configured in the stream configuration. They are sent to |
|
||||||
@command{ffmpeg} when setting up the encoding. This allows |
|
||||||
@command{ffserver} to define the encoding parameters used by |
|
||||||
the @command{ffmpeg} encoders. |
|
||||||
|
|
||||||
The @command{ffmpeg} @option{override_ffserver} commandline option |
|
||||||
allows one to override the encoding parameters set by the server. |
|
||||||
|
|
||||||
Multiple streams can be connected to the same feed. |
|
||||||
|
|
||||||
For example, you can have a situation described by the following |
|
||||||
graph: |
|
||||||
|
|
||||||
@verbatim |
|
||||||
_________ __________ |
|
||||||
| | | | |
|
||||||
ffmpeg 1 -----| feed 1 |-----| stream 1 | |
|
||||||
\ |_________|\ |__________| |
|
||||||
\ \ |
|
||||||
\ \ __________ |
|
||||||
\ \ | | |
|
||||||
\ \| stream 2 | |
|
||||||
\ |__________| |
|
||||||
\ |
|
||||||
\ _________ __________ |
|
||||||
\ | | | | |
|
||||||
\| feed 2 |-----| stream 3 | |
|
||||||
|_________| |__________| |
|
||||||
|
|
||||||
_________ __________ |
|
||||||
| | | | |
|
||||||
ffmpeg 2 -----| feed 3 |-----| stream 4 | |
|
||||||
|_________| |__________| |
|
||||||
|
|
||||||
_________ __________ |
|
||||||
| | | | |
|
||||||
| file 1 |-----| stream 5 | |
|
||||||
|_________| |__________| |
|
||||||
|
|
||||||
@end verbatim |
|
||||||
|
|
||||||
@anchor{FFM} |
|
||||||
@section FFM, FFM2 formats |
|
||||||
|
|
||||||
FFM and FFM2 are formats used by ffserver. They allow storing a wide variety of |
|
||||||
video and audio streams and encoding options, and can store a moving time segment |
|
||||||
of an infinite movie or a whole movie. |
|
||||||
|
|
||||||
FFM is version specific, and there is limited compatibility of FFM files |
|
||||||
generated by one version of ffmpeg/ffserver and another version of |
|
||||||
ffmpeg/ffserver. It may work but it is not guaranteed to work. |
|
||||||
|
|
||||||
FFM2 is extensible while maintaining compatibility and should work between |
|
||||||
differing versions of tools. FFM2 is the default. |
|
||||||
|
|
||||||
@section Status stream |
|
||||||
|
|
||||||
@command{ffserver} supports an HTTP interface which exposes the |
|
||||||
current status of the server. |
|
||||||
|
|
||||||
Simply point your browser to the address of the special status stream |
|
||||||
specified in the configuration file. |
|
||||||
|
|
||||||
For example if you have: |
|
||||||
@example |
|
||||||
<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> |
|
||||||
@end example |
|
||||||
|
|
||||||
then the server will post a page with the status information when |
|
||||||
the special stream @file{status.html} is requested. |
|
||||||
|
|
||||||
@section How do I make it work? |
|
||||||
|
|
||||||
As a simple test, just run the following two command lines where INPUTFILE |
|
||||||
is some file which you can decode with ffmpeg: |
|
||||||
|
|
||||||
@example |
|
||||||
ffserver -f doc/ffserver.conf & |
|
||||||
ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm |
|
||||||
@end example |
|
||||||
|
|
||||||
At this point you should be able to go to your Windows machine and fire up |
|
||||||
Windows Media Player (WMP). Go to Open URL and enter |
|
||||||
|
|
||||||
@example |
|
||||||
http://<linuxbox>:8090/test.asf |
|
||||||
@end example |
|
||||||
|
|
||||||
You should (after a short delay) see video and hear audio. |
|
||||||
|
|
||||||
WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to |
|
||||||
transfer the entire file before starting to play. |
|
||||||
The same is true of AVI files. |
|
||||||
|
|
||||||
You should edit the @file{ffserver.conf} file to suit your needs (in |
|
||||||
terms of frame rates etc). Then install @command{ffserver} and |
|
||||||
@command{ffmpeg}, write a script to start them up, and off you go. |
|
||||||
|
|
||||||
@section What else can it do? |
|
||||||
|
|
||||||
You can replay video from .ffm files that was recorded earlier. |
|
||||||
However, there are a number of caveats, including the fact that the |
|
||||||
ffserver parameters must match the original parameters used to record the |
|
||||||
file. If they do not, then ffserver deletes the file before recording into it. |
|
||||||
(Now that I write this, it seems broken). |
|
||||||
|
|
||||||
You can fiddle with many of the codec choices and encoding parameters, and |
|
||||||
there are a bunch more parameters that you cannot control. Post a message |
|
||||||
to the mailing list if there are some 'must have' parameters. Look in |
|
||||||
ffserver.conf for a list of the currently available controls. |
|
||||||
|
|
||||||
It will automatically generate the ASX or RAM files that are often used |
|
||||||
in browsers. These files are actually redirections to the underlying ASF |
|
||||||
or RM file. The reason for this is that the browser often fetches the |
|
||||||
entire file before starting up the external viewer. The redirection files |
|
||||||
are very small and can be transferred quickly. [The stream itself is |
|
||||||
often 'infinite' and thus the browser tries to download it and never |
|
||||||
finishes.] |
|
||||||
|
|
||||||
@section Tips |
|
||||||
|
|
||||||
* When you connect to a live stream, most players (WMP, RA, etc) want to |
|
||||||
buffer a certain number of seconds of material so that they can display the |
|
||||||
signal continuously. However, ffserver (by default) starts sending data |
|
||||||
in realtime. This means that there is a pause of a few seconds while the |
|
||||||
buffering is being done by the player. The good news is that this can be |
|
||||||
cured by adding a '?buffer=5' to the end of the URL. This means that the |
|
||||||
stream should start 5 seconds in the past -- and so the first 5 seconds |
|
||||||
of the stream are sent as fast as the network will allow. It will then |
|
||||||
slow down to real time. This noticeably improves the startup experience. |
|
||||||
|
|
||||||
You can also add a 'Preroll 15' statement into the ffserver.conf that will |
|
||||||
add the 15 second prebuffering on all requests that do not otherwise |
|
||||||
specify a time. In addition, ffserver will skip frames until a key_frame |
|
||||||
is found. This further reduces the startup delay by not transferring data |
|
||||||
that will be discarded. |
|
||||||
|
|
||||||
@section Why does the ?buffer / Preroll stop working after a time? |
|
||||||
|
|
||||||
It turns out that (on my machine at least) the number of frames successfully |
|
||||||
grabbed is marginally less than the number that ought to be grabbed. This |
|
||||||
means that the timestamp in the encoded data stream gets behind realtime. |
|
||||||
This means that if you say 'Preroll 10', then when the stream gets 10 |
|
||||||
or more seconds behind, there is no Preroll left. |
|
||||||
|
|
||||||
Fixing this requires a change in the internals of how timestamps are |
|
||||||
handled. |
|
||||||
|
|
||||||
@section Does the @code{?date=} stuff work. |
|
||||||
|
|
||||||
Yes (subject to the limitation outlined above). Also note that whenever you |
|
||||||
start ffserver, it deletes the ffm file (if any parameters have changed), |
|
||||||
thus wiping out what you had recorded before. |
|
||||||
|
|
||||||
The format of the @code{?date=xxxxxx} is fairly flexible. You should use one |
|
||||||
of the following formats (the 'T' is literal): |
|
||||||
|
|
||||||
@example |
|
||||||
* YYYY-MM-DDTHH:MM:SS (localtime) |
|
||||||
* YYYY-MM-DDTHH:MM:SSZ (UTC) |
|
||||||
@end example |
|
||||||
|
|
||||||
You can omit the YYYY-MM-DD, and then it refers to the current day. However |
|
||||||
note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this |
|
||||||
may be in the future and so is unlikely to be useful. |
|
||||||
|
|
||||||
You use this by adding the ?date= to the end of the URL for the stream. |
|
||||||
For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}. |
|
||||||
@c man end |
|
||||||
|
|
||||||
@chapter Options |
|
||||||
@c man begin OPTIONS |
|
||||||
|
|
||||||
@include fftools-common-opts.texi |
|
||||||
|
|
||||||
@section Main options |
|
||||||
|
|
||||||
@table @option |
|
||||||
@item -f @var{configfile} |
|
||||||
Read configuration file @file{configfile}. If not specified it will |
|
||||||
read by default from @file{/etc/ffserver.conf}. |
|
||||||
|
|
||||||
@item -n |
|
||||||
Enable no-launch mode. This option disables all the @code{Launch} |
|
||||||
directives within the various @code{<Feed>} sections. Since |
|
||||||
@command{ffserver} will not launch any @command{ffmpeg} instances, you |
|
||||||
will have to launch them manually. |
|
||||||
|
|
||||||
@item -d |
|
||||||
Enable debug mode. This option increases log verbosity, and directs |
|
||||||
log messages to stdout. When specified, the @option{CustomLog} option |
|
||||||
is ignored. |
|
||||||
@end table |
|
||||||
|
|
||||||
@chapter Configuration file syntax |
|
||||||
|
|
||||||
@command{ffserver} reads a configuration file containing global |
|
||||||
options and settings for each stream and feed. |
|
||||||
|
|
||||||
The configuration file consists of global options and dedicated |
|
||||||
sections, which must be introduced by "<@var{SECTION_NAME} |
|
||||||
@var{ARGS}>" on a separate line and must be terminated by a line in |
|
||||||
the form "</@var{SECTION_NAME}>". @var{ARGS} is optional. |
|
||||||
|
|
||||||
Currently the following sections are recognized: @samp{Feed}, |
|
||||||
@samp{Stream}, @samp{Redirect}. |
|
||||||
|
|
||||||
A line starting with @code{#} is ignored and treated as a comment. |
|
||||||
|
|
||||||
Name of options and sections are case-insensitive. |
|
||||||
|
|
||||||
@section ACL syntax |
|
||||||
An ACL (Access Control List) specifies the address which are allowed |
|
||||||
to access a given stream, or to write a given feed. |
|
||||||
|
|
||||||
It accepts the following forms |
|
||||||
@itemize |
|
||||||
@item |
|
||||||
Allow/deny access to @var{address}. |
|
||||||
@example |
|
||||||
ACL ALLOW <address> |
|
||||||
ACL DENY <address> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Allow/deny access to ranges of addresses from @var{first_address} to |
|
||||||
@var{last_address}. |
|
||||||
@example |
|
||||||
ACL ALLOW <first_address> <last_address> |
|
||||||
ACL DENY <first_address> <last_address> |
|
||||||
@end example |
|
||||||
@end itemize |
|
||||||
|
|
||||||
You can repeat the ACL allow/deny as often as you like. It is on a per |
|
||||||
stream basis. The first match defines the action. If there are no matches, |
|
||||||
then the default is the inverse of the last ACL statement. |
|
||||||
|
|
||||||
Thus 'ACL allow localhost' only allows access from localhost. |
|
||||||
'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and |
|
||||||
allow everybody else. |
|
||||||
|
|
||||||
@section Global options |
|
||||||
@table @option |
|
||||||
@item HTTPPort @var{port_number} |
|
||||||
@item Port @var{port_number} |
|
||||||
@item RTSPPort @var{port_number} |
|
||||||
|
|
||||||
@var{HTTPPort} sets the HTTP server listening TCP port number, |
|
||||||
@var{RTSPPort} sets the RTSP server listening TCP port number. |
|
||||||
|
|
||||||
@var{Port} is the equivalent of @var{HTTPPort} and is deprecated. |
|
||||||
|
|
||||||
You must select a different port from your standard HTTP web server if |
|
||||||
it is running on the same computer. |
|
||||||
|
|
||||||
If not specified, no corresponding server will be created. |
|
||||||
|
|
||||||
@item HTTPBindAddress @var{ip_address} |
|
||||||
@item BindAddress @var{ip_address} |
|
||||||
@item RTSPBindAddress @var{ip_address} |
|
||||||
Set address on which the HTTP/RTSP server is bound. Only useful if you |
|
||||||
have several network interfaces. |
|
||||||
|
|
||||||
@var{BindAddress} is the equivalent of @var{HTTPBindAddress} and is |
|
||||||
deprecated. |
|
||||||
|
|
||||||
@item MaxHTTPConnections @var{n} |
|
||||||
Set number of simultaneous HTTP connections that can be handled. It |
|
||||||
has to be defined @emph{before} the @option{MaxClients} parameter, |
|
||||||
since it defines the @option{MaxClients} maximum limit. |
|
||||||
|
|
||||||
Default value is 2000. |
|
||||||
|
|
||||||
@item MaxClients @var{n} |
|
||||||
Set number of simultaneous requests that can be handled. Since |
|
||||||
@command{ffserver} is very fast, it is more likely that you will want |
|
||||||
to leave this high and use @option{MaxBandwidth}. |
|
||||||
|
|
||||||
Default value is 5. |
|
||||||
|
|
||||||
@item MaxBandwidth @var{kbps} |
|
||||||
Set the maximum amount of kbit/sec that you are prepared to consume |
|
||||||
when streaming to clients. |
|
||||||
|
|
||||||
Default value is 1000. |
|
||||||
|
|
||||||
@item CustomLog @var{filename} |
|
||||||
Set access log file (uses standard Apache log file format). '-' is the |
|
||||||
standard output. |
|
||||||
|
|
||||||
If not specified @command{ffserver} will produce no log. |
|
||||||
|
|
||||||
In case the commandline option @option{-d} is specified this option is |
|
||||||
ignored, and the log is written to standard output. |
|
||||||
|
|
||||||
@item NoDaemon |
|
||||||
Set no-daemon mode. This option is currently ignored since now |
|
||||||
@command{ffserver} will always work in no-daemon mode, and is |
|
||||||
deprecated. |
|
||||||
|
|
||||||
@item UseDefaults |
|
||||||
@item NoDefaults |
|
||||||
Control whether default codec options are used for the all streams or not. |
|
||||||
Each stream may overwrite this setting for its own. Default is @var{UseDefaults}. |
|
||||||
The last occurrence overrides the previous if multiple definitions exist. |
|
||||||
@end table |
|
||||||
|
|
||||||
@section Feed section |
|
||||||
|
|
||||||
A Feed section defines a feed provided to @command{ffserver}. |
|
||||||
|
|
||||||
Each live feed contains one video and/or audio sequence coming from an |
|
||||||
@command{ffmpeg} encoder or another @command{ffserver}. This sequence |
|
||||||
may be encoded simultaneously with several codecs at several |
|
||||||
resolutions. |
|
||||||
|
|
||||||
A feed instance specification is introduced by a line in the form: |
|
||||||
@example |
|
||||||
<Feed FEED_FILENAME> |
|
||||||
@end example |
|
||||||
|
|
||||||
where @var{FEED_FILENAME} specifies the unique name of the FFM stream. |
|
||||||
|
|
||||||
The following options are recognized within a Feed section. |
|
||||||
|
|
||||||
@table @option |
|
||||||
@item File @var{filename} |
|
||||||
@item ReadOnlyFile @var{filename} |
|
||||||
Set the path where the feed file is stored on disk. |
|
||||||
|
|
||||||
If not specified, the @file{/tmp/FEED.ffm} is assumed, where |
|
||||||
@var{FEED} is the feed name. |
|
||||||
|
|
||||||
If @option{ReadOnlyFile} is used the file is marked as read-only and |
|
||||||
it will not be deleted or updated. |
|
||||||
|
|
||||||
@item Truncate |
|
||||||
Truncate the feed file, rather than appending to it. By default |
|
||||||
@command{ffserver} will append data to the file, until the maximum |
|
||||||
file size value is reached (see @option{FileMaxSize} option). |
|
||||||
|
|
||||||
@item FileMaxSize @var{size} |
|
||||||
Set maximum size of the feed file in bytes. 0 means unlimited. The |
|
||||||
postfixes @code{K} (2^10), @code{M} (2^20), and @code{G} (2^30) are |
|
||||||
recognized. |
|
||||||
|
|
||||||
Default value is 5M. |
|
||||||
|
|
||||||
@item Launch @var{args} |
|
||||||
Launch an @command{ffmpeg} command when creating @command{ffserver}. |
|
||||||
|
|
||||||
@var{args} must be a sequence of arguments to be provided to an |
|
||||||
@command{ffmpeg} instance. The first provided argument is ignored, and |
|
||||||
it is replaced by a path with the same dirname of the @command{ffserver} |
|
||||||
instance, followed by the remaining argument and terminated with a |
|
||||||
path corresponding to the feed. |
|
||||||
|
|
||||||
When the launched process exits, @command{ffserver} will launch |
|
||||||
another program instance. |
|
||||||
|
|
||||||
In case you need a more complex @command{ffmpeg} configuration, |
|
||||||
e.g. if you need to generate multiple FFM feeds with a single |
|
||||||
@command{ffmpeg} instance, you should launch @command{ffmpeg} by hand. |
|
||||||
|
|
||||||
This option is ignored in case the commandline option @option{-n} is |
|
||||||
specified. |
|
||||||
|
|
||||||
@item ACL @var{spec} |
|
||||||
Specify the list of IP address which are allowed or denied to write |
|
||||||
the feed. Multiple ACL options can be specified. |
|
||||||
@end table |
|
||||||
|
|
||||||
@section Stream section |
|
||||||
|
|
||||||
A Stream section defines a stream provided by @command{ffserver}, and |
|
||||||
identified by a single name. |
|
||||||
|
|
||||||
The stream is sent when answering a request containing the stream |
|
||||||
name. |
|
||||||
|
|
||||||
A stream section must be introduced by the line: |
|
||||||
@example |
|
||||||
<Stream STREAM_NAME> |
|
||||||
@end example |
|
||||||
|
|
||||||
where @var{STREAM_NAME} specifies the unique name of the stream. |
|
||||||
|
|
||||||
The following options are recognized within a Stream section. |
|
||||||
|
|
||||||
Encoding options are marked with the @emph{encoding} tag, and they are |
|
||||||
used to set the encoding parameters, and are mapped to libavcodec |
|
||||||
encoding options. Not all encoding options are supported, in |
|
||||||
particular it is not possible to set encoder private options. In order |
|
||||||
to override the encoding options specified by @command{ffserver}, you |
|
||||||
can use the @command{ffmpeg} @option{override_ffserver} commandline |
|
||||||
option. |
|
||||||
|
|
||||||
Only one of the @option{Feed} and @option{File} options should be set. |
|
||||||
|
|
||||||
@table @option |
|
||||||
@item Feed @var{feed_name} |
|
||||||
Set the input feed. @var{feed_name} must correspond to an existing |
|
||||||
feed defined in a @code{Feed} section. |
|
||||||
|
|
||||||
When this option is set, encoding options are used to setup the |
|
||||||
encoding operated by the remote @command{ffmpeg} process. |
|
||||||
|
|
||||||
@item File @var{filename} |
|
||||||
Set the filename of the pre-recorded input file to stream. |
|
||||||
|
|
||||||
When this option is set, encoding options are ignored and the input |
|
||||||
file content is re-streamed as is. |
|
||||||
|
|
||||||
@item Format @var{format_name} |
|
||||||
Set the format of the output stream. |
|
||||||
|
|
||||||
Must be the name of a format recognized by FFmpeg. If set to |
|
||||||
@samp{status}, it is treated as a status stream. |
|
||||||
|
|
||||||
@item InputFormat @var{format_name} |
|
||||||
Set input format. If not specified, it is automatically guessed. |
|
||||||
|
|
||||||
@item Preroll @var{n} |
|
||||||
Set this to the number of seconds backwards in time to start. Note that |
|
||||||
most players will buffer 5-10 seconds of video, and also you need to allow |
|
||||||
for a keyframe to appear in the data stream. |
|
||||||
|
|
||||||
Default value is 0. |
|
||||||
|
|
||||||
@item StartSendOnKey |
|
||||||
Do not send stream until it gets the first key frame. By default |
|
||||||
@command{ffserver} will send data immediately. |
|
||||||
|
|
||||||
@item MaxTime @var{n} |
|
||||||
Set the number of seconds to run. This value set the maximum duration |
|
||||||
of the stream a client will be able to receive. |
|
||||||
|
|
||||||
A value of 0 means that no limit is set on the stream duration. |
|
||||||
|
|
||||||
@item ACL @var{spec} |
|
||||||
Set ACL for the stream. |
|
||||||
|
|
||||||
@item DynamicACL @var{spec} |
|
||||||
|
|
||||||
@item RTSPOption @var{option} |
|
||||||
|
|
||||||
@item MulticastAddress @var{address} |
|
||||||
|
|
||||||
@item MulticastPort @var{port} |
|
||||||
|
|
||||||
@item MulticastTTL @var{integer} |
|
||||||
|
|
||||||
@item NoLoop |
|
||||||
|
|
||||||
@item FaviconURL @var{url} |
|
||||||
Set favicon (favourite icon) for the server status page. It is ignored |
|
||||||
for regular streams. |
|
||||||
|
|
||||||
@item Author @var{value} |
|
||||||
@item Comment @var{value} |
|
||||||
@item Copyright @var{value} |
|
||||||
@item Title @var{value} |
|
||||||
Set metadata corresponding to the option. All these options are |
|
||||||
deprecated in favor of @option{Metadata}. |
|
||||||
|
|
||||||
@item Metadata @var{key} @var{value} |
|
||||||
Set metadata value on the output stream. |
|
||||||
|
|
||||||
@item UseDefaults |
|
||||||
@item NoDefaults |
|
||||||
Control whether default codec options are used for the stream or not. |
|
||||||
Default is @var{UseDefaults} unless disabled globally. |
|
||||||
|
|
||||||
@item NoAudio |
|
||||||
@item NoVideo |
|
||||||
Suppress audio/video. |
|
||||||
|
|
||||||
@item AudioCodec @var{codec_name} (@emph{encoding,audio}) |
|
||||||
Set audio codec. |
|
||||||
|
|
||||||
@item AudioBitRate @var{rate} (@emph{encoding,audio}) |
|
||||||
Set bitrate for the audio stream in kbits per second. |
|
||||||
|
|
||||||
@item AudioChannels @var{n} (@emph{encoding,audio}) |
|
||||||
Set number of audio channels. |
|
||||||
|
|
||||||
@item AudioSampleRate @var{n} (@emph{encoding,audio}) |
|
||||||
Set sampling frequency for audio. When using low bitrates, you should |
|
||||||
lower this frequency to 22050 or 11025. The supported frequencies |
|
||||||
depend on the selected audio codec. |
|
||||||
|
|
||||||
@item AVOptionAudio [@var{codec}:]@var{option} @var{value} (@emph{encoding,audio}) |
|
||||||
Set generic or private option for audio stream. |
|
||||||
Private option must be prefixed with codec name or codec must be defined before. |
|
||||||
|
|
||||||
@item AVPresetAudio @var{preset} (@emph{encoding,audio}) |
|
||||||
Set preset for audio stream. |
|
||||||
|
|
||||||
@item VideoCodec @var{codec_name} (@emph{encoding,video}) |
|
||||||
Set video codec. |
|
||||||
|
|
||||||
@item VideoBitRate @var{n} (@emph{encoding,video}) |
|
||||||
Set bitrate for the video stream in kbits per second. |
|
||||||
|
|
||||||
@item VideoBitRateRange @var{range} (@emph{encoding,video}) |
|
||||||
Set video bitrate range. |
|
||||||
|
|
||||||
A range must be specified in the form @var{minrate}-@var{maxrate}, and |
|
||||||
specifies the @option{minrate} and @option{maxrate} encoding options |
|
||||||
expressed in kbits per second. |
|
||||||
|
|
||||||
@item VideoBitRateRangeTolerance @var{n} (@emph{encoding,video}) |
|
||||||
Set video bitrate tolerance in kbits per second. |
|
||||||
|
|
||||||
@item PixelFormat @var{pixel_format} (@emph{encoding,video}) |
|
||||||
Set video pixel format. |
|
||||||
|
|
||||||
@item Debug @var{integer} (@emph{encoding,video}) |
|
||||||
Set video @option{debug} encoding option. |
|
||||||
|
|
||||||
@item Strict @var{integer} (@emph{encoding,video}) |
|
||||||
Set video @option{strict} encoding option. |
|
||||||
|
|
||||||
@item VideoBufferSize @var{n} (@emph{encoding,video}) |
|
||||||
Set ratecontrol buffer size, expressed in KB. |
|
||||||
|
|
||||||
@item VideoFrameRate @var{n} (@emph{encoding,video}) |
|
||||||
Set number of video frames per second. |
|
||||||
|
|
||||||
@item VideoSize (@emph{encoding,video}) |
|
||||||
Set size of the video frame, must be an abbreviation or in the form |
|
||||||
@var{W}x@var{H}. See @ref{video size syntax,,the Video size section |
|
||||||
in the ffmpeg-utils(1) manual,ffmpeg-utils}. |
|
||||||
|
|
||||||
Default value is @code{160x128}. |
|
||||||
|
|
||||||
@item VideoIntraOnly (@emph{encoding,video}) |
|
||||||
Transmit only intra frames (useful for low bitrates, but kills frame rate). |
|
||||||
|
|
||||||
@item VideoGopSize @var{n} (@emph{encoding,video}) |
|
||||||
If non-intra only, an intra frame is transmitted every VideoGopSize |
|
||||||
frames. Video synchronization can only begin at an intra frame. |
|
||||||
|
|
||||||
@item VideoTag @var{tag} (@emph{encoding,video}) |
|
||||||
Set video tag. |
|
||||||
|
|
||||||
@item VideoHighQuality (@emph{encoding,video}) |
|
||||||
@item Video4MotionVector (@emph{encoding,video}) |
|
||||||
|
|
||||||
@item BitExact (@emph{encoding,video}) |
|
||||||
Set bitexact encoding flag. |
|
||||||
|
|
||||||
@item IdctSimple (@emph{encoding,video}) |
|
||||||
Set simple IDCT algorithm. |
|
||||||
|
|
||||||
@item Qscale @var{n} (@emph{encoding,video}) |
|
||||||
Enable constant quality encoding, and set video qscale (quantization |
|
||||||
scale) value, expressed in @var{n} QP units. |
|
||||||
|
|
||||||
@item VideoQMin @var{n} (@emph{encoding,video}) |
|
||||||
@item VideoQMax @var{n} (@emph{encoding,video}) |
|
||||||
Set video qmin/qmax. |
|
||||||
|
|
||||||
@item VideoQDiff @var{integer} (@emph{encoding,video}) |
|
||||||
Set video @option{qdiff} encoding option. |
|
||||||
|
|
||||||
@item LumiMask @var{float} (@emph{encoding,video}) |
|
||||||
@item DarkMask @var{float} (@emph{encoding,video}) |
|
||||||
Set @option{lumi_mask}/@option{dark_mask} encoding options. |
|
||||||
|
|
||||||
@item AVOptionVideo [@var{codec}:]@var{option} @var{value} (@emph{encoding,video}) |
|
||||||
Set generic or private option for video stream. |
|
||||||
Private option must be prefixed with codec name or codec must be defined before. |
|
||||||
|
|
||||||
@item AVPresetVideo @var{preset} (@emph{encoding,video}) |
|
||||||
Set preset for video stream. |
|
||||||
|
|
||||||
@var{preset} must be the path of a preset file. |
|
||||||
@end table |
|
||||||
|
|
||||||
@subsection Server status stream |
|
||||||
|
|
||||||
A server status stream is a special stream which is used to show |
|
||||||
statistics about the @command{ffserver} operations. |
|
||||||
|
|
||||||
It must be specified setting the option @option{Format} to |
|
||||||
@samp{status}. |
|
||||||
|
|
||||||
@section Redirect section |
|
||||||
|
|
||||||
A redirect section specifies where to redirect the requested URL to |
|
||||||
another page. |
|
||||||
|
|
||||||
A redirect section must be introduced by the line: |
|
||||||
@example |
|
||||||
<Redirect NAME> |
|
||||||
@end example |
|
||||||
|
|
||||||
where @var{NAME} is the name of the page which should be redirected. |
|
||||||
|
|
||||||
It only accepts the option @option{URL}, which specify the redirection |
|
||||||
URL. |
|
||||||
|
|
||||||
@chapter Stream examples |
|
||||||
|
|
||||||
@itemize |
|
||||||
@item |
|
||||||
Multipart JPEG |
|
||||||
@example |
|
||||||
<Stream test.mjpg> |
|
||||||
Feed feed1.ffm |
|
||||||
Format mpjpeg |
|
||||||
VideoFrameRate 2 |
|
||||||
VideoIntraOnly |
|
||||||
NoAudio |
|
||||||
Strict -1 |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Single JPEG |
|
||||||
@example |
|
||||||
<Stream test.jpg> |
|
||||||
Feed feed1.ffm |
|
||||||
Format jpeg |
|
||||||
VideoFrameRate 2 |
|
||||||
VideoIntraOnly |
|
||||||
VideoSize 352x240 |
|
||||||
NoAudio |
|
||||||
Strict -1 |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Flash |
|
||||||
@example |
|
||||||
<Stream test.swf> |
|
||||||
Feed feed1.ffm |
|
||||||
Format swf |
|
||||||
VideoFrameRate 2 |
|
||||||
VideoIntraOnly |
|
||||||
NoAudio |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
ASF compatible |
|
||||||
@example |
|
||||||
<Stream test.asf> |
|
||||||
Feed feed1.ffm |
|
||||||
Format asf |
|
||||||
VideoFrameRate 15 |
|
||||||
VideoSize 352x240 |
|
||||||
VideoBitRate 256 |
|
||||||
VideoBufferSize 40 |
|
||||||
VideoGopSize 30 |
|
||||||
AudioBitRate 64 |
|
||||||
StartSendOnKey |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
MP3 audio |
|
||||||
@example |
|
||||||
<Stream test.mp3> |
|
||||||
Feed feed1.ffm |
|
||||||
Format mp2 |
|
||||||
AudioCodec mp3 |
|
||||||
AudioBitRate 64 |
|
||||||
AudioChannels 1 |
|
||||||
AudioSampleRate 44100 |
|
||||||
NoVideo |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Ogg Vorbis audio |
|
||||||
@example |
|
||||||
<Stream test.ogg> |
|
||||||
Feed feed1.ffm |
|
||||||
Metadata title "Stream title" |
|
||||||
AudioBitRate 64 |
|
||||||
AudioChannels 2 |
|
||||||
AudioSampleRate 44100 |
|
||||||
NoVideo |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Real with audio only at 32 kbits |
|
||||||
@example |
|
||||||
<Stream test.ra> |
|
||||||
Feed feed1.ffm |
|
||||||
Format rm |
|
||||||
AudioBitRate 32 |
|
||||||
NoVideo |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
Real with audio and video at 64 kbits |
|
||||||
@example |
|
||||||
<Stream test.rm> |
|
||||||
Feed feed1.ffm |
|
||||||
Format rm |
|
||||||
AudioBitRate 32 |
|
||||||
VideoBitRate 128 |
|
||||||
VideoFrameRate 25 |
|
||||||
VideoGopSize 25 |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@item |
|
||||||
For stream coming from a file: you only need to set the input filename |
|
||||||
and optionally a new format. |
|
||||||
|
|
||||||
@example |
|
||||||
<Stream file.rm> |
|
||||||
File "/usr/local/httpd/htdocs/tlive.rm" |
|
||||||
NoAudio |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
|
|
||||||
@example |
|
||||||
<Stream file.asf> |
|
||||||
File "/usr/local/httpd/htdocs/test.asf" |
|
||||||
NoAudio |
|
||||||
Metadata author "Me" |
|
||||||
Metadata copyright "Super MegaCorp" |
|
||||||
Metadata title "Test stream from disk" |
|
||||||
Metadata comment "Test comment" |
|
||||||
</Stream> |
|
||||||
@end example |
|
||||||
@end itemize |
|
||||||
|
|
||||||
@c man end |
|
||||||
|
|
||||||
@include config.texi |
|
||||||
@ifset config-all |
|
||||||
@ifset config-avutil |
|
||||||
@include utils.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-avcodec |
|
||||||
@include codecs.texi |
|
||||||
@include bitstream_filters.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-avformat |
|
||||||
@include formats.texi |
|
||||||
@include protocols.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-avdevice |
|
||||||
@include devices.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-swresample |
|
||||||
@include resampler.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-swscale |
|
||||||
@include scaler.texi |
|
||||||
@end ifset |
|
||||||
@ifset config-avfilter |
|
||||||
@include filters.texi |
|
||||||
@end ifset |
|
||||||
@end ifset |
|
||||||
|
|
||||||
@chapter See Also |
|
||||||
|
|
||||||
@ifhtml |
|
||||||
@ifset config-all |
|
||||||
@url{ffserver.html,ffserver}, |
|
||||||
@end ifset |
|
||||||
@ifset config-not-all |
|
||||||
@url{ffserver-all.html,ffserver-all}, |
|
||||||
@end ifset |
|
||||||
the @file{doc/ffserver.conf} example, |
|
||||||
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, |
|
||||||
@url{ffmpeg-utils.html,ffmpeg-utils}, |
|
||||||
@url{ffmpeg-scaler.html,ffmpeg-scaler}, |
|
||||||
@url{ffmpeg-resampler.html,ffmpeg-resampler}, |
|
||||||
@url{ffmpeg-codecs.html,ffmpeg-codecs}, |
|
||||||
@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters}, |
|
||||||
@url{ffmpeg-formats.html,ffmpeg-formats}, |
|
||||||
@url{ffmpeg-devices.html,ffmpeg-devices}, |
|
||||||
@url{ffmpeg-protocols.html,ffmpeg-protocols}, |
|
||||||
@url{ffmpeg-filters.html,ffmpeg-filters} |
|
||||||
@end ifhtml |
|
||||||
|
|
||||||
@ifnothtml |
|
||||||
@ifset config-all |
|
||||||
ffserver(1), |
|
||||||
@end ifset |
|
||||||
@ifset config-not-all |
|
||||||
ffserver-all(1), |
|
||||||
@end ifset |
|
||||||
the @file{doc/ffserver.conf} example, ffmpeg(1), ffplay(1), ffprobe(1), |
|
||||||
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), |
|
||||||
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), |
|
||||||
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) |
|
||||||
@end ifnothtml |
|
||||||
|
|
||||||
@include authors.texi |
|
||||||
|
|
||||||
@ignore |
|
||||||
|
|
||||||
@setfilename ffserver |
|
||||||
@settitle ffserver video server |
|
||||||
|
|
||||||
@end ignore |
|
||||||
|
|
||||||
@bye |
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,155 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard |
|
||||||
* |
|
||||||
* This file is part of FFmpeg. |
|
||||||
* |
|
||||||
* FFmpeg is free software; you can redistribute it and/or |
|
||||||
* modify it under the terms of the GNU Lesser General Public |
|
||||||
* License as published by the Free Software Foundation; either |
|
||||||
* version 2.1 of the License, or (at your option) any later version. |
|
||||||
* |
|
||||||
* FFmpeg is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||||
* Lesser General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU Lesser General Public |
|
||||||
* License along with FFmpeg; if not, write to the Free Software |
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef FFTOOLS_FFSERVER_CONFIG_H |
|
||||||
#define FFTOOLS_FFSERVER_CONFIG_H |
|
||||||
|
|
||||||
#define FFM_PACKET_SIZE 4096 |
|
||||||
|
|
||||||
#include "libavutil/dict.h" |
|
||||||
#include "libavformat/avformat.h" |
|
||||||
#include "libavformat/network.h" |
|
||||||
|
|
||||||
#define FFSERVER_MAX_STREAMS 20 |
|
||||||
|
|
||||||
/* each generated stream is described here */ |
|
||||||
enum FFServerStreamType { |
|
||||||
STREAM_TYPE_LIVE, |
|
||||||
STREAM_TYPE_STATUS, |
|
||||||
STREAM_TYPE_REDIRECT, |
|
||||||
}; |
|
||||||
|
|
||||||
enum FFServerIPAddressAction { |
|
||||||
IP_ALLOW = 1, |
|
||||||
IP_DENY, |
|
||||||
}; |
|
||||||
|
|
||||||
typedef struct FFServerIPAddressACL { |
|
||||||
struct FFServerIPAddressACL *next; |
|
||||||
enum FFServerIPAddressAction action; |
|
||||||
/* These are in host order */ |
|
||||||
struct in_addr first; |
|
||||||
struct in_addr last; |
|
||||||
} FFServerIPAddressACL; |
|
||||||
|
|
||||||
/**
|
|
||||||
* This holds the stream parameters for an AVStream, it cannot be a AVStream |
|
||||||
* because AVStreams cannot be instanciated without a AVFormatContext, especially |
|
||||||
* not outside libavformat. |
|
||||||
* |
|
||||||
* The fields of this struct have the same semantics as the fields of an AVStream. |
|
||||||
*/ |
|
||||||
typedef struct LayeredAVStream { |
|
||||||
int index; |
|
||||||
int id; |
|
||||||
AVCodecParameters *codecpar; |
|
||||||
AVCodecContext *codec; |
|
||||||
AVRational time_base; |
|
||||||
int pts_wrap_bits; |
|
||||||
AVRational sample_aspect_ratio; |
|
||||||
char *recommended_encoder_configuration; |
|
||||||
} LayeredAVStream; |
|
||||||
|
|
||||||
/* description of each stream of the ffserver.conf file */ |
|
||||||
typedef struct FFServerStream { |
|
||||||
enum FFServerStreamType stream_type; |
|
||||||
char filename[1024]; /* stream filename */ |
|
||||||
struct FFServerStream *feed; /* feed we are using (can be null if coming from file) */ |
|
||||||
AVDictionary *in_opts; /* input parameters */ |
|
||||||
AVDictionary *metadata; /* metadata to set on the stream */ |
|
||||||
AVInputFormat *ifmt; /* if non NULL, force input format */ |
|
||||||
AVOutputFormat *fmt; |
|
||||||
FFServerIPAddressACL *acl; |
|
||||||
char dynamic_acl[1024]; |
|
||||||
int nb_streams; |
|
||||||
int prebuffer; /* Number of milliseconds early to start */ |
|
||||||
int64_t max_time; /* Number of milliseconds to run */ |
|
||||||
int send_on_key; |
|
||||||
LayeredAVStream *streams[FFSERVER_MAX_STREAMS]; |
|
||||||
int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */ |
|
||||||
char feed_filename[1024]; /* file name of the feed storage, or
|
|
||||||
input file name for a stream */ |
|
||||||
pid_t pid; /* Of ffmpeg process */ |
|
||||||
time_t pid_start; /* Of ffmpeg process */ |
|
||||||
char **child_argv; |
|
||||||
struct FFServerStream *next; |
|
||||||
unsigned bandwidth; /* bandwidth, in kbits/s */ |
|
||||||
/* RTSP options */ |
|
||||||
char *rtsp_option; |
|
||||||
/* multicast specific */ |
|
||||||
int is_multicast; |
|
||||||
struct in_addr multicast_ip; |
|
||||||
int multicast_port; /* first port used for multicast */ |
|
||||||
int multicast_ttl; |
|
||||||
int loop; /* if true, send the stream in loops (only meaningful if file) */ |
|
||||||
char single_frame; /* only single frame */ |
|
||||||
|
|
||||||
/* feed specific */ |
|
||||||
int feed_opened; /* true if someone is writing to the feed */ |
|
||||||
int is_feed; /* true if it is a feed */ |
|
||||||
int readonly; /* True if writing is prohibited to the file */ |
|
||||||
int truncate; /* True if feeder connection truncate the feed file */ |
|
||||||
int conns_served; |
|
||||||
int64_t bytes_served; |
|
||||||
int64_t feed_max_size; /* maximum storage size, zero means unlimited */ |
|
||||||
int64_t feed_write_index; /* current write position in feed (it wraps around) */ |
|
||||||
int64_t feed_size; /* current size of feed */ |
|
||||||
struct FFServerStream *next_feed; |
|
||||||
} FFServerStream; |
|
||||||
|
|
||||||
typedef struct FFServerConfig { |
|
||||||
char *filename; |
|
||||||
FFServerStream *first_feed; /* contains only feeds */ |
|
||||||
FFServerStream *first_stream; /* contains all streams, including feeds */ |
|
||||||
unsigned int nb_max_http_connections; |
|
||||||
unsigned int nb_max_connections; |
|
||||||
uint64_t max_bandwidth; |
|
||||||
int debug; |
|
||||||
int bitexact; |
|
||||||
char logfilename[1024]; |
|
||||||
struct sockaddr_in http_addr; |
|
||||||
struct sockaddr_in rtsp_addr; |
|
||||||
int errors; |
|
||||||
int warnings; |
|
||||||
int use_defaults; |
|
||||||
// Following variables MUST NOT be used outside configuration parsing code.
|
|
||||||
enum AVCodecID guessed_audio_codec_id; |
|
||||||
enum AVCodecID guessed_video_codec_id; |
|
||||||
AVDictionary *video_opts; /* AVOptions for video encoder */ |
|
||||||
AVDictionary *audio_opts; /* AVOptions for audio encoder */ |
|
||||||
AVCodecContext *dummy_actx; /* Used internally to test audio AVOptions. */ |
|
||||||
AVCodecContext *dummy_vctx; /* Used internally to test video AVOptions. */ |
|
||||||
int no_audio; |
|
||||||
int no_video; |
|
||||||
int line_num; |
|
||||||
int stream_use_defaults; |
|
||||||
} FFServerConfig; |
|
||||||
|
|
||||||
void ffserver_get_arg(char *buf, int buf_size, const char **pp); |
|
||||||
|
|
||||||
void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream* feed, |
|
||||||
FFServerIPAddressACL *ext_acl, |
|
||||||
const char *p, const char *filename, int line_num); |
|
||||||
|
|
||||||
int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config); |
|
||||||
|
|
||||||
void ffserver_free_child_args(void *argsp); |
|
||||||
|
|
||||||
#endif /* FFTOOLS_FFSERVER_CONFIG_H */ |
|
@ -1,45 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
|
|
||||||
target_samples=$3 |
|
||||||
target_exec=$4 |
|
||||||
target_path=$5 |
|
||||||
|
|
||||||
#perl -e 'chomp($wd = `pwd`); print map { s!tests/data/!!; "<Stream $_>\nFile $wd/tests/data/$_\n</Stream>\n\n" } @ARGV' tests/data/a* >> tests/data/ffserver.conf |
|
||||||
#perl -e 'chomp($wd = `pwd`); print map { s!tests/data/!!; "<Stream $_.asf>\nFile $wd/tests/data/$_\n</Stream>\n\n" } @ARGV' tests/data/a* >> tests/data/ffserver.conf |
|
||||||
|
|
||||||
. $(dirname $0)/md5.sh |
|
||||||
|
|
||||||
FILES=$(sed -n 's/^[^#]*<Stream \(.*\)>.*/\1/p' $2 | grep -v html) |
|
||||||
|
|
||||||
rm -f tests/feed1.ffm |
|
||||||
$target_exec ${target_path}/ffserver${PROGSUF} -f "$2" & |
|
||||||
FFSERVER_PID=$! |
|
||||||
echo "Waiting for feeds to startup..." |
|
||||||
sleep 2 |
|
||||||
( |
|
||||||
cd tests/data || exit $? |
|
||||||
rm -f ff-* ffserver.regression |
|
||||||
WGET_OPTIONS="--user-agent=NSPlayer -q --proxy=off -e verbose=off -e server_response=off -T3 --tries=1" |
|
||||||
for file in $FILES; do |
|
||||||
if [ $(expr $file : "a-*") != 0 ]; then |
|
||||||
wget $WGET_OPTIONS -O - http://localhost:9999/$file > ff-$file |
|
||||||
else |
|
||||||
wget $WGET_OPTIONS -O - http://localhost:9999/$file?date=19700101T000000Z | dd bs=1 count=100000 > ff-$file 2>/dev/null |
|
||||||
fi |
|
||||||
do_md5sum ff-$file >>ffserver.regression |
|
||||||
done |
|
||||||
wget $WGET_OPTIONS -O - 'http://localhost:9999/teststat.html?abc' > ff-stat 2>/dev/null |
|
||||||
do_md5sum ff-stat >>ffserver.regression |
|
||||||
) |
|
||||||
kill $FFSERVER_PID |
|
||||||
wait > /dev/null 2>&1 |
|
||||||
rm -f tests/feed1.ffm |
|
||||||
if diff -u "$1" tests/data/ffserver.regression; then |
|
||||||
echo |
|
||||||
echo Server regression test succeeded. |
|
||||||
exit 0 |
|
||||||
else |
|
||||||
echo |
|
||||||
echo Server regression test: Error. |
|
||||||
exit 1 |
|
||||||
fi |
|
@ -1,311 +0,0 @@ |
|||||||
# |
|
||||||
# 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 -flags +bitexact -fflags +bitexact -i tests/vsynth1/%02d.pgm -flags +bitexact -fflags +bitexact |
|
||||||
|
|
||||||
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> |
|
||||||
|
|
@ -1,11 +0,0 @@ |
|||||||
0c9639f09decbc54c9f091dcf1ca0e8f *ff-test_h.avi |
|
||||||
e28ba75853caf975e06d92955c9f7f73 *ff-test_l.avi |
|
||||||
a767dbdf5d1bded3450279f812f97b37 *ff-test.swf |
|
||||||
ca209a0c67afbd3bc3bcde0840f313fc *ff-test_h.asf |
|
||||||
f97a91609bfc8a1857455f17c5ec101c *ff-test_l.asf |
|
||||||
06f5a6a4c5d1c6735f4d0068e825c91f *ff-test_h.rm |
|
||||||
1f57580f02f0317407b3b82a3d5e093f *ff-test_l.rm |
|
||||||
e04e6ebf9584654df131f5eec881ac38 *ff-test.jpg |
|
||||||
f15d43e9d3630601b61a024023249bb8 *ff-test_small.jpg |
|
||||||
4735c72cde67000f12e9d1dbfbd975a7 *ff-test.mjpg |
|
||||||
fd038af80560e15271ce42651093ee43 *ff-stat |
|
Loading…
Reference in new issue