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 them 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 the 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 they were an unique resource.

An 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

Note that if not specified otherwise, the ff* tools will use the file protocol by default, that is a resource specified with the name "FILE.mpeg" is interpreted as it were the url "file:FILE.mpeg".

gopher
======

Gopher protocol.

http
====

HTTP (Hyper Text Trasfer Protocol).

mmst
====

MMS (Microsoft Media Server) protocol over TCP.

md5
===

MD5 output protocol.

Computes the MD5 hash of data 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 in 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 will use by default stdout if the protocol is used for writing, stdin if the protocol is used 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]

Follows the description of the accepted parameters.

server
     It is the address of the RTMP server.

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

app
     It is the name of the application to acces. It usually corresponds to the 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.

Require the presence of the headers and library of librtmp 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 has specified for the RTMP native protocol. OPTIONS contains a list of space-separated options of the form KEY=VAL.

See the manual page of librtmp (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.