zoukankan      html  css  js  c++  java
  • 【ffmpeg】ffserver搭建流媒体服务

    Date: 2018.11.11


    1、参考

    http://ffmpeg.org/ffserver.html

    https://blog.csdn.net/cug_heshun2013/article/details/79518632
    https://blog.csdn.net/u012868357/article/details/80240639
    https://www.cnblogs.com/liushunli/p/5303966.html

    2、实现过程

    推流:encode
    拉流: decode

    下载ffmpeg,ffsever和ffplay: http://ffbinaries.com/downloads

    ffserver.conf配置demo: http://www.ffmpeg.org/sample.html
    在这里插入图片描述

    在这里插入图片描述

    整体结构就如上图所示,
    ffmpeg进行推流,把服务器上的源媒体文件转换(编码encode)成要发送出去的流媒体文件,
    ffserver则负责响应客户端的流媒体请求,把流媒体数据发送给客户端。
    ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm和要发送的流媒体文件的格式参数做具体的设定。
    feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。

    示例如下:

    1. ffserver先启动起来,
    ffserver -f ffserver.conf
    
    1. 启动ffmpeg推流:
    ffmpeg  -i output.ts http://localhost:8090/feed1.ffm
    
    1. 可以采用ffplay作为客户端播放流媒体文件:
    ffplay http://localhost:8090/test.mpg
    

    ffserver.conf:doc/ffserver.conf

    # 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 libfaac
    #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>
    
    

    Linux平台下ffmpeg的安装:
    https://www.cnblogs.com/wanghetao/p/3386311.html
    https://blog.csdn.net/sinat_41559158/article/details/80363649


    THE END!

  • 相关阅读:
    Winform 自定义TabControl实现浏览器标签
    LeetCode Add Two Numbers
    Java基础知识复习(二)
    Java基础知识复习(一)
    0-1背包问题复习
    centos7 vmware克隆解决网络问题
    阿里云上Docker Compose部署wordpress
    不需要瞎折腾,官方文档才是终极
    centos7 nginx安装
    iptables练习题(四)
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532099.html
Copyright © 2011-2022 走看看