{
    "mode": "man",
    "parameter": "FFMPEG-PROTOCOLS",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/man/FFMPEG-PROTOCOLS/json",
    "generated": "2026-10-22T13:07:18Z",
    "sections": {
        "NAME": {
            "content": "ffmpeg-protocols - FFmpeg protocols\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "This document describes the input and output protocols provided by the libavformat library.\n",
            "subsections": []
        },
        "PROTOCOL OPTIONS": {
            "content": "The libavformat library provides some generic global options, which can be set on all the\nprotocols. In addition each protocol may support so-called private options, which are\nspecific for that component.\n\nOptions may be set by specifying -option value in the FFmpeg tools, or by setting the value\nexplicitly in the \"AVFormatContext\" options or using the libavutil/opt.h API for programmatic\nuse.\n\nThe list of supported options follows:\n\nprotocolwhitelist list (input)\nSet  a  \",\"-separated  list  of allowed protocols. \"ALL\" matches all protocols. Protocols\nprefixed by \"-\" are disabled.  All protocols are allowed by default but protocols used by\nan another protocol (nested protocols) are restricted to a per protocol subset.\n",
            "subsections": []
        },
        "PROTOCOLS": {
            "content": "Protocols are configured elements in FFmpeg that enable  access  to  resources  that  require\nspecific protocols.\n\nWhen you configure your FFmpeg build, all the supported protocols are enabled by default. You\ncan list all available ones using the configure option \"--list-protocols\".\n\nYou  can  disable  all  the  protocols  using the configure option \"--disable-protocols\", and\nselectively enable a protocol using  the  option  \"--enable-protocol=PROTOCOL\",  or  you  can\ndisable a particular protocol using the option \"--disable-protocol=PROTOCOL\".\n\nThe option \"-protocols\" of the ff* tools will display the list of supported protocols.\n\nAll protocols accept the following options:\n",
            "subsections": [
                {
                    "name": "rw_timeout",
                    "content": "Maximum time to wait for (network) read/write operations to complete, in microseconds.\n\nA description of the currently available protocols follows.\n"
                },
                {
                    "name": "amqp",
                    "content": "Advanced  Message  Queueing Protocol (AMQP) version 0-9-1 is a broker based publish-subscribe\ncommunication protocol.\n\nFFmpeg must be compiled with --enable-librabbitmq to support AMQP.  A  separate  AMQP  broker\nmust also be run. An example open-source AMQP broker is RabbitMQ.\n\nAfter starting the broker, an FFmpeg client may stream data to the broker using the command:\n\nffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]\n\nWhere  hostname  and port (default is 5672) is the address of the broker. The client may also\nset a user/password for authentication. The default for  both  fields  is  \"guest\".  Name  of\nvirtual host on broker can be set with vhost. The default value is \"/\".\n\nMuliple subscribers may stream from the broker using the command:\n\nffplay amqp://[[user]:[password]@]hostname[:port][/vhost]\n\nIn  RabbitMQ  all  data  published  to the broker flows through a specific exchange, and each\nsubscribing client has an assigned queue/buffer. When a packet arrives at an exchange, it may\nbe copied to a client's queue depending on the exchange and routingkey fields.\n\nThe following options are supported:\n"
                },
                {
                    "name": "exchange",
                    "content": "Sets the exchange to use on  the  broker.  RabbitMQ  has  several  predefined  exchanges:\n\"amq.direct\"  is  the  default  exchange,  where the publisher and subscriber must have a\nmatching routingkey; \"amq.fanout\" is the same as a broadcast operation (i.e. the data is\nforwarded to all queues on the fanout  exchange  independent  of  the  routingkey);  and\n\"amq.topic\"  is  similar  to  \"amq.direct\",  but allows for more complex pattern matching\n(refer to the RabbitMQ documentation).\n"
                },
                {
                    "name": "routing_key",
                    "content": "Sets the routing key. The default value is  \"amqp\".  The  routing  key  is  used  on  the\n\"amq.direct\" and \"amq.topic\" exchanges to decide whether packets are written to the queue\nof a subscriber.\n"
                },
                {
                    "name": "pkt_size",
                    "content": "Maximum  size  of each packet sent/received to the broker. Default is 131072.  Minimum is\n4096 and max is any large value (representable by an int). When receiving  packets,  this\nsets an internal buffer size in FFmpeg. It should be equal to or greater than the size of\nthe  published  packets  to  the  broker. Otherwise the received message may be truncated\ncausing decoding errors.\n"
                },
                {
                    "name": "connection_timeout",
                    "content": "The timeout in seconds during the initial connection to the broker. The default value  is\nrwtimeout, or 5 seconds if rwtimeout is not set.\n\ndeliverymode mode\nSets  the  delivery  mode  of  each  message  sent  to  broker.  The following values are\naccepted:\n\npersistent\nDelivery mode set to \"persistent\" (2). This is the default value.   Messages  may  be\nwritten to the broker's disk depending on its setup.\n\nnon-persistent\nDelivery  mode  set  to  \"non-persistent\" (1).  Messages will stay in broker's memory\nunless the broker is under memory pressure.\n"
                },
                {
                    "name": "async",
                    "content": "Asynchronous data filling wrapper for input stream.\n\nFill data in a background thread, to decouple I/O operation from demux thread.\n\nasync:<URL>\nasync:http://host/resource\nasync:cache:http://host/resource\n"
                },
                {
                    "name": "bluray",
                    "content": "Read BluRay playlist.\n\nThe accepted options are:\n"
                },
                {
                    "name": "angle",
                    "content": "BluRay angle\n"
                },
                {
                    "name": "chapter",
                    "content": "Start chapter (1...N)\n"
                },
                {
                    "name": "playlist",
                    "content": "Playlist to read (BDMV/PLAYLIST/?????.mpls)\n\nExamples:\n\nRead longest playlist from BluRay mounted to /mnt/bluray:\n\nbluray:/mnt/bluray\n\nRead angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2:\n\n-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray\n"
                },
                {
                    "name": "cache",
                    "content": "Caching wrapper for input stream.\n\nCache the input stream to temporary file. It brings seeking capability to live streams.\n\nThe accepted options are:\n"
                },
                {
                    "name": "read_ahead_limit",
                    "content": "Amount in bytes that may be read ahead when seeking  isn't  supported.  Range  is  -1  to\nINTMAX.  -1 for unlimited. Default is 65536.\n\nURL Syntax is\n\ncache:<URL>\n"
                },
                {
                    "name": "concat",
                    "content": "Physical concatenation protocol.\n\nRead and seek from many resources in sequence as if they were a unique resource.\n\nA URL accepted by this protocol has the syntax:\n\nconcat:<URL1>|<URL2>|...|<URLN>\n\nwhere  URL1,  URL2,  ...,  URLN  are  the  urls  of the resource to be concatenated, each one\npossibly specifying a distinct protocol.\n\nFor example to read a sequence of files split1.mpeg, split2.mpeg, split3.mpeg with ffplay use\nthe command:\n\nffplay concat:split1.mpeg\\|split2.mpeg\\|split3.mpeg\n\nNote that you may need to escape the character \"|\" which is special for many shells.\n"
                },
                {
                    "name": "concatf",
                    "content": "Physical concatenation protocol using a line break delimited list of resources.\n\nRead and seek from many resources in sequence as if they were a unique resource.\n\nA URL accepted by this protocol has the syntax:\n\nconcatf:<URL>\n\nwhere URL is the url containing a line break delimited list of resources to be  concatenated,\neach  one  possibly  specifying  a distinct protocol. Special characters must be escaped with\nbackslash or single quotes. See the \"Quoting and escaping\"  section  in  the  ffmpeg-utils(1)\nmanual.\n\nFor  example  to  read  a  sequence  of files split1.mpeg, split2.mpeg, split3.mpeg listed in\nseparate lines within a file split.txt with ffplay use the command:\n\nffplay concatf:split.txt\n\nWhere split.txt contains the lines:\n\nsplit1.mpeg\nsplit2.mpeg\nsplit3.mpeg\n"
                },
                {
                    "name": "crypto",
                    "content": "AES-encrypted stream reading protocol.\n\nThe accepted options are:\n\nkey Set the AES decryption key binary block from given hexadecimal representation.\n\niv  Set the  AES  decryption  initialization  vector  binary  block  from  given  hexadecimal\nrepresentation.\n\nAccepted URL formats:\n\ncrypto:<URL>\ncrypto+<URL>\n"
                },
                {
                    "name": "data",
                    "content": "Data in-line in the URI. See <http://en.wikipedia.org/wiki/DataURIscheme>.\n\nFor example, to convert a GIF file given inline with ffmpeg:\n\nffmpeg -i \"data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=\" smiley.png\n\nfd\nFile descriptor access protocol.\n\nThe accepted syntax is:\n\nfd: -fd <filedescriptor>\n\nIf fd is not specified, by default the stdout file descriptor will be used for writing, stdin\nfor  reading. Unlike the pipe protocol, fd protocol has seek support if it corresponding to a\nregular file. fd protocol doesn't support pass file descriptor via URL for security.\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "blocksize",
                    "content": "Set I/O operation maximum block size, in bytes. Default value is \"INTMAX\", which results\nin not limiting the requested block size.  Setting this  value  reasonably  low  improves\nuser termination request reaction time, which is valuable if data transmission is slow.\n\nfd  Set file descriptor.\n"
                },
                {
                    "name": "file",
                    "content": "File access protocol.\n\nRead from or write to a file.\n\nA file URL can have the form:\n\nfile:<filename>\n\nwhere filename is the path of the file to read.\n\nAn  URL  that  does not have a protocol prefix will be assumed to be a file URL. Depending on\nthe build, an URL that looks like a Windows path with the drive letter at the beginning  will\nalso be assumed to be a file URL (usually not the case in builds for unix-like systems).\n\nFor example to read from a file input.mpeg with ffmpeg use the command:\n\nffmpeg -i file:input.mpeg output.mpeg\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "truncate",
                    "content": "Truncate  existing files on write, if set to 1. A value of 0 prevents truncating. Default\nvalue is 1.\n"
                },
                {
                    "name": "blocksize",
                    "content": "Set I/O operation maximum block size, in bytes. Default value is \"INTMAX\", which results\nin not limiting the requested block size.  Setting this  value  reasonably  low  improves\nuser termination request reaction time, which is valuable for files on slow medium.\n"
                },
                {
                    "name": "follow",
                    "content": "If  set  to  1,  the protocol will retry reading at the end of the file, allowing reading\nfiles that still are being written. In order for this to terminate, you  either  need  to\nuse the rwtimeout option, or use the interrupt callback (for API users).\n"
                },
                {
                    "name": "seekable",
                    "content": "Controls  if  seekability  is advertised on the file. 0 means non-seekable, -1 means auto\n(seekable for normal files, non-seekable for named pipes).\n\nMany demuxers handle seekable and non-seekable  resources  differently,  overriding  this\nmight  speed  up opening certain files at the cost of losing some features (e.g. accurate\nseeking).\n"
                },
                {
                    "name": "ftp",
                    "content": "FTP (File Transfer Protocol).\n\nRead from or write to remote resources using FTP protocol.\n\nFollowing syntax is required.\n\nftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg\n\nThis protocol accepts the following options.\n"
                },
                {
                    "name": "timeout",
                    "content": "Set timeout in microseconds of socket I/O operations used by  the  underlying  low  level\noperation. By default it is set to -1, which means that the timeout is not specified.\n"
                },
                {
                    "name": "ftp-user",
                    "content": "Set  a  user  to  be used for authenticating to the FTP server. This is overridden by the\nuser in the FTP URL.\n"
                },
                {
                    "name": "ftp-password",
                    "content": "Set a password to be used for authenticating to the FTP server. This is overridden by the\npassword in the FTP URL, or by ftp-anonymous-password if no user is set.\n"
                },
                {
                    "name": "ftp-anonymous-password",
                    "content": "Password used when login as anonymous user. Typically an e-mail address should be used.\n"
                },
                {
                    "name": "ftp-write-seekable",
                    "content": "Control seekability of connection during encoding. If set to 1 the resource  is  supposed\nto be seekable, if set to 0 it is assumed not to be seekable. Default value is 0.\n\nNOTE: Protocol can be used as output, but it is recommended to not do it, unless special care\nis  taken  (tests,  customized  server  configuration  etc.). Different FTP servers behave in\ndifferent way during seek operation. ff* tools may produce incomplete content due  to  server\nlimitations.\n"
                },
                {
                    "name": "gopher",
                    "content": "Gopher protocol.\n"
                },
                {
                    "name": "gophers",
                    "content": "Gophers protocol.\n\nThe Gopher protocol with TLS encapsulation.\n"
                },
                {
                    "name": "hls",
                    "content": "Read  Apple  HTTP  Live  Streaming  compliant  segmented  stream  as  a uniform one. The M3U8\nplaylists describing the segments can be remote HTTP resources or local files, accessed using\nthe standard file protocol.  The nested protocol is declared by specifying \"+proto\" after the\nhls URI scheme name, where proto is either \"file\" or \"http\".\n\nhls+http://host/path/to/remote/resource.m3u8\nhls+file://path/to/local/resource.m3u8\n\nUsing this protocol is discouraged - the hls demuxer should work just as well (if not, please\nreport the issues) and is more complete.  To use the hls  demuxer  instead,  simply  use  the\ndirect URLs to the m3u8 files.\n"
                },
                {
                    "name": "http",
                    "content": "HTTP (Hyper Text Transfer Protocol).\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "seekable",
                    "content": "Control  seekability  of connection. If set to 1 the resource is supposed to be seekable,\nif set to 0 it is assumed not to be seekable, if set to -1 it will try to  autodetect  if\nit is seekable. Default value is -1.\n"
                },
                {
                    "name": "chunked_post",
                    "content": "If set to 1 use chunked Transfer-Encoding for posts, default is 1.\n"
                },
                {
                    "name": "content_type",
                    "content": "Set a specific content type for the POST messages or for listen mode.\n"
                },
                {
                    "name": "http_proxy",
                    "content": "set HTTP proxy to tunnel through e.g. http://example.com:1234\n"
                },
                {
                    "name": "headers",
                    "content": "Set  custom  HTTP  headers,  can  override  built in default headers. The value must be a\nstring encoding the headers.\n"
                },
                {
                    "name": "multiple_requests",
                    "content": "Use persistent connections if set to 1, default is 0.\n"
                },
                {
                    "name": "post_data",
                    "content": "Set custom HTTP post data.\n"
                },
                {
                    "name": "referer",
                    "content": "Set the Referer header. Include 'Referer: URL' header in HTTP request.\n"
                },
                {
                    "name": "user_agent",
                    "content": "Override the User-Agent  header.  If  not  specified  the  protocol  will  use  a  string\ndescribing the libavformat build. (\"Lavf/<version>\")\n"
                },
                {
                    "name": "reconnect_at_eof",
                    "content": "If set then eof is treated like an error and causes reconnection, this is useful for live\n/ endless streams.\n"
                },
                {
                    "name": "reconnect_streamed",
                    "content": "If set then even streamed/non seekable streams will be reconnected on errors.\n"
                },
                {
                    "name": "reconnect_on_network_error",
                    "content": "Reconnect automatically in case of TCP/TLS errors during connect.\n"
                },
                {
                    "name": "reconnect_on_http_error",
                    "content": "A  comma  separated  list  of  HTTP  status  codes  to reconnect on. The list can include\nspecific status codes (e.g. '503') or the strings '4xx' / '5xx'.\n"
                },
                {
                    "name": "reconnect_delay_max",
                    "content": "Sets the maximum delay in seconds after which to give up reconnecting\n"
                },
                {
                    "name": "mime_type",
                    "content": "Export the MIME type.\n"
                },
                {
                    "name": "http_version",
                    "content": "Exports the HTTP response version number. Usually \"1.0\" or \"1.1\".\n\nicy If set to 1 request ICY (SHOUTcast) metadata from the  server.  If  the  server  supports\nthis,   the   metadata   has   to   be  retrieved  by  the  application  by  reading  the\nicymetadataheaders and icymetadatapacket options.  The default is 1.\n"
                },
                {
                    "name": "icy_metadata_headers",
                    "content": "If the server supports ICY metadata, this contains the ICY-specific HTTP  reply  headers,\nseparated by newline characters.\n"
                },
                {
                    "name": "icy_metadata_packet",
                    "content": "If  the  server  supports ICY metadata, and icy was set to 1, this contains the last non-\nempty metadata packet sent by the server. It should be polled  in  regular  intervals  by\napplications interested in mid-stream metadata updates.\n"
                },
                {
                    "name": "cookies",
                    "content": "Set  the  cookies to be sent in future requests. The format of each cookie is the same as\nthe value of a Set-Cookie HTTP response field. Multiple cookies can  be  delimited  by  a\nnewline character.\n"
                },
                {
                    "name": "offset",
                    "content": "Set initial byte offset.\n"
                },
                {
                    "name": "end_offset",
                    "content": "Try to limit the request to bytes preceding this offset.\n"
                },
                {
                    "name": "method",
                    "content": "When used as a client option it sets the HTTP method for the request.\n\nWhen  used  as  a server option it sets the HTTP method that is going to be expected from\nthe client(s).  If the expected and the received HTTP method do not match the client will\nbe given a Bad Request response.  When unset the HTTP method is not checked for now. This\nwill be replaced by autodetection in the future.\n"
                },
                {
                    "name": "listen",
                    "content": "If set to 1 enables experimental HTTP server. This can be used to send data when used  as\nan output option, or read data from a client with HTTP POST when used as an input option.\nIf set to 2 enables experimental multi-client HTTP server. This is not yet implemented in\nffmpeg.c and thus must not be used as a command line option.\n\n# Server side (sending):\nffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://<server>:<port>\n\n# Client side (receiving):\nffmpeg -i http://<server>:<port> -c copy somefile.ogg\n\n# Client can also be done with wget:\nwget http://<server>:<port> -O somefile.ogg\n\n# Server side (receiving):\nffmpeg -listen 1 -i http://<server>:<port> -c copy somefile.ogg\n\n# Client side (sending):\nffmpeg -i somefile.ogg -chunkedpost 0 -c copy -f ogg http://<server>:<port>\n\n# Client can also be done with wget:\nwget --post-file=somefile.ogg http://<server>:<port>\n"
                },
                {
                    "name": "send_expect_100",
                    "content": "Send  an  Expect:  100-continue header for POST. If set to 1 it will send, if set to 0 it\nwon't, if set to -1 it will try to send if it is applicable. Default value is -1.\n"
                },
                {
                    "name": "auth_type",
                    "content": "Set HTTP authentication type. No option for Digest, since this  method  requires  getting\nnonce parameters from the server first and can't be used straight away like Basic.\n\nnone\nChoose the HTTP authentication type automatically. This is the default.\n\nbasic\nChoose the HTTP basic authentication.\n\nBasic  authentication  sends  a  Base64-encoded  string that contains a user name and\npassword for the client. Base64 is not a form of encryption and should be  considered\nthe  same as sending the user name and password in clear text (Base64 is a reversible\nencoding).  If  a  resource  needs  to  be  protected,  strongly  consider  using  an\nauthentication  scheme other than basic authentication. HTTPS/TLS should be used with\nbasic  authentication.   Without  these  additional  security   enhancements,   basic\nauthentication should not be used to protect sensitive or valuable information.\n\nHTTP Cookies\n\nSome  HTTP  requests  will be denied unless cookie values are passed in with the request. The\ncookies option allows these cookies to be specified. At the  very  least,  each  cookie  must\nspecify  a  value along with a path and domain.  HTTP requests that match both the domain and\npath will automatically include the cookie value in the HTTP Cookie  header  field.  Multiple\ncookies can be delimited by a newline.\n\nThe required syntax to play a stream specifying a cookie is:\n\nffplay -cookies \"nlqptid=nltid=tsn; path=/; domain=somedomain.com;\" http://somedomain.com/somestream.m3u8\n"
                },
                {
                    "name": "Icecast",
                    "content": "Icecast protocol (stream to Icecast servers)\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "ice_genre",
                    "content": "Set the stream genre.\n"
                },
                {
                    "name": "ice_name",
                    "content": "Set the stream name.\n"
                },
                {
                    "name": "ice_description",
                    "content": "Set the stream description.\n"
                },
                {
                    "name": "ice_url",
                    "content": "Set the stream website URL.\n"
                },
                {
                    "name": "ice_public",
                    "content": "Set if the stream should be public.  The default is 0 (not public).\n"
                },
                {
                    "name": "user_agent",
                    "content": "Override  the  User-Agent  header. If not specified a string of the form \"Lavf/<version>\"\nwill be used.\n"
                },
                {
                    "name": "password",
                    "content": "Set the Icecast mountpoint password.\n"
                },
                {
                    "name": "content_type",
                    "content": "Set the stream content type. This must be set if it is different from audio/mpeg.\n"
                },
                {
                    "name": "legacy_icecast",
                    "content": "This enables support for Icecast versions < 2.4.0, that  do  not  support  the  HTTP  PUT\nmethod but the SOURCE method.\n\ntls Establish a TLS (HTTPS) connection to Icecast.\n\nicecast://[<username>[:<password>]@]<server>:<port>/<mountpoint>\n"
                },
                {
                    "name": "ipfs",
                    "content": "InterPlanetary  File  System (IPFS) protocol support. One can access files stored on the IPFS\nnetwork through so-called gateways. These are http(s) endpoints.   This  protocol  wraps  the\nIPFS  native  protocols  (ipfs://  and  ipns://) to be sent to such a gateway. Users can (and\nshould) host their own node which means this protocol will use one's local gateway to  access\nfiles on the IPFS network.\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "gateway",
                    "content": "Defines  the gateway to use. When not set, the protocol will first try locating the local\ngateway by looking at $IPFSGATEWAY, $IPFSPATH and \"$HOME/.ipfs/\", in that order.\n\nOne can use this protocol in 2 ways. Using IPFS:\n\nffplay ipfs://<hash>\n\nOr the IPNS protocol (IPNS is mutable IPFS):\n\nffplay ipns://<hash>\n"
                },
                {
                    "name": "mmst",
                    "content": "MMS (Microsoft Media Server) protocol over TCP.\n"
                },
                {
                    "name": "mmsh",
                    "content": "MMS (Microsoft Media Server) protocol over HTTP.\n\nThe required syntax is:\n\nmmsh://<server>[:<port>][/<app>][/<playpath>]\n"
                },
                {
                    "name": "md5",
                    "content": "MD5 output protocol.\n\nComputes the MD5 hash of the data to be written, and on close writes this to  the  designated\noutput  or  stdout  if  none  is  specified. It can be used to test muxers without writing an\nactual file.\n\nSome examples follow.\n\n# Write the MD5 hash of the encoded AVI file to the file output.avi.md5.\nffmpeg -i input.flv -f avi -y md5:output.avi.md5\n\n# Write the MD5 hash of the encoded AVI file to stdout.\nffmpeg -i input.flv -f avi -y md5:\n\nNote that some formats (typically MOV) require the output protocol to be  seekable,  so  they\nwill fail with the MD5 output protocol.\n"
                },
                {
                    "name": "pipe",
                    "content": "UNIX pipe access protocol.\n\nRead and write from UNIX pipes.\n\nThe accepted syntax is:\n\npipe:[<number>]\n\nIf  fd isn't specified, number is the number corresponding to the file descriptor of the pipe\n(e.g. 0 for stdin, 1 for stdout, 2 for stderr).  If number is not specified, by  default  the\nstdout file descriptor will be used for writing, stdin for reading.\n\nFor example to read from stdin with ffmpeg:\n\ncat test.wav | ffmpeg -i pipe:0\n# ...this is the same as...\ncat test.wav | ffmpeg -i pipe:\n\nFor writing to stdout with ffmpeg:\n\nffmpeg -i test.wav -f avi pipe:1 | cat > test.avi\n# ...this is the same as...\nffmpeg -i test.wav -f avi pipe: | cat > test.avi\n\nThis protocol accepts the following options:\n"
                },
                {
                    "name": "blocksize",
                    "content": "Set I/O operation maximum block size, in bytes. Default value is \"INTMAX\", which results\nin  not  limiting  the  requested block size.  Setting this value reasonably low improves\nuser termination request reaction time, which is valuable if data transmission is slow.\n\nfd  Set file descriptor.\n\nNote that some formats (typically MOV), require the output protocol to be seekable,  so  they\nwill fail with the pipe output protocol.\n"
                },
                {
                    "name": "prompeg",
                    "content": "Pro-MPEG Code of Practice #3 Release 2 FEC protocol.\n\nThe  Pro-MPEG  CoP#3  FEC  is a 2D parity-check forward error correction mechanism for MPEG-2\nTransport Streams sent over RTP.\n\nThis protocol must be used in conjunction with the \"rtpmpegts\" muxer and the \"rtp\" protocol.\n\nThe required syntax is:\n\n-f rtpmpegts -fec prompeg=<option>=<val>... rtp://<hostname>:<port>\n\nThe destination UDP ports are \"port + 2\" for the column FEC stream and \"port + 4\" for the row\nFEC stream.\n\nThis protocol accepts the following options:\n\nl=n The number of columns (4-20, LxD <= 100)\n\nd=n The number of rows (4-20, LxD <= 100)\n\nExample usage:\n\n-f rtpmpegts -fec prompeg=l=8:d=4 rtp://<hostname>:<port>\n"
                },
                {
                    "name": "rist",
                    "content": "Reliable Internet Streaming Transport protocol\n\nThe accepted options are:\n"
                },
                {
                    "name": "rist_profile",
                    "content": "Supported values:\n\nsimple\nmain\nThis one is default.\n\nadvanced"
                },
                {
                    "name": "buffer_size",
                    "content": "Set internal RIST buffer size in milliseconds for retransmission of data.  Default  value\nis 0 which means the librist default (1 sec). Maximum value is 30 seconds.\n"
                },
                {
                    "name": "fifo_size",
                    "content": "Size of the librist receiver output fifo in number of packets. This must be a power of 2.\nDefaults to 8192 (vs the librist default of 1024).\n\noverrunnonfatal=1|0\nSurvive in case of librist fifo buffer overrun. Default value is 0.\n"
                },
                {
                    "name": "pkt_size",
                    "content": "Set maximum packet size for sending data. 1316 by default.\n"
                },
                {
                    "name": "log_level",
                    "content": "Set  loglevel for RIST logging messages. You only need to set this if you explicitly want\nto enable debug level messages or packet loss simulation, otherwise the regular  loglevel\nis respected.\n"
                },
                {
                    "name": "secret",
                    "content": "Set override of encryption secret, by default is unset.\n"
                },
                {
                    "name": "encryption",
                    "content": "Set encryption type, by default is disabled.  Acceptable values are 128 and 256.\n"
                },
                {
                    "name": "rtmp",
                    "content": "Real-Time Messaging Protocol.\n\nThe  Real-Time  Messaging  Protocol  (RTMP) is used for streaming multimedia content across a\nTCP/IP network.\n\nThe required syntax is:\n\nrtmp://[<username>:<password>@]<server>[:<port>][/<app>][/<instance>][/<playpath>]\n\nThe accepted parameters are:\n"
                },
                {
                    "name": "username",
                    "content": "An optional username (mostly for publishing).\n"
                },
                {
                    "name": "password",
                    "content": "An optional password (mostly for publishing).\n"
                },
                {
                    "name": "server",
                    "content": "The address of the RTMP server.\n"
                },
                {
                    "name": "port",
                    "content": "The number of the TCP port to use (by default is 1935).\n\napp It is the name of the application to access. It usually corresponds to the path where the\napplication is installed on the RTMP server (e.g. /ondemand/,  /flash/live/,  etc.).  You\ncan override the value parsed from the URI through the \"rtmpapp\" option, too.\n"
                },
                {
                    "name": "playpath",
                    "content": "It  is  the  path  or  name  of  the  resource  to play with reference to the application\nspecified in app, may be prefixed by \"mp4:\". You can override the value parsed  from  the\nURI through the \"rtmpplaypath\" option, too.\n"
                },
                {
                    "name": "listen",
                    "content": "Act as a server, listening for an incoming connection.\n"
                },
                {
                    "name": "timeout",
                    "content": "Maximum time to wait for the incoming connection. Implies listen.\n\nAdditionally,  the  following  parameters can be set via command line options (or in code via\n\"AVOption\"s):\n"
                },
                {
                    "name": "rtmp_app",
                    "content": "Name of application to connect on the RTMP server. This option  overrides  the  parameter\nspecified in the URI.\n"
                },
                {
                    "name": "rtmp_buffer",
                    "content": "Set the client buffer time in milliseconds. The default is 3000.\n"
                },
                {
                    "name": "rtmp_conn",
                    "content": "Extra  arbitrary AMF connection parameters, parsed from a string, e.g. like \"B:1 S:authMe\nO:1 NN:code:1.23 NS:flag:ok O:0\".  Each value is prefixed by a single character  denoting\nthe  type,  B  for  Boolean,  N  for  number,  S for string, O for object, or Z for null,\nfollowed by a colon. For Booleans the data must be either 0  or  1  for  FALSE  or  TRUE,\nrespectively.   Likewise  for  Objects the data must be 0 or 1 to end or begin an object,\nrespectively. Data items in subobjects may be named, by prefixing the type with  'N'  and\nspecifying  the  name  before  the  value  (i.e.  \"NB:myFlag:1\"). This option may be used\nmultiple times to construct arbitrary AMF sequences.\n"
                },
                {
                    "name": "rtmp_enhanced_codecs",
                    "content": "Specify the list of codecs the client advertises to support in an enhanced  RTMP  stream.\nThis   option   should  be  set  to  a  comma  separated  list  of  fourcc  values,  like\n\"hvc1,av01,vp09\" for multiple codecs or \"hvc1\" for only one  codec.  The  specified  list\nwill be presented in the \"fourCcLive\" property of the Connect Command Message.\n"
                },
                {
                    "name": "rtmp_flashver",
                    "content": "Version  of  the  Flash  plugin used to run the SWF player. The default is LNX 9,0,124,2.\n(When publishing, the default is FMLE/3.0 (compatible; <libavformat version>).)\n"
                },
                {
                    "name": "rtmp_flush_interval",
                    "content": "Number of packets flushed in the same request (RTMPT only). The default is 10.\n"
                },
                {
                    "name": "rtmp_live",
                    "content": "Specify that the media is a live stream. No  resuming  or  seeking  in  live  streams  is\npossible.  The default value is \"any\", which means the subscriber first tries to play the\nlive stream specified in the playpath. If a live stream of that name  is  not  found,  it\nplays the recorded stream. The other possible values are \"live\" and \"recorded\".\n"
                },
                {
                    "name": "rtmp_pageurl",
                    "content": "URL of the web page in which the media was embedded. By default no value will be sent.\n"
                },
                {
                    "name": "rtmp_playpath",
                    "content": "Stream identifier to play or to publish. This option overrides the parameter specified in\nthe URI.\n"
                },
                {
                    "name": "rtmp_subscribe",
                    "content": "Name  of  live stream to subscribe to. By default no value will be sent.  It is only sent\nif the option is specified or if rtmplive is set to live.\n"
                },
                {
                    "name": "rtmp_swfhash",
                    "content": "SHA256 hash of the decompressed SWF file (32 bytes).\n"
                },
                {
                    "name": "rtmp_swfsize",
                    "content": "Size of the decompressed SWF file, required for SWFVerification.\n"
                },
                {
                    "name": "rtmp_swfurl",
                    "content": "URL of the SWF player for the media. By default no value will be sent.\n"
                },
                {
                    "name": "rtmp_swfverify",
                    "content": "URL to player swf file, compute hash/size automatically.\n"
                },
                {
                    "name": "rtmp_tcurl",
                    "content": "URL of the target stream. Defaults to proto://host[:port]/app.\n\ntcpnodelay=1|0\nSet TCPNODELAY to disable Nagle's algorithm. Default value is 0.\n\nRemark: Writing to the socket is currently not optimized to  minimize  system  calls  and\nreduces the efficiency / effect of TCPNODELAY.\n\nFor  example  to  read  with ffplay a multimedia resource named \"sample\" from the application\n\"vod\" from an RTMP server \"myserver\":\n\nffplay rtmp://myserver/vod/sample\n\nTo publish to a password protected server, passing the playpath and app names separately:\n\nffmpeg -re -i <input> -f flv -rtmpplaypath some/long/path -rtmpapp long/app/name rtmp://username:password@myserver/\n"
                },
                {
                    "name": "rtmpe",
                    "content": "Encrypted Real-Time Messaging Protocol.\n\nThe Encrypted Real-Time Messaging Protocol (RTMPE) is used for streaming  multimedia  content\nwithin  standard  cryptographic  primitives,  consisting  of  Diffie-Hellman key exchange and\nHMACSHA256, generating a pair of RC4 keys.\n"
                },
                {
                    "name": "rtmps",
                    "content": "Real-Time Messaging Protocol over a secure SSL connection.\n\nThe Real-Time Messaging Protocol (RTMPS) is used for streaming multimedia content  across  an\nencrypted connection.\n"
                },
                {
                    "name": "rtmpt",
                    "content": "Real-Time Messaging Protocol tunneled through HTTP.\n\nThe  Real-Time  Messaging  Protocol  tunneled  through  HTTP  (RTMPT)  is  used for streaming\nmultimedia content within HTTP requests to traverse firewalls.\n"
                },
                {
                    "name": "rtmpte",
                    "content": "Encrypted Real-Time Messaging Protocol tunneled through HTTP.\n\nThe Encrypted Real-Time Messaging  Protocol  tunneled  through  HTTP  (RTMPTE)  is  used  for\nstreaming multimedia content within HTTP requests to traverse firewalls.\n"
                },
                {
                    "name": "rtmpts",
                    "content": "Real-Time Messaging Protocol tunneled through HTTPS.\n\nThe  Real-Time  Messaging  Protocol  tunneled  through  HTTPS  (RTMPTS) is used for streaming\nmultimedia content within HTTPS requests to traverse firewalls.\n"
                },
                {
                    "name": "libsmbclient",
                    "content": "libsmbclient permits one to manipulate CIFS/SMB network resources.\n\nFollowing syntax is required.\n\nsmb://[[domain:]user[:password@]]server[/share[/path[/file]]]\n\nThis protocol accepts the following options.\n"
                },
                {
                    "name": "timeout",
                    "content": "Set timeout in milliseconds of socket I/O operations used by  the  underlying  low  level\noperation. By default it is set to -1, which means that the timeout is not specified.\n"
                },
                {
                    "name": "truncate",
                    "content": "Truncate  existing files on write, if set to 1. A value of 0 prevents truncating. Default\nvalue is 1.\n"
                },
                {
                    "name": "workgroup",
                    "content": "Set the workgroup used for making connections. By default workgroup is not specified.\n\nFor more information see: <http://www.samba.org/>.\n"
                },
                {
                    "name": "libssh",
                    "content": "Secure File Transfer Protocol via libssh\n\nRead from or write to remote resources using SFTP protocol.\n\nFollowing syntax is required.\n\nsftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg\n\nThis protocol accepts the following options.\n"
                },
                {
                    "name": "timeout",
                    "content": "Set timeout of socket I/O operations used by  the  underlying  low  level  operation.  By\ndefault it is set to -1, which means that the timeout is not specified.\n"
                },
                {
                    "name": "truncate",
                    "content": "Truncate  existing files on write, if set to 1. A value of 0 prevents truncating. Default\nvalue is 1.\n"
                },
                {
                    "name": "private_key",
                    "content": "Specify the path of the file containing private key  to  use  during  authorization.   By\ndefault libssh searches for keys in the ~/.ssh/ directory.\n\nExample: Play a file stored on remote server.\n\nffplay sftp://user:password@serveraddress:22/home/user/resource.mpeg\n"
                },
                {
                    "name": "librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte",
                    "content": "Real-Time Messaging Protocol and its variants supported through librtmp.\n\nRequires  the  presence  of the librtmp headers and library during configuration. You need to\nexplicitly configure the build with \"--enable-librtmp\". If  enabled  this  will  replace  the\nnative RTMP protocol.\n\nThis  protocol  provides  most  client functions and a few server functions needed to support\nRTMP, RTMP tunneled in HTTP (RTMPT), encrypted RTMP (RTMPE), RTMP over  SSL/TLS  (RTMPS)  and\ntunneled variants of these encrypted types (RTMPTE, RTMPTS).\n\nThe required syntax is:\n\n<rtmpproto>://<server>[:<port>][/<app>][/<playpath>] <options>\n\nwhere  rtmpproto is one of the strings \"rtmp\", \"rtmpt\", \"rtmpe\", \"rtmps\", \"rtmpte\", \"rtmpts\"\ncorresponding to each RTMP variant, and server, port, app and playpath have the same  meaning\nas  specified  for  the  RTMP  native  protocol.   options contains a list of space-separated\noptions of the form key=val.\n\nSee the librtmp manual page (man 3 librtmp) for more information.\n\nFor example, to stream a file in real-time to an RTMP server using ffmpeg:\n\nffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream\n\nTo play the same stream using ffplay:\n\nffplay \"rtmp://myserver/live/mystream live=1\"\n"
                },
                {
                    "name": "rtp",
                    "content": "Real-time Transport Protocol.\n\nThe required syntax for an RTP URL is: rtp://hostname[:port][?option=val...]\n\nport specifies the RTP port to use.\n\nThe following URL options are supported:\n\nttl=n\nSet the TTL (Time-To-Live) value (for multicast only).\n\nrtcpport=n\nSet the remote RTCP port to n.\n\nlocalrtpport=n\nSet the local RTP port to n.\n\nlocalrtcpport=n'\nSet the local RTCP port to n.\n\npktsize=n\nSet max packet size (in bytes) to n.\n\nbuffersize=size\nSet the maximum UDP socket buffer size in bytes.\n"
                },
                {
                    "name": "connect=0|1",
                    "content": "Do a connect() on the UDP socket (if set to 1) or not (if set to 0).\n\nsources=ip[,ip]\nList allowed source IP addresses.\n\nblock=ip[,ip]\nList disallowed (blocked) source IP addresses.\n"
                },
                {
                    "name": "write_to_source=0|1",
                    "content": "Send packets to the source address of the latest received packet (if set to 1)  or  to  a\ndefault remote address (if set to 0).\n\nlocalport=n\nSet the local RTP port to n.\n\nlocaladdr=addr\nLocal  IP  address  of  a network interface used for sending packets or joining multicast\ngroups.\n\ntimeout=n\nSet timeout (in microseconds) of socket I/O operations to n.\n\nThis is a deprecated option. Instead, localrtpport should be used.\n\nImportant notes:\n\n1.  If rtcpport is not set the RTCP port will be set to the RTP port value plus 1.\n\n2.  If localrtpport (the local RTP port) is not set any available port will be used  for  the\nlocal RTP and RTCP ports.\n\n3.  If  localrtcpport  (the  local RTCP port) is not set it will be set to the local RTP port\nvalue plus 1.\n"
                },
                {
                    "name": "rtsp",
                    "content": "Real-Time Streaming Protocol.\n\nRTSP is not technically a protocol handler in libavformat, it is a  demuxer  and  muxer.  The\ndemuxer supports both normal RTSP (with data transferred over RTP; this is used by e.g. Apple\nand Microsoft) and Real-RTSP (with data transferred over RDT).\n\nThe  muxer  can  be  used  to  send  a  stream  using RTSP ANNOUNCE to a server supporting it\n(currently      Darwin      Streaming       Server       and       Mischa       Spiegelmock's\n<https://github.com/revmischa/rtsp-server>).\n\nThe required syntax for a RTSP url is:\n\nrtsp://<hostname>[:<port>]/<path>\n\nOptions  can  be  set on the ffmpeg/ffplay command line, or set in code via \"AVOption\"s or in\n\"avformatopeninput\".\n\nMuxer\n\nThe following options are supported.\n"
                },
                {
                    "name": "rtsp_transport",
                    "content": "Set RTSP transport protocols.\n\nIt accepts the following values:\n\nudp Use UDP as lower transport protocol.\n\ntcp Use TCP (interleaving within the RTSP control channel) as lower transport protocol.\n\nDefault value is 0.\n"
                },
                {
                    "name": "rtsp_flags",
                    "content": "Set RTSP flags.\n\nThe following values are accepted:\n\nlatm\nUse MP4A-LATM packetization instead of MPEG4-GENERIC for AAC.\n\nrfc2190\nUse RFC 2190 packetization instead of RFC 4629 for H.263.\n\nskiprtcp\nDon't send RTCP sender reports.\n\nh264mode0\nUse mode 0 for H.264 in RTP.\n\nsendbye\nSend RTCP BYE packets when finishing.\n\nDefault value is 0.\n"
                },
                {
                    "name": "min_port",
                    "content": "Set minimum local UDP port. Default value is 5000.\n"
                },
                {
                    "name": "max_port",
                    "content": "Set maximum local UDP port. Default value is 65000.\n"
                },
                {
                    "name": "buffer_size",
                    "content": "Set the maximum socket buffer size in bytes.\n"
                },
                {
                    "name": "pkt_size",
                    "content": "Set max send packet size (in bytes). Default value is 1472.\n\nDemuxer\n\nThe following options are supported.\n"
                },
                {
                    "name": "initial_pause",
                    "content": "Do not start playing the stream immediately if set to 1. Default value is 0.\n"
                },
                {
                    "name": "rtsp_transport",
                    "content": "Set RTSP transport protocols.\n\nIt accepts the following values:\n\nudp Use UDP as lower transport protocol.\n\ntcp Use TCP (interleaving within the RTSP control channel) as lower transport protocol.\n\nudpmulticast\nUse UDP multicast as lower transport protocol.\n\nhttp\nUse HTTP tunneling as lower transport protocol, which is useful for passing proxies.\n\nhttps\nUse HTTPs tunneling as lower transport protocol, which is useful for passing  proxies\nand widely used for security consideration.\n\nMultiple lower transport protocols may be specified, in that case they are tried one at a\ntime (if the setup of one fails, the next one is tried).  For the muxer, only the tcp and\nudp options are supported.\n"
                },
                {
                    "name": "rtsp_flags",
                    "content": "Set RTSP flags.\n\nThe following values are accepted:\n\nfiltersrc\nAccept packets only from negotiated peer address and port.\n\nlisten\nAct as a server, listening for an incoming connection.\n\nprefertcp\nTry TCP for RTP transport first, if TCP is available as RTSP RTP transport.\n\nsatipraw\nExport raw MPEG-TS stream instead of demuxing. The flag will simply write out the raw\nstream, with the original PAT/PMT/PIDs intact.\n\nDefault value is none.\n"
                },
                {
                    "name": "allowed_media_types",
                    "content": "Set media types to accept from the server.\n\nThe following flags are accepted:\n\nvideo\naudio\ndata\nsubtitle\n\nBy default it accepts all media types.\n"
                },
                {
                    "name": "min_port",
                    "content": "Set minimum local UDP port. Default value is 5000.\n"
                },
                {
                    "name": "max_port",
                    "content": "Set maximum local UDP port. Default value is 65000.\n"
                },
                {
                    "name": "listen_timeout",
                    "content": "Set   maximum   timeout   (in  seconds)  to  establish  an  initial  connection.  Setting\nlistentimeout > 0 sets rtspflags to listen. Default  is  -1  which  means  an  infinite\ntimeout when listen mode is set.\n"
                },
                {
                    "name": "reorder_queue_size",
                    "content": "Set number of packets to buffer for handling of reordered packets.\n"
                },
                {
                    "name": "timeout",
                    "content": "Set socket TCP I/O timeout in microseconds.\n"
                },
                {
                    "name": "user_agent",
                    "content": "Override  User-Agent  header. If not specified, it defaults to the libavformat identifier\nstring.\n"
                },
                {
                    "name": "buffer_size",
                    "content": "Set the maximum socket buffer size in bytes.\n\nWhen receiving data over UDP, the demuxer tries to reorder received packets (since  they  may\narrive  out  of  order, or packets may get lost totally). This can be disabled by setting the\nmaximum demuxing delay to zero (via the \"maxdelay\" field of AVFormatContext).\n\nWhen watching multi-bitrate Real-RTSP streams with ffplay, the  streams  to  display  can  be\nchosen  with  \"-vst\"  n and \"-ast\" n for video and audio respectively, and can be switched on\nthe fly by pressing \"v\" and \"a\".\n\nExamples\n\nThe following examples all make use of the ffplay and ffmpeg tools.\n\n•   Watch a stream over UDP, with a max reordering delay of 0.5 seconds:\n\nffplay -maxdelay 500000 -rtsptransport udp rtsp://server/video.mp4\n\n•   Watch a stream tunneled over HTTP:\n\nffplay -rtsptransport http rtsp://server/video.mp4\n\n•   Send a stream in realtime to a RTSP server, for others to watch:\n\nffmpeg -re -i <input> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp\n\n•   Receive a stream in realtime:\n\nffmpeg -rtspflags listen -i rtsp://ownaddress/live.sdp <output>\n"
                },
                {
                    "name": "sap",
                    "content": "Session Announcement Protocol (RFC 2974). This is  not  technically  a  protocol  handler  in\nlibavformat,  it  is  a  muxer  and  demuxer.   It  is used for signalling of RTP streams, by\nannouncing the SDP for the streams regularly on a separate port.\n\nMuxer\n\nThe syntax for a SAP url given to the muxer is:\n\nsap://<destination>[:<port>][?<options>]\n\nThe RTP packets are sent to destination on  port  port,  or  to  port  5004  if  no  port  is\nspecified.  options is a \"&\"-separated list. The following options are supported:\n\nannounceaddr=address\nSpecify  the  destination  IP  address for sending the announcements to.  If omitted, the\nannouncements  are  sent  to  the  commonly  used  SAP  announcement  multicast   address\n224.2.127.254 (sap.mcast.net), or ff0e::2:7ffe if destination is an IPv6 address.\n\nannounceport=port\nSpecify the port to send the announcements on, defaults to 9875 if not specified.\n\nttl=ttl\nSpecify the time to live value for the announcements and RTP packets, defaults to 255.\n\nsameport=0|1\nIf  set  to  1,  send  all  RTP streams on the same port pair. If zero (the default), all\nstreams are sent on unique ports, with each stream on a port 2 numbers  higher  than  the\nprevious.   VLC/Live555  requires  this to be set to 1, to be able to receive the stream.\nThe RTP stack in libavformat for receiving requires all streams  to  be  sent  on  unique\nports.\n\nExample command lines follow.\n\nTo broadcast a stream on the local subnet, for watching in VLC:\n\nffmpeg -re -i <input> -f sap sap://224.0.0.255?sameport=1\n\nSimilarly, for watching in ffplay:\n\nffmpeg -re -i <input> -f sap sap://224.0.0.255\n\nAnd for watching in ffplay, over IPv6:\n\nffmpeg -re -i <input> -f sap sap://[ff0e::1:2:3:4]\n\nDemuxer\n\nThe syntax for a SAP url given to the demuxer is:\n\nsap://[<address>][:<port>]\n\naddress  is  the  multicast  address  to listen for announcements on, if omitted, the default\n224.2.127.254 (sap.mcast.net) is used. port is the port that is listened on, 9875 if omitted.\n\nThe demuxers listens for announcements on the given address and port.  Once  an  announcement\nis received, it tries to receive that particular stream.\n\nExample command lines follow.\n\nTo play back the first stream announced on the normal SAP multicast address:\n\nffplay sap://\n\nTo play back the first stream announced on one the default IPv6 SAP multicast address:\n\nffplay sap://[ff0e::2:7ffe]\n"
                },
                {
                    "name": "sctp",
                    "content": "Stream Control Transmission Protocol.\n\nThe accepted URL syntax is:\n\nsctp://<host>:<port>[?<options>]\n\nThe protocol accepts the following options:\n"
                },
                {
                    "name": "listen",
                    "content": "If  set  to  any value, listen for an incoming connection. Outgoing connection is done by\ndefault.\n"
                },
                {
                    "name": "max_streams",
                    "content": "Set the maximum number of streams. By default no limit is set.\n"
                },
                {
                    "name": "srt",
                    "content": "Haivision Secure Reliable Transport Protocol via libsrt.\n\nThe supported syntax for a SRT URL is:\n\nsrt://<hostname>:<port>[?<options>]\n\noptions contains a list of &-separated options of the form key=val.\n\nor\n\n<options> srt://<hostname>:<port>\n\noptions contains a list of '-key val' options.\n\nThis protocol accepts the following options.\n\nconnecttimeout=milliseconds\nConnection timeout; SRT cannot connect for RTT > 1500 msec (2 handshake  exchanges)  with\nthe  default  connect  timeout  of  3  seconds.  This  option  applies  to the caller and\nrendezvous connection modes. The connect timeout is  10  times  the  value  set  for  the\nrendezvous  mode  (which  can  be  used  as a workaround for this connection problem with\nearlier versions).\n\nffs=bytes\nFlight Flag Size (Window Size), in bytes. FFS is actually an internal parameter  and  you\nshould  set it to not less than recvbuffersize and mss. The default value is relatively\nlarge, therefore unless you set a very large receiver buffer, you do not need  to  change\nthis option. Default value is 25600.\n\ninputbw=bytes/seconds\nSender  nominal  input rate, in bytes per seconds. Used along with oheadbw, when maxbw is\nset to relative (0), to calculate maximum sending rate when  recovery  packets  are  sent\nalong  with  the main media stream: inputbw * (100 + oheadbw) / 100 if inputbw is not set\nwhile maxbw is set to relative (0),  the  actual  input  rate  is  evaluated  inside  the\nlibrary. Default value is 0.\n\niptos=tos\nIP Type of Service. Applies to sender only. Default value is 0xB8.\n\nipttl=ttl\nIP Time To Live. Applies to sender only. Default value is 64.\n\nlatency=microseconds\nTimestamp-based   Packet  Delivery  Delay.   Used  to  absorb  bursts  of  missed  packet\nretransmissions.  This flag sets both rcvlatency and peerlatency to the same value.  Note\nthat  prior  to  version  1.3.0 this is the only flag to set the latency, however this is\neffectively equivalent to setting peerlatency, when side is sender  and  rcvlatency  when\nside is receiver, and the bidirectional stream sending is not supported.\n\nlistentimeout=microseconds\nSet socket listen timeout.\n\nmaxbw=bytes/seconds\nMaximum  sending bandwidth, in bytes per seconds.  -1 infinite (CSRTCC limit is 30mbps) 0\nrelative to input rate  (see  inputbw)  >0  absolute  limit  value  Default  value  is  0\n(relative)\n\nmode=caller|listener|rendezvous\nConnection  mode.   caller opens client connection.  listener starts server to listen for\nincoming connections.  rendezvous use Rendez-Vous  connection  mode.   Default  value  is\ncaller.\n\nmss=bytes\nMaximum  Segment  Size, in bytes. Used for buffer allocation and rate calculation using a\npacket counter assuming fully filled packets. The smallest MSS between the peers is used.\nThis is 1500 by default in the overall internet.  This is the maximum  size  of  the  UDP\npacket  and  can  be  only  decreased,  unless  you  have  some unusual dedicated network\nsettings. Default value is 1500.\n\nnakreport=1|0\nIf set to 1, Receiver will send `UMSGLOSSREPORT`  messages  periodically  until  a  lost\npacket is retransmitted or intentionally dropped. Default value is 1.\n\noheadbw=percents\nRecovery bandwidth overhead above input rate, in percents.  See inputbw. Default value is\n25%.\n\npassphrase=string\nHaiCrypt  Encryption/Decryption  Passphrase  string, length from 10 to 79 characters. The\npassphrase is the shared secret between the sender  and  the  receiver.  It  is  used  to\ngenerate the Key Encrypting Key using PBKDF2 (Password-Based Key Derivation Function). It\nis  used  only  if  pbkeylen is non-zero. It is used on the receiver only if the received\ndata is encrypted.  The configured passphrase cannot be recovered (write-only).\n\nenforcedencryption=1|0\nIf true, both connection parties must have the same password set (including  empty,  that\nis,  with  no encryption). If the password doesn't match or only one side is unencrypted,\nthe connection is rejected. Default is true.\n\nkmrefreshrate=packets\nThe number of packets to be transmitted after which the encryption key is switched  to  a\nnew  key.  Default  is  -1.  -1 means auto (0x1000000 in srt library). The range for this\noption is integers in the 0 - \"INTMAX\".\n\nkmpreannounce=packets\nThe interval between when a new encryption key is sent and when switchover  occurs.  This\nvalue also applies to the subsequent interval between when switchover occurs and when the\nold  encryption  key  is  decommissioned.  Default  is  -1.  -1 means auto (0x1000 in srt\nlibrary). The range for this option is integers in the 0 - \"INTMAX\".\n\nsnddropdelay=microseconds\nThe sender's extra delay before dropping packets. This delay is added to the default drop\ndelay time interval value.\n\nSpecial value -1: Do not drop packets on the sender at all.\n\npayloadsize=bytes\nSets the maximum declared size of a packet transferred during  the  single  call  to  the\nsending  function  in Live mode. Use 0 if this value isn't used (which is default in file\nmode).  Default is -1 (automatic), which typically means MPEG-TS; if you are going to use\nSRT to send any different kind of payload, such as, for example, wrapping a  live  stream\nin  very  small  frames, then you can use a bigger maximum frame size, though not greater\nthan 1456 bytes.\n\npktsize=bytes\nAlias for payloadsize.\n\npeerlatency=microseconds\nThe latency value (as described in rcvlatency) that is  set  by  the  sender  side  as  a\nminimum value for the receiver.\n\npbkeylen=bytes\nSender  encryption  key  length,  in bytes.  Only can be set to 0, 16, 24 and 32.  Enable\nsender encryption if not 0.  Not required on receiver (set to 0), key size obtained  from\nsender in HaiCrypt handshake.  Default value is 0.\n\nrcvlatency=microseconds\nThe time that should elapse since the moment when the packet was sent and the moment when\nit's  delivered  to the receiver application in the receiving function.  This time should\nbe a buffer time large enough to cover the time spent for sending, unexpectedly  extended\nRTT  time,  and  the time needed to retransmit the lost UDP packet. The effective latency\nvalue will be the maximum of this options' value and the value of peerlatency set by  the\npeer side. Before version 1.3.0 this option is only available as latency.\n\nrecvbuffersize=bytes\nSet UDP receive buffer size, expressed in bytes.\n\nsendbuffersize=bytes\nSet UDP send buffer size, expressed in bytes.\n\ntimeout=microseconds\nSet  raise  error  timeouts  for  read,  write  and connect operations. Note that the SRT\nlibrary has internal timeouts which can be controlled separately, the value set  here  is\nonly a cap on those.\n\ntlpktdrop=1|0\nToo-late  Packet  Drop.  When enabled on receiver, it skips missing packets that have not\nbeen delivered in time and delivers the following packets to the application  when  their\ntime-to-play has come. It also sends a fake ACK to the sender. When enabled on sender and\nenabled  on the receiving peer, the sender drops the older packets that have no chance of\nbeing delivered in time. It was automatically enabled  in  the  sender  if  the  receiver\nsupports it.\n\nsndbuf=bytes\nSet send buffer size, expressed in bytes.\n\nrcvbuf=bytes\nSet receive buffer size, expressed in bytes.\n\nReceive buffer must not be greater than ffs.\n\nlossmaxttl=packets\nThe value up to which the Reorder Tolerance may grow. When Reorder Tolerance is > 0, then\npacket  loss  report  is  delayed until that number of packets come in. Reorder Tolerance\nincreases every time a \"belated\" packet has come, but it  wasn't  due  to  retransmission\n(that  is,  when  UDP packets tend to come out of order), with the difference between the\nlatest sequence and this packet's sequence, and not more than the value of  this  option.\nBy  default it's 0, which means that this mechanism is turned off, and the loss report is\nalways sent immediately upon experiencing a \"gap\" in sequences.\n"
                },
                {
                    "name": "minversion",
                    "content": "The minimum SRT version that is required from the peer. A connection to a peer that  does\nnot satisfy the minimum version requirement will be rejected.\n\nThe version format in hex is 0xXXYYZZ for x.y.z in human readable form.\n\nstreamid=string\nA  string  limited  to  512 characters that can be set on the socket prior to connecting.\nThis stream ID will be able to be retrieved by the listener side from the socket that  is\nreturned  from srtaccept and was connected by a socket with that set stream ID. SRT does\nnot enforce any special interpretation of the  contents  of  this  string.   This  option\ndoesn’t  make  sense  in  Rendezvous connection; the result might be that simply one side\nwill override the value from the other side and it’s the matter of luck which  one  would\nwin\n\nsrtstreamid=string\nAlias for streamid to avoid conflict with ffmpeg command line option.\n\nsmoother=live|file\nThe  type of Smoother used for the transmission for that socket, which is responsible for\nthe transmission and congestion control. The Smoother type must be exactly  the  same  on\nboth connecting parties, otherwise the connection is rejected.\n\nmessageapi=1|0\nWhen  set,  this  socket uses the Message API, otherwise it uses Buffer API. Note that in\nlive mode (see transtype) there’s only message API available. In File mode you can  chose\nto use one of two modes:\n\nStream  API  (default, when this option is false). In this mode you may send as many data\nas you wish with one sending instruction, or  even  use  dedicated  functions  that  read\ndirectly  from  a  file. The internal facility will take care of any speed and congestion\ncontrol. When receiving, you can also receive as many  data  as  desired,  the  data  not\nextracted  will  be waiting for the next call. There is no boundary between data portions\nin the Stream mode.\n\nMessage API. In this mode your single sending instruction passes  exactly  one  piece  of\ndata that has boundaries (a message). Contrary to Live mode, this message may span across\nmultiple  UDP packets and the only size limitation is that it shall fit as a whole in the\nsending buffer. The receiver shall use as  large  buffer  as  necessary  to  receive  the\nmessage,  otherwise  the  message  will not be given up. When the message is not complete\n(not all packets received or there was a packet loss) it will not be given up.\n\ntranstype=live|file\nSets the transmission type for the  socket,  in  particular,  setting  this  option  sets\nmultiple  other  parameters  to  their  default  values  as  required  for  a  particular\ntransmission type.\n\nlive: Set options as for live transmission. In this mode, you should send by one  sending\ninstruction  only  so  many  data  that  fit  in one UDP packet, and limited to the value\ndefined first in payloadsize (1316 is default in this mode). There is no  speed  control\nin  this  mode,  only  the  bandwidth  control, if configured, in order to not exceed the\nbandwidth with the overhead transmission (retransmitted and control packets).\n\nfile: Set options as for non-live transmission. See messageapi for further explanations\n\nlinger=seconds\nThe number of seconds that the socket waits for unsent data when closing.  Default is -1.\n-1 means auto (off with 0 seconds in live mode, on with 180 seconds in  file  mode).  The\nrange for this option is integers in the 0 - \"INTMAX\".\n\ntsbpd=1|0\nWhen  true, use Timestamp-based Packet Delivery mode. The default behavior depends on the\ntransmission type: enabled in live mode, disabled in file mode.\n\nFor more information see: <https://github.com/Haivision/srt>.\n"
                },
                {
                    "name": "srtp",
                    "content": "Secure Real-time Transport Protocol.\n\nThe accepted options are:\n"
                },
                {
                    "name": "srtp_in_suite",
                    "content": ""
                },
                {
                    "name": "srtp_out_suite",
                    "content": "Select input and output encoding suites.\n\nSupported values:\n\nAESCM128HMACSHA180\nSRTPAES128CMHMACSHA180\nAESCM128HMACSHA132\nSRTPAES128CMHMACSHA132"
                },
                {
                    "name": "srtp_in_params",
                    "content": ""
                },
                {
                    "name": "srtp_out_params",
                    "content": "Set input and output  encoding  parameters,  which  are  expressed  by  a  base64-encoded\nrepresentation  of  a  binary  block. The first 16 bytes of this binary block are used as\nmaster key, the following 14 bytes are used as master salt.\n"
                },
                {
                    "name": "subfile",
                    "content": "Virtually extract a segment of a file or another  stream.   The  underlying  stream  must  be\nseekable.\n\nAccepted options:\n"
                },
                {
                    "name": "start",
                    "content": "Start offset of the extracted segment, in bytes.\n\nend End offset of the extracted segment, in bytes.  If set to 0, extract till end of file.\n\nExamples:\n\nExtract  a  chapter  from  a  DVD  VOB  file  (start  and end sectors obtained externally and\nmultiplied by 2048):\n\nsubfile,,start,153391104,end,268142592,,:/media/dvd/VIDEOTS/VTS081.VOB\n\nPlay an AVI file directly from a TAR archive:\n\nsubfile,,start,183241728,end,366490624,,:archive.tar\n\nPlay a MPEG-TS file from start offset till end:\n\nsubfile,,start,32815239,end,0,,:video.ts\n"
                },
                {
                    "name": "tee",
                    "content": "Writes the output to multiple protocols. The individual outputs are separated by |\n\ntee:file://path/to/local/this.avi|file://path/to/local/that.avi\n"
                },
                {
                    "name": "tcp",
                    "content": "Transmission Control Protocol.\n\nThe required syntax for a TCP url is:\n\ntcp://<hostname>:<port>[?<options>]\n\noptions contains a list of &-separated options of the form key=val.\n\nThe list of supported options follows.\n\nlisten=2|1|0\nListen for an incoming connection. 0 disables listen, 1 enables listen in  single  client\nmode, 2 enables listen in multi-client mode. Default value is 0.\n\nlocaladdr=addr\nLocal IP address of a network interface used for tcp socket connect.\n\nlocalport=port\nLocal port used for tcp socket connect.\n\ntimeout=microseconds\nSet raise error timeout, expressed in microseconds.\n\nThis  option  is  only  relevant  in read mode: if no data arrived in more than this time\ninterval, raise error.\n\nlistentimeout=milliseconds\nSet listen timeout, expressed in milliseconds.\n\nrecvbuffersize=bytes\nSet receive buffer size, expressed bytes.\n\nsendbuffersize=bytes\nSet send buffer size, expressed bytes.\n\ntcpnodelay=1|0\nSet TCPNODELAY to disable Nagle's algorithm. Default value is 0.\n\nRemark: Writing to the socket is currently not optimized to  minimize  system  calls  and\nreduces the efficiency / effect of TCPNODELAY.\n\ntcpmss=bytes\nSet maximum segment size for outgoing TCP packets, expressed in bytes.\n\nThe  following  example  shows  how to setup a listening TCP connection with ffmpeg, which is\nthen accessed with ffplay:\n\nffmpeg -i <input> -f <format> tcp://<hostname>:<port>?listen\nffplay tcp://<hostname>:<port>\n"
                },
                {
                    "name": "tls",
                    "content": "Transport Layer Security (TLS) / Secure Sockets Layer (SSL)\n\nThe required syntax for a TLS/SSL url is:\n\ntls://<hostname>:<port>[?<options>]\n\nThe following parameters can be set via command line options (or in code via \"AVOption\"s):\n\ncafile, cafile=filename\nA file containing certificate authority (CA) root certificates to treat  as  trusted.  If\nthe  linked  TLS  library  contains  a  default  this  might not need to be specified for\nverification to work, but not all libraries and setups have defaults built in.  The  file\nmust be in OpenSSL PEM format.\n\ntlsverify=1|0\nIf  enabled,  try  to  verify  the  peer  that we are communicating with.  Note, if using\nOpenSSL, this currently only makes sure that the peer certificate is signed by one of the\nroot certificates in the CA database, but it  does  not  validate  that  the  certificate\nactually  matches  the  host  name we are trying to connect to. (With other backends, the\nhost name is validated as well.)\n\nThis is disabled by default since it requires a CA database to be provided by the  caller\nin many cases.\n\ncertfile, cert=filename\nA  file  containing a certificate to use in the handshake with the peer.  (When operating\nas server, in listen mode, this  is  more  often  required  by  the  peer,  while  client\ncertificates only are mandated in certain setups.)\n\nkeyfile, key=filename\nA file containing the private key for the certificate.\n\nlisten=1|0\nIf  enabled,  listen  for connections on the provided port, and assume the server role in\nthe handshake instead of the client role.\n"
                },
                {
                    "name": "http_proxy",
                    "content": "The HTTP proxy to tunnel through, e.g. \"http://example.com:1234\".  The proxy must support\nthe CONNECT method.\n\nExample command lines:\n\nTo create a TLS/SSL server that serves an input stream.\n\nffmpeg -i <input> -f <format> tls://<hostname>:<port>?listen&cert=<server.crt>&key=<server.key>\n\nTo play back a stream from the TLS/SSL server using ffplay:\n\nffplay tls://<hostname>:<port>\n"
                },
                {
                    "name": "udp",
                    "content": "User Datagram Protocol.\n\nThe required syntax for an UDP URL is:\n\nudp://<hostname>:<port>[?<options>]\n\noptions contains a list of &-separated options of the form key=val.\n\nIn case threading is enabled on the system, a circular buffer is used to store  the  incoming\ndata,  which  allows  one  to  reduce  loss  of  data  due to UDP socket buffer overruns. The\nfifosize and overrunnonfatal options are related to this buffer.\n\nThe list of supported options follows.\n\nbuffersize=size\nSet the UDP maximum socket buffer size in bytes. This is used to set either  the  receive\nor  send  buffer  size,  depending  on what the socket is used for.  Default is 32 KB for\noutput, 384 KB for input.  See also fifosize.\n\nbitrate=bitrate\nIf set to nonzero, the output will have the specified constant bitrate if the  input  has\nenough packets to sustain it.\n\nburstbits=bits\nWhen using bitrate this specifies the maximum number of bits in packet bursts.\n\nlocalport=port\nOverride the local UDP port to bind with.\n\nlocaladdr=addr\nLocal  IP  address  of  a network interface used for sending packets or joining multicast\ngroups.\n\npktsize=size\nSet the size in bytes of UDP packets.\n\nreuse=1|0\nExplicitly allow or disallow reusing UDP sockets.\n\nttl=ttl\nSet the time to live value (for multicast only).\n\nconnect=1|0\nInitialize the UDP socket with connect(). In this case, the destination address can't  be\nchanged  with ffudpsetremoteurl later.  If the destination address isn't known at the\nstart, this option can be specified in ffudpsetremoteurl, too.  This  allows  finding\nout  the  source  address  for the packets with getsockname, and makes writes return with\nAVERROR(ECONNREFUSED) if \"destination unreachable\"  is  received.   For  receiving,  this\ngives the benefit of only receiving packets from the specified peer address/port.\n\nsources=address[,address]\nOnly  receive  packets  sent  from  the  specified  addresses. In case of multicast, also\nsubscribe to multicast traffic coming from these addresses only.\n\nblock=address[,address]\nIgnore packets sent from the specified addresses. In case of multicast, also exclude  the\nsource addresses in the multicast subscription.\n\nfifosize=units\nSet the UDP receiving circular buffer size, expressed as a number of packets with size of\n188 bytes. If not specified defaults to 7*4096.\n\noverrunnonfatal=1|0\nSurvive in case of UDP receiving circular buffer overrun. Default value is 0.\n\ntimeout=microseconds\nSet raise error timeout, expressed in microseconds.\n\nThis  option  is  only  relevant  in read mode: if no data arrived in more than this time\ninterval, raise error.\n\nbroadcast=1|0\nExplicitly allow or disallow UDP broadcasting.\n\nNote that broadcasting may not  work  properly  on  networks  having  a  broadcast  storm\nprotection.\n\nExamples\n\n•   Use ffmpeg to stream over UDP to a remote endpoint:\n\nffmpeg -i <input> -f <format> udp://<hostname>:<port>\n\n•   Use ffmpeg to stream in mpegts format over UDP using 188 sized UDP packets, using a large\ninput buffer:\n\nffmpeg -i <input> -f mpegts udp://<hostname>:<port>?pktsize=188&buffersize=65535\n\n•   Use ffmpeg to receive over UDP from a remote endpoint:\n\nffmpeg -i udp://[<multicast-address>]:<port> ...\n"
                },
                {
                    "name": "unix",
                    "content": "Unix local socket\n\nThe required syntax for a Unix socket URL is:\n\nunix://<filepath>\n\nThe following parameters can be set via command line options (or in code via \"AVOption\"s):\n"
                },
                {
                    "name": "timeout",
                    "content": "Timeout in ms.\n"
                },
                {
                    "name": "listen",
                    "content": "Create the Unix socket in listening mode.\n"
                },
                {
                    "name": "zmq",
                    "content": "ZeroMQ asynchronous messaging using the libzmq library.\n\nThis  library  supports  unicast streaming to multiple clients without relying on an external\nserver.\n\nThe required syntax for streaming or connecting to a stream is:\n\nzmq:tcp://ip-address:port\n\nExample: Create a localhost stream on port 5555:\n\nffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555\n\nMultiple clients may connect to the stream using:\n\nffplay zmq:tcp://127.0.0.1:5555\n\nStreaming to multiple clients is implemented using a ZeroMQ Pub-Sub pattern.  The server side\nbinds to a port and publishes data. Clients connect to the server (via IP  address/port)  and\nsubscribe  to  the  stream. The order in which the server and client start generally does not\nmatter.\n\nffmpeg must be compiled with the --enable-libzmq option to support this protocol.\n\nOptions can be set on the ffmpeg/ffplay command line. The following options are supported:\n"
                },
                {
                    "name": "pkt_size",
                    "content": "Forces the maximum packet size for sending/receiving data. The default value  is  131,072\nbytes.  On the server side, this sets the maximum size of sent packets via ZeroMQ. On the\nclients, it sets an internal buffer size for receiving packets. Note that pktsize on the\nclients should be equal to or greater than pktsize on the server. Otherwise the received\nmessage may be truncated causing decoding errors.\n"
                }
            ]
        },
        "SEE ALSO": {
            "content": "ffmpeg(1), ffplay(1), ffprobe(1), libavformat(3)\n",
            "subsections": []
        },
        "AUTHORS": {
            "content": "The FFmpeg developers.\n\nFor   details   about   the   authorship,   see   the   Git   history    of    the    project\n(https://git.ffmpeg.org/ffmpeg),  e.g.  by  typing  the  command git log in the FFmpeg source\ndirectory, or browsing the online repository at <https://git.ffmpeg.org/ffmpeg>.\n\nMaintainers for the specific components are listed in the file MAINTAINERS in the source code\ntree.\n\nFFMPEG-PROTOCOLS(1)",
            "subsections": []
        }
    },
    "summary": "ffmpeg-protocols - FFmpeg protocols",
    "flags": [],
    "examples": [],
    "see_also": [
        {
            "name": "ffmpeg",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/ffmpeg/1/json"
        },
        {
            "name": "ffplay",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/ffplay/1/json"
        },
        {
            "name": "ffprobe",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/ffprobe/1/json"
        },
        {
            "name": "libavformat",
            "section": "3",
            "url": "https://www.chedong.com/phpMan.php/man/libavformat/3/json"
        }
    ]
}