Protocols
*********

Protocols are configured elements in FFmpeg which allow to access resources which require the use of a particular protocol.

When you configure your FFmpeg build, all the supported protocols are enabled by default. You can list all available ones using the configure option "--list-protocols".

You can disable all the protocols using the configure option "--disable-protocols", and selectively enable a protocol using the option "--enable-protocol=PROTOCOL", or you can disable a particular protocol using the option "--disable-protocol=PROTOCOL".

The option "-protocols" of the ff* tools will display the list of supported protocols.

A description of the currently available protocols follows.

concat
======

Physical concatenation protocol.

Allow to read and seek from many resource in sequence as if they were a unique resource.

A URL accepted by this protocol has the syntax:

     concat:URL1|URL2|...|URLN

where URL1, URL2, ..., URLN are the urls of the resource to be concatenated, each one possibly specifying a distinct protocol.

For example to read a sequence of files split1.mpeg, split2.mpeg, split3.mpeg with ffplay use the command:

     ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg

Note that you may need to escape the character "|" which is special for many shells.

file
====

File access protocol.

Allow to read from or read to a file.

For example to read from a file input.mpeg with ffmpeg use the command:

     ffmpeg -i file:input.mpeg output.mpeg

The ff* tools default to the file protocol, that is a resource specified with the name "FILE.mpeg" is interpreted as the URL "file:FILE.mpeg".

gopher
======

Gopher protocol.

http
====

HTTP (Hyper Text Transfer Protocol).

mmst
====

MMS (Microsoft Media Server) protocol over TCP.

mmsh
====

MMS (Microsoft Media Server) protocol over HTTP.

The required syntax is:

     mmsh://SERVER[:PORT][/APP][/PLAYPATH]

md5
===

MD5 output protocol.

Computes the MD5 hash of the data to be written, and on close writes this to the designated output or stdout if none is specified. It can be used to test muxers without writing an actual file.

Some examples follow.

     # Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
     ffmpeg -i input.flv -f avi -y md5:output.avi.md5

     # Write the MD5 hash of the encoded AVI file to stdout.
     ffmpeg -i input.flv -f avi -y md5:

Note that some formats (typically MOV) require the output protocol to be seekable, so they will fail with the MD5 output protocol.

pipe
====

UNIX pipe access protocol.

Allow to read and write from UNIX pipes.

The accepted syntax is:

     pipe:[NUMBER]

NUMBER is the number corresponding to the file descriptor of the pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr).  If NUMBER is not specified, by default the stdout file descriptor will be used for writing, stdin for reading.

For example to read from stdin with ffmpeg:

     cat test.wav | ffmpeg -i pipe:0
     # ...this is the same as...
     cat test.wav | ffmpeg -i pipe:

For writing to stdout with ffmpeg:

     ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
     # ...this is the same as...
     ffmpeg -i test.wav -f avi pipe: | cat > test.avi

Note that some formats (typically MOV), require the output protocol to be seekable, so they will fail with the pipe output protocol.

rtmp
====

Real-Time Messaging Protocol.

The Real-Time Messaging Protocol (RTMP) is used for streaming multime‐ dia content across a TCP/IP network.

The required syntax is:

     rtmp://SERVER[:PORT][/APP][/PLAYPATH]

The accepted parameters are:

server
     The address of the RTMP server.

port
     The number of the TCP port to use (by default is 1935).

app
     It is the name of the application to access. It usually corresponds to the path where the application is installed on the RTMP server (e.g. /ondemand/, /flash/live/, etc.).

playpath
     It is the path or name of the resource to play with reference to the application specified in APP, may be prefixed by "mp4:".

For example to read with ffplay a multimedia resource named "sample" from the application "vod" from an RTMP server "myserver":

     ffplay rtmp://myserver/vod/sample

rtmp, rtmpe, rtmps, rtmpt, rtmpte
=================================

Real-Time Messaging Protocol and its variants supported through librtmp.

Requires the presence of the librtmp headers and library during configuration. You need to explicitely configure the build with "--enable-librtmp". If enabled this will replace the native RTMP protocol.

This protocol provides most client functions and a few server functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled variants of these encrypted types (RTMPTE, RTMPTS).

The required syntax is:

     RTMP_PROTO://SERVER[:PORT][/APP][/PLAYPATH] OPTIONS

where RTMP_PROTO is one of the strings "rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and SERVER, PORT, APP and PLAYPATH have the same meaning as specified for the RTMP native protocol. OPTIONS contains a list of space-separated options of the form KEY=VAL.

See the librtmp manual page (man 3 librtmp) for more information.

For example, to stream a file in real-time to an RTMP server using ffmpeg:

     ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream

To play the same stream using ffplay:

     ffplay "rtmp://myserver/live/mystream live=1"

rtp
===

Real-Time Protocol.

tcp
===

Trasmission Control Protocol.

udp
===

User Datagram Protocol.