Commit 6b35a832 authored by Rostislav Pehlivanov's avatar Rostislav Pehlivanov

Remove the ffserver program

Signed-off-by: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
parent 2ca65fc7
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
/ffmpeg /ffmpeg
/ffplay /ffplay
/ffprobe /ffprobe
/ffserver
/config.asm /config.asm
/config.h /config.h
/coverage.info /coverage.info
......
...@@ -35,6 +35,7 @@ version <next>: ...@@ -35,6 +35,7 @@ version <next>:
- hilbert audio filter source - hilbert audio filter source
- aiir audio filter - aiir audio filter
- aiff: add support for CD-ROM XA ADPCM - aiff: add support for CD-ROM XA ADPCM
- Removed the ffserver program
version 3.4: version 3.4:
......
...@@ -29,9 +29,6 @@ ffplay: ...@@ -29,9 +29,6 @@ ffplay:
ffprobe: ffprobe:
ffprobe.c Stefano Sabatini ffprobe.c Stefano Sabatini
ffserver:
ffserver.c Reynaldo H. Verdejo Pinochet
Commandline utility code: Commandline utility code:
cmdutils.c, cmdutils.h Michael Niedermayer cmdutils.c, cmdutils.h Michael Niedermayer
......
...@@ -21,8 +21,6 @@ such as audio, video, subtitles and related metadata. ...@@ -21,8 +21,6 @@ such as audio, video, subtitles and related metadata.
* [ffplay](https://ffmpeg.org/ffplay.html) is a minimalistic multimedia player. * [ffplay](https://ffmpeg.org/ffplay.html) is a minimalistic multimedia player.
* [ffprobe](https://ffmpeg.org/ffprobe.html) is a simple analysis tool to inspect * [ffprobe](https://ffmpeg.org/ffprobe.html) is a simple analysis tool to inspect
multimedia content. multimedia content.
* [ffserver](https://ffmpeg.org/ffserver.html) is a multimedia streaming server
for live broadcasts.
* Additional small tools such as `aviocat`, `ismindex` and `qt-faststart`. * Additional small tools such as `aviocat`, `ismindex` and `qt-faststart`.
## Documentation ## Documentation
......
...@@ -116,7 +116,6 @@ Program options: ...@@ -116,7 +116,6 @@ Program options:
--disable-ffmpeg disable ffmpeg build --disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build --disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build --disable-ffprobe disable ffprobe build
--disable-ffserver disable ffserver build
Documentation options: Documentation options:
--disable-doc do not build documentation --disable-doc do not build documentation
...@@ -1722,7 +1721,6 @@ LICENSE_LIST=" ...@@ -1722,7 +1721,6 @@ LICENSE_LIST="
PROGRAM_LIST=" PROGRAM_LIST="
ffplay ffplay
ffprobe ffprobe
ffserver
ffmpeg ffmpeg
" "
...@@ -3358,8 +3356,6 @@ ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotat ...@@ -3358,8 +3356,6 @@ ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotat
ffplay_suggest="shell32" ffplay_suggest="shell32"
ffprobe_deps="avcodec avformat" ffprobe_deps="avcodec avformat"
ffprobe_suggest="shell32" ffprobe_suggest="shell32"
ffserver_deps="avformat fork sarestart"
ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
# documentation # documentation
podpages_deps="perl" podpages_deps="perl"
......
...@@ -26,12 +26,12 @@ bitstream level modifications without performing decoding. ...@@ -26,12 +26,12 @@ bitstream level modifications without performing decoding.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavcodec.html,libavcodec} @url{libavcodec.html,libavcodec}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavcodec(3) ffmpeg(1), ffplay(1), ffprobe(1), libavcodec(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ the libavcodec library. ...@@ -23,12 +23,12 @@ the libavcodec library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavcodec.html,libavcodec} @url{libavcodec.html,libavcodec}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavcodec(3) ffmpeg(1), ffplay(1), ffprobe(1), libavcodec(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ libavdevice library. ...@@ -23,12 +23,12 @@ libavdevice library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavdevice.html,libavdevice} @url{libavdevice.html,libavdevice}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavdevice(3) ffmpeg(1), ffplay(1), ffprobe(1), libavdevice(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ libavfilter library. ...@@ -23,12 +23,12 @@ libavfilter library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavfilter.html,libavfilter} @url{libavfilter.html,libavfilter}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavfilter(3) ffmpeg(1), ffplay(1), ffprobe(1), libavfilter(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ provided by the libavformat library. ...@@ -23,12 +23,12 @@ provided by the libavformat library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavformat.html,libavformat} @url{libavformat.html,libavformat}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavformat(3) ffmpeg(1), ffplay(1), ffprobe(1), libavformat(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ libavformat library. ...@@ -23,12 +23,12 @@ libavformat library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavformat.html,libavformat} @url{libavformat.html,libavformat}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavformat(3) ffmpeg(1), ffplay(1), ffprobe(1), libavformat(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -25,12 +25,12 @@ and convert audio format and packing layout. ...@@ -25,12 +25,12 @@ and convert audio format and packing layout.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libswresample.html,libswresample} @url{libswresample.html,libswresample}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libswresample(3) ffmpeg(1), ffplay(1), ffprobe(1), libswresample(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -24,12 +24,12 @@ image rescaling and pixel format conversion. ...@@ -24,12 +24,12 @@ image rescaling and pixel format conversion.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libswscale.html,libswscale} @url{libswscale.html,libswscale}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libswscale(3) ffmpeg(1), ffplay(1), ffprobe(1), libswscale(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -23,12 +23,12 @@ by the libavutil library. ...@@ -23,12 +23,12 @@ by the libavutil library.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{libavutil.html,libavutil} @url{libavutil.html,libavutil}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), libavutil(3) ffmpeg(1), ffplay(1), ffprobe(1), libavutil(3)
@end ifnothtml @end ifnothtml
@include authors.texi @include authors.texi
......
...@@ -1167,10 +1167,6 @@ loss). ...@@ -1167,10 +1167,6 @@ loss).
By default @command{ffmpeg} attempts to read the input(s) as fast as possible. By default @command{ffmpeg} attempts to read the input(s) as fast as possible.
This option will slow down the reading of the input(s) to the native frame rate This option will slow down the reading of the input(s) to the native frame rate
of the input(s). It is useful for real-time output (e.g. live streaming). of the input(s). It is useful for real-time output (e.g. live streaming).
@item -loop_input
Loop over the input stream. Currently it works only for image
streams. This option is used for automatic FFserver testing.
This option is deprecated, use -loop 1.
@item -loop_output @var{number_of_times} @item -loop_output @var{number_of_times}
Repeatedly loop output for formats that support looping such as animated GIF Repeatedly loop output for formats that support looping such as animated GIF
(0 will loop the output infinitely). (0 will loop the output infinitely).
...@@ -1412,16 +1408,6 @@ file or device. With low latency / high rate live streams, packets may be ...@@ -1412,16 +1408,6 @@ file or device. With low latency / high rate live streams, packets may be
discarded if they are not read in a timely manner; raising this value can discarded if they are not read in a timely manner; raising this value can
avoid it. avoid it.
@item -override_ffserver (@emph{global})
Overrides the input specifications from @command{ffserver}. Using this
option you can map any input stream to @command{ffserver} and control
many aspects of the encoding from @command{ffmpeg}. Without this
option @command{ffmpeg} will transmit to @command{ffserver} what is
requested by @command{ffserver}.
The option is intended for cases where features are needed that cannot be
specified to @command{ffserver} but can be to @command{ffmpeg}.
@item -sdp_file @var{file} (@emph{global}) @item -sdp_file @var{file} (@emph{global})
Print sdp information for an output stream to @var{file}. Print sdp information for an output stream to @var{file}.
This allows dumping sdp information when at least one output isn't an This allows dumping sdp information when at least one output isn't an
...@@ -1776,7 +1762,7 @@ ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext ...@@ -1776,7 +1762,7 @@ ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
@ifset config-not-all @ifset config-not-all
@url{ffmpeg-all.html,ffmpeg-all}, @url{ffmpeg-all.html,ffmpeg-all},
@end ifset @end ifset
@url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-utils.html,ffmpeg-utils}, @url{ffmpeg-utils.html,ffmpeg-utils},
@url{ffmpeg-scaler.html,ffmpeg-scaler}, @url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{ffmpeg-resampler.html,ffmpeg-resampler}, @url{ffmpeg-resampler.html,ffmpeg-resampler},
...@@ -1795,7 +1781,7 @@ ffmpeg(1), ...@@ -1795,7 +1781,7 @@ ffmpeg(1),
@ifset config-not-all @ifset config-not-all
ffmpeg-all(1), ffmpeg-all(1),
@end ifset @end ifset
ffplay(1), ffprobe(1), ffserver(1), ffplay(1), ffprobe(1),
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
......
...@@ -291,7 +291,7 @@ Toggle full screen. ...@@ -291,7 +291,7 @@ Toggle full screen.
@ifset config-not-all @ifset config-not-all
@url{ffplay-all.html,ffmpeg-all}, @url{ffplay-all.html,ffmpeg-all},
@end ifset @end ifset
@url{ffmpeg.html,ffmpeg}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-utils.html,ffmpeg-utils}, @url{ffmpeg-utils.html,ffmpeg-utils},
@url{ffmpeg-scaler.html,ffmpeg-scaler}, @url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{ffmpeg-resampler.html,ffmpeg-resampler}, @url{ffmpeg-resampler.html,ffmpeg-resampler},
...@@ -310,7 +310,7 @@ ffplay(1), ...@@ -310,7 +310,7 @@ ffplay(1),
@ifset config-not-all @ifset config-not-all
ffplay-all(1), ffplay-all(1),
@end ifset @end ifset
ffmpeg(1), ffprobe(1), ffserver(1), ffmpeg(1), ffprobe(1),
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
......
...@@ -653,7 +653,7 @@ DV, GXF and AVI timecodes are available in format metadata ...@@ -653,7 +653,7 @@ DV, GXF and AVI timecodes are available in format metadata
@ifset config-not-all @ifset config-not-all
@url{ffprobe-all.html,ffprobe-all}, @url{ffprobe-all.html,ffprobe-all},
@end ifset @end ifset
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay},
@url{ffmpeg-utils.html,ffmpeg-utils}, @url{ffmpeg-utils.html,ffmpeg-utils},
@url{ffmpeg-scaler.html,ffmpeg-scaler}, @url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{ffmpeg-resampler.html,ffmpeg-resampler}, @url{ffmpeg-resampler.html,ffmpeg-resampler},
...@@ -672,7 +672,7 @@ ffprobe(1), ...@@ -672,7 +672,7 @@ ffprobe(1),
@ifset config-not-all @ifset config-not-all
ffprobe-all(1), ffprobe-all(1),
@end ifset @end ifset
ffmpeg(1), ffplay(1), ffserver(1), ffmpeg(1), ffplay(1),
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
......
# 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>
This diff is collapsed.
...@@ -193,9 +193,6 @@ ffplay ...@@ -193,9 +193,6 @@ ffplay
ffprobe ffprobe
issues in or related to ffprobe.c issues in or related to ffprobe.c
ffserver
issues in or related to ffserver.c
postproc postproc
issues in libpostproc/* issues in libpostproc/*
......
...@@ -26,13 +26,13 @@ implementing robust and fast codecs as well as for experimentation. ...@@ -26,13 +26,13 @@ implementing robust and fast codecs as well as for experimentation.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-codecs.html,ffmpeg-codecs}, @url{ffmpeg-bitstream-filters.html,bitstream-filters}, @url{ffmpeg-codecs.html,ffmpeg-codecs}, @url{ffmpeg-bitstream-filters.html,bitstream-filters},
@url{libavutil.html,libavutil} @url{libavutil.html,libavutil}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-codecs(1), ffmpeg-bitstream-filters(1),
libavutil(3) libavutil(3)
@end ifnothtml @end ifnothtml
......
...@@ -23,13 +23,13 @@ VfW, DShow, and ALSA. ...@@ -23,13 +23,13 @@ VfW, DShow, and ALSA.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-devices.html,ffmpeg-devices}, @url{ffmpeg-devices.html,ffmpeg-devices},
@url{libavutil.html,libavutil}, @url{libavcodec.html,libavcodec}, @url{libavformat.html,libavformat} @url{libavutil.html,libavutil}, @url{libavcodec.html,libavcodec}, @url{libavformat.html,libavformat}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-devices(1), ffmpeg-devices(1),
libavutil(3), libavcodec(3), libavformat(3) libavutil(3), libavcodec(3), libavformat(3)
@end ifnothtml @end ifnothtml
......
...@@ -21,14 +21,14 @@ framework containing several filters, sources and sinks. ...@@ -21,14 +21,14 @@ framework containing several filters, sources and sinks.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-filters.html,ffmpeg-filters}, @url{ffmpeg-filters.html,ffmpeg-filters},
@url{libavutil.html,libavutil}, @url{libswscale.html,libswscale}, @url{libswresample.html,libswresample}, @url{libavutil.html,libavutil}, @url{libswscale.html,libswscale}, @url{libswresample.html,libswresample},
@url{libavcodec.html,libavcodec}, @url{libavformat.html,libavformat}, @url{libavdevice.html,libavdevice} @url{libavcodec.html,libavcodec}, @url{libavformat.html,libavformat}, @url{libavdevice.html,libavdevice}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-filters(1), ffmpeg-filters(1),
libavutil(3), libswscale(3), libswresample(3), libavcodec(3), libavformat(3), libavdevice(3) libavutil(3), libswscale(3), libswresample(3), libavcodec(3), libavformat(3), libavdevice(3)
@end ifnothtml @end ifnothtml
......
...@@ -26,13 +26,13 @@ resource. ...@@ -26,13 +26,13 @@ resource.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-formats.html,ffmpeg-formats}, @url{ffmpeg-protocols.html,ffmpeg-protocols}, @url{ffmpeg-formats.html,ffmpeg-formats}, @url{ffmpeg-protocols.html,ffmpeg-protocols},
@url{libavutil.html,libavutil}, @url{libavcodec.html,libavcodec} @url{libavutil.html,libavutil}, @url{libavcodec.html,libavcodec}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-formats(1), ffmpeg-protocols(1), ffmpeg-formats(1), ffmpeg-protocols(1),
libavutil(3), libavcodec(3) libavutil(3), libavcodec(3)
@end ifnothtml @end ifnothtml
......
...@@ -42,12 +42,12 @@ It should avoid useless features that almost no one needs. ...@@ -42,12 +42,12 @@ It should avoid useless features that almost no one needs.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-utils.html,ffmpeg-utils} @url{ffmpeg-utils.html,ffmpeg-utils}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-utils(1) ffmpeg-utils(1)
@end ifnothtml @end ifnothtml
......
...@@ -48,13 +48,13 @@ enabled through dedicated options. ...@@ -48,13 +48,13 @@ enabled through dedicated options.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-resampler.html,ffmpeg-resampler}, @url{ffmpeg-resampler.html,ffmpeg-resampler},
@url{libavutil.html,libavutil} @url{libavutil.html,libavutil}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-resampler(1), ffmpeg-resampler(1),
libavutil(3) libavutil(3)
@end ifnothtml @end ifnothtml
......
...@@ -41,13 +41,13 @@ colorspaces differ. ...@@ -41,13 +41,13 @@ colorspaces differ.
@chapter See Also @chapter See Also
@ifhtml @ifhtml
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver}, @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-scaler.html,ffmpeg-scaler}, @url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{libavutil.html,libavutil} @url{libavutil.html,libavutil}
@end ifhtml @end ifhtml
@ifnothtml @ifnothtml
ffmpeg(1), ffplay(1), ffprobe(1), ffserver(1), ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-scaler(1), ffmpeg-scaler(1),
libavutil(3) libavutil(3)
@end ifnothtml @end ifnothtml
......
...@@ -27,8 +27,7 @@ for examples. ...@@ -27,8 +27,7 @@ for examples.
@item @item
@url{https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/, ffmpeg-user}: @url{https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-user/, ffmpeg-user}:
For questions involving unscripted usage or compilation of the FFmpeg For questions involving unscripted usage or compilation of the FFmpeg
command-line tools (@command{ffmpeg}, @command{ffprobe}, @command{ffplay}, command-line tools (@command{ffmpeg}, @command{ffprobe}, @command{ffplay}).
@command{ffserver}).
@item @item
@url{https://lists.ffmpeg.org/mailman/listinfo/libav-user/, libav-user}: @url{https://lists.ffmpeg.org/mailman/listinfo/libav-user/, libav-user}:
......
...@@ -366,7 +366,7 @@ If set to 1 enables experimental HTTP server. This can be used to send data when ...@@ -366,7 +366,7 @@ If set to 1 enables experimental HTTP server. This can be used to send data when
used as an output option, or read data from a client with HTTP POST when used as used as an output option, or read data from a client with HTTP POST when used as
an input option. an input option.
If set to 2 enables experimental multi-client HTTP server. This is not yet implemented If set to 2 enables experimental multi-client HTTP server. This is not yet implemented
in ffmpeg.c or ffserver.c and thus must not be used as a command line option. in ffmpeg.c and thus must not be used as a command line option.
@example @example
# Server side (sending): # Server side (sending):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://@var{server}:@var{port} ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://@var{server}:@var{port}
......
AVPROGS-$(CONFIG_FFMPEG) += ffmpeg AVPROGS-$(CONFIG_FFMPEG) += ffmpeg
AVPROGS-$(CONFIG_FFPLAY) += ffplay AVPROGS-$(CONFIG_FFPLAY) += ffplay
AVPROGS-$(CONFIG_FFPROBE) += ffprobe AVPROGS-$(CONFIG_FFPROBE) += ffprobe
AVPROGS-$(CONFIG_FFSERVER) += ffserver
AVPROGS := $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF)) AVPROGS := $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF))
PROGS += $(AVPROGS) PROGS += $(AVPROGS)
AVBASENAMES = ffmpeg ffplay ffprobe ffserver AVBASENAMES = ffmpeg ffplay ffprobe
ALLAVPROGS = $(AVBASENAMES:%=%$(PROGSSUF)$(EXESUF)) ALLAVPROGS = $(AVBASENAMES:%=%$(PROGSSUF)$(EXESUF))
ALLAVPROGS_G = $(AVBASENAMES:%=%$(PROGSSUF)_g$(EXESUF)) ALLAVPROGS_G = $(AVBASENAMES:%=%$(PROGSSUF)_g$(EXESUF))
...@@ -17,7 +16,6 @@ ifndef CONFIG_VIDEOTOOLBOX ...@@ -17,7 +16,6 @@ ifndef CONFIG_VIDEOTOOLBOX
OBJS-ffmpeg-$(CONFIG_VDA) += fftools/ffmpeg_videotoolbox.o OBJS-ffmpeg-$(CONFIG_VDA) += fftools/ffmpeg_videotoolbox.o
endif endif
OBJS-ffmpeg-$(CONFIG_VIDEOTOOLBOX) += fftools/ffmpeg_videotoolbox.o OBJS-ffmpeg-$(CONFIG_VIDEOTOOLBOX) += fftools/ffmpeg_videotoolbox.o
OBJS-ffserver += fftools/ffserver_config.o
define DOFFTOOL define DOFFTOOL
OBJS-$(1) += fftools/cmdutils.o fftools/$(1).o $(OBJS-$(1)-yes) OBJS-$(1) += fftools/cmdutils.o fftools/$(1).o $(OBJS-$(1)-yes)
......
...@@ -117,7 +117,6 @@ static int file_overwrite = 0; ...@@ -117,7 +117,6 @@ static int file_overwrite = 0;
static int no_file_overwrite = 0; static int no_file_overwrite = 0;
static int do_psnr = 0; static int do_psnr = 0;
static int input_sync; static int input_sync;
static int override_ffserver = 0;
static int input_stream_potentially_available = 0; static int input_stream_potentially_available = 0;
static int ignore_unknown_streams = 0; static int ignore_unknown_streams = 0;
static int copy_unknown_streams = 0; static int copy_unknown_streams = 0;
...@@ -1997,58 +1996,6 @@ static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata) ...@@ -1997,58 +1996,6 @@ static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
return 0; return 0;
} }
static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
{
int i, err;
AVFormatContext *ic = avformat_alloc_context();
if (!ic)
return AVERROR(ENOMEM);
ic->interrupt_callback = int_cb;
err = avformat_open_input(&ic, filename, NULL, NULL);
if (err < 0)
return err;
/* copy stream format */
for(i=0;i<ic->nb_streams;i++) {
AVStream *st;
OutputStream *ost;
AVCodec *codec;
const char *enc_config;
codec = avcodec_find_encoder(ic->streams[i]->codecpar->codec_id);
if (!codec) {
av_log(s, AV_LOG_ERROR, "no encoder found for codec id %i\n", ic->streams[i]->codecpar->codec_id);
return AVERROR(EINVAL);
}
if (codec->type == AVMEDIA_TYPE_AUDIO)
opt_audio_codec(o, "c:a", codec->name);
else if (codec->type == AVMEDIA_TYPE_VIDEO)
opt_video_codec(o, "c:v", codec->name);
ost = new_output_stream(o, s, codec->type, -1);
st = ost->st;
avcodec_get_context_defaults3(st->codec, codec);
enc_config = av_stream_get_recommended_encoder_configuration(ic->streams[i]);
if (enc_config) {
AVDictionary *opts = NULL;
av_dict_parse_string(&opts, enc_config, "=", ",", 0);
av_opt_set_dict2(st->codec, &opts, AV_OPT_SEARCH_CHILDREN);
av_dict_free(&opts);
}
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && !ost->stream_copy)
choose_sample_fmt(st, codec);
else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && !ost->stream_copy)
choose_pixel_fmt(st, st->codec, codec, st->codecpar->format);
avcodec_copy_context(ost->enc_ctx, st->codec);
if (enc_config)
av_dict_parse_string(&ost->encoder_opts, enc_config, "=", ",", 0);
}
avformat_close_input(&ic);
return err;
}
static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, static void init_output_filter(OutputFilter *ofilter, OptionsContext *o,
AVFormatContext *oc) AVFormatContext *oc)
{ {
...@@ -2187,47 +2134,7 @@ static int open_output_file(OptionsContext *o, const char *filename) ...@@ -2187,47 +2134,7 @@ static int open_output_file(OptionsContext *o, const char *filename)
} }
} }
/* ffserver seeking with date=... needs a date reference */ if (!o->nb_stream_maps) {
if (!strcmp(file_oformat->name, "ffm") &&
!(format_flags & AVFMT_FLAG_BITEXACT) &&
av_strstart(filename, "http:", NULL)) {
int err = parse_option(o, "metadata", "creation_time=now", options);
if (err < 0) {
print_error(filename, err);
exit_program(1);
}
}
if (!strcmp(file_oformat->name, "ffm") && !override_ffserver &&
av_strstart(filename, "http:", NULL)) {
int j;
/* special case for files sent to ffserver: we get the stream
parameters from ffserver */
int err = read_ffserver_streams(o, oc, filename);
if (err < 0) {
print_error(filename, err);
exit_program(1);
}
for(j = nb_output_streams - oc->nb_streams; j < nb_output_streams; j++) {
ost = output_streams[j];
for (i = 0; i < nb_input_streams; i++) {
ist = input_streams[i];
if(ist->st->codecpar->codec_type == ost->st->codecpar->codec_type){
ost->sync_ist= ist;
ost->source_index= i;
if(ost->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) ost->avfilter = av_strdup("anull");
if(ost->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) ost->avfilter = av_strdup("null");
ist->discard = 0;
ist->st->discard = ist->user_set_discard;
break;
}
}
if(!ost->sync_ist){
av_log(NULL, AV_LOG_FATAL, "Missing %s stream which is required by this ffm\n", av_get_media_type_string(ost->st->codecpar->codec_type));
exit_program(1);
}
}
} else if (!o->nb_stream_maps) {
char *subtitle_codec_name = NULL; char *subtitle_codec_name = NULL;
/* pick the "best" stream of each type */ /* pick the "best" stream of each type */
...@@ -3719,8 +3626,6 @@ const OptionDef options[] = { ...@@ -3719,8 +3626,6 @@ const OptionDef options[] = {
"set the maximum demux-decode delay", "seconds" }, "set the maximum demux-decode delay", "seconds" },
{ "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) }, { "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) },
"set the initial demux-decode delay", "seconds" }, "set the initial demux-decode delay", "seconds" },
{ "override_ffserver", OPT_BOOL | OPT_EXPERT | OPT_OUTPUT, { &override_ffserver },
"override the options from ffserver", "" },
{ "sdp_file", HAS_ARG | OPT_EXPERT | OPT_OUTPUT, { .func_arg = opt_sdp_file }, { "sdp_file", HAS_ARG | OPT_EXPERT | OPT_OUTPUT, { .func_arg = opt_sdp_file },
"specify a file in which to print sdp information", "file" }, "specify a file in which to print sdp information", "file" },
......
This diff is collapsed.
This diff is collapsed.
/*
* 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 */
FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
THREADS = 1 THREADS = 1
VREF = tests/vsynth1/00.pgm VREF = tests/vsynth1/00.pgm
AREF = tests/data/asynth1.sw AREF = tests/data/asynth1.sw
...@@ -11,14 +9,6 @@ FFMPEG=ffmpeg$(PROGSSUF)$(EXESUF) ...@@ -11,14 +9,6 @@ FFMPEG=ffmpeg$(PROGSSUF)$(EXESUF)
$(AREF): CMP= $(AREF): CMP=
ffservertest: export PROGSUF = $(PROGSSUF)
ffservertest: ffserver$(PROGSSUF)$(EXESUF) ffmpeg$(PROGSSUF)$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
@echo
@echo "Unfortunately ffserver is broken and therefore its regression"
@echo "test fails randomly. Treat the results accordingly."
@echo
$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf "$(TARGET_SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)"
APITESTSDIR := tests/api APITESTSDIR := tests/api
OBJDIRS += tests/data tests/vsynth1 tests/data/filtergraphs $(APITESTSDIR)/ OBJDIRS += tests/data tests/vsynth1 tests/data/filtergraphs $(APITESTSDIR)/
......
#!/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
#
# 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>
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
...@@ -20,7 +20,7 @@ fi ...@@ -20,7 +20,7 @@ fi
case "$1" in case "$1" in
need) need)
case $2 in case $2 in
ffmpeg|ffplay|ffprobe|ffserver) ffmpeg|ffplay|ffprobe)
echo $2.c >> tools/bisect.need echo $2.c >> tools/bisect.need
;; ;;
esac esac
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment