FFmpeg协议文档

网站翻译由林建有提供支持

1 描述

此文档描述了libavformat库提供的输入和输出协议。

2 协议选项

libavformat库提供了一些通用的全局选项,这些选项可以在所有协议上设置。此外,每个协议可能支持私有选项,这些选项对该组件是特定的。

选项可以通过指定 -选项 在FFmpeg工具中设置,或者通过AVFormatContext显式设置值,亦或通过使用libavutil/opt.hAPI进行编程使用。

支持的选项列表如下:

protocol_whitelist 列表 (输入)

设置一个","分隔的允许协议列表。“ALL”匹配所有协议。以“-”前缀的协议被禁用。 默认情况下允许所有协议,但嵌套协议的使用被限制为每个协议的子集。

3 协议

协议是配置好的FFmpeg元素,能够访问需要特定协议的资源。

当您配置FFmpeg构建时,所有支持的协议将在默认情况下启用。您可以使用配置选项"–list-protocols"列出所有可用的协议。

您可以使用配置选项"–disable-protocols"禁用所有协议,并通过选项"–enable-protocol=PROTOCOL的方式选择性地启用协议,或者通过选项 "–disable-protocol=PROTOCOL".

禁用某一特定协议。

ff*工具的选项"-protocols"将显示支持的协议列表。

rw_timeout

等待(网络)读写操作完成的最大时间,以微秒为单位。

以下是当前可用协议的描述。

3.1 amqp

高级消息队列协议(AMQP)版本0-9-1是一种基于代理的发布订阅通信协议。

FFmpeg必须编译时使用–enable-librabbitmq以支持AMQP,此外需要一个单独的AMQP代理。一个示例开源AMQP代理是RabbitMQ。

启动代理后,FFmpeg客户端可以使用以下命令向代理流数据:

ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]

其中hostname和端口(默认值为5672)是代理的地址。客户端还可以设置用户/密码进行认证。这两个字段的默认值均为"guest"。 broker上的虚拟主机名称可以通过vhost设置,默认值为"/"。

多个订阅者可以通过以下命令从代理流数据:

ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]

在RabbitMQ中,发布到代理的所有数据都会流经一个特定的exchange,每个订阅客户端都有一个分配的队列/缓冲区。当数据包到达exchange时,可能会根据exchange 和routing_key字段复制到客户端的队列。

支持以下选项:

exchange

设置代理上要使用的exchange。RabbitMQ有几个预定义的exchanges:"amq.direct"是默认的exchange,发布者和订阅者必须有匹配的routing_key;"amq.fanout"类似广播操作(即数据被转发到fanout exchange上的所有队列,无论routing_key为何);"amq.topic"与"amq.direct"类似,但允许更复杂的模式匹配(参考RabbitMQ文档)。

routing_key

设置routing key。默认值为"amqp"。routing key在"amq.direct"和"amq.topic" exchanges上用于决定是否将数据包写入订阅者的队列。

pkt_size

发送/接收到代理的每个数据包的最大大小。默认值为131072。最小值为4096,最大值为任何大值(int能够表示的值)。接收数据包时,这会在FFmpeg中设置一个内部缓冲区大小。缓冲区应大于或等于发布到代理的数据包大小,否则接收到的消息可能会被截断导致解码错误。

connection_timeout

在最初连接到代理时的超时时间,以秒计。默认值为rw_timeout或5秒,如果rw_timeout未设置。

delivery_mode 模式

设置发送到代理的每个消息的交付模式。接收以下值:

persistent

交付模式设置为"persistent"(2)。这是默认值。 消息可能会根据代理的设置写入其磁盘。

non-persistent

交付模式设置为"non-persistent"(1)。 消息将保留在代理的内存中,除非代理处于内存压力状态。

3.2 async

输入流的异步数据填充包装器。

在后台线程中填充数据,以解耦I/O操作和解复用线程。

async:URL
async:http://host/resource
async:cache:http://host/resource

3.3 bluray

读取蓝光播放列表。

接受的选项有:

angle

蓝光角度

chapter

开始章节(1...N)

playlist

要读取的播放列表(BDMV/PLAYLIST/?????.mpls)

示例:

从挂载到/mnt/bluray的蓝光中读取最长播放列表:

bluray:/mnt/bluray

从挂载到/mnt/bluray的蓝光中读取播放列表4的角度2,从章节2开始:

-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray

3.4 cache

输入流的缓存包装器。

将输入流缓存到临时文件中。这为实时流引入了寻求能力。

接受的选项有:

read_ahead_limit

在不支持寻求时可以提前读取的字节数量。范围为-1到INT_MAX。 -1表示无限制。默认值为65536。

URL语法为

cache:URL

3.5 concat

物理级串联协议。

按顺序从多种资源中读取并寻求,就像它们是一个唯一资源一样。

此协议接受的URL语法为:

concat:URL1|URL2|...|URLN

其中URL1, URL2, ..., URLN是要串联的资源的URL,每个可能指定不同的协议。

例如,读取一系列文件,请使用split1.mpeg, split2.mpeg, split3.mpeg使用ffplay命令:

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

注意,您可能需要转义字符"|",它对于许多shell是特殊字符。

3.6 concatf

使用换行符分隔的资源列表进行物理级串联协议。

按顺序从多种资源中读取并寻求,就像它们是一个唯一资源一样。

此协议接受的URL语法为:

concatf:URL

其中URL是包含换行符分隔资源列表的URL,每个可能指定不同的协议。特殊字符必须使用反斜杠或单引号进行转义。见(ffmpeg-utils)ffmpeg-utils(1)手册中的“引用和转义”部分.

例如,请使用以下命令读取一系列文件split1.mpeg, split2.mpeg, split3.mpeg在单独的行中列出的split.txt包含以下内容时:ffplay命令:

ffplay concatf:split.txt

其中split.txt包含以下各行:

split1.mpeg
split2.mpeg
split3.mpeg

3.7 crypto

AES加密流的读取协议。

接受的选项有:

key

根据给定的十六进制表示设置AES解密密钥二进制块。

iv

根据给定的十六进制表示设置AES解密初始化矢量二进制块。

接受的URL格式:

crypto:URL
crypto+URL

3.8 data

URI中内联的数据。见http://en.wikipedia.org/wiki/Data_URI_scheme.

例如,要转换内联的GIF文件,请使用以下命令:ffmpeg:

ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png

3.9 fd

文件描述符访问协议。

接受的语法为:

fd: -fd 文件描述符

如果未指定,默认情况下stdout文件描述符将用于写入,stdin用于读取。与pipe协议不同,fd协议对常规文件具有寻求支持。fd协议的URL格式不支持通过URL传递文件描述符以确保安全性。fd is not specified, by default the stdout file descriptor will be used for writing, stdin for reading. Unlike the pipe protocol, fd protocol has seek support if it corresponding to a regular file. fd protocol doesn’t support pass file descriptor via URL for security.

此协议可接受以下选项:

blocksize

设置I/O操作的最大块大小,以字节为单位。默认值为INT_MAX,这意味着不限制请求的块大小。设置此值合理的低值可以改善用户终止请求的响应时间,这在数据传输较慢时非常有价值。

fd

设置文件描述符。

3.10 file

文件访问协议。

从文件中读取或向文件写入。

文件URL可以具有以下形式:

file:文件名

其中文件名是要读取的文件路径。

没有协议前缀的URL将被假定是文件URL。根据构建方式,前缀为驱动器字母的URL通常也被假定为文件URL(通常在类unix构建中不是这样)。

例如,从一个文件读取,请使用input.mpeg以下命令:ffmpeg命令:

ffmpeg -i file:input.mpeg output.mpeg

此协议可接受以下选项:

truncate

写入时是否截断现有文件,如果设置为1,则截断。值为0时防止截断。默认值为1。

blocksize

设置I/O操作的最大块大小,以字节为单位。默认值为INT_MAX,这意味着不限制请求的块大小。设置此值合理的低值可以改善用户终止请求的响应时间,这对于慢速介质上的文件尤为宝贵。

follow

如果设置为1,协议将在文件末尾尝试重新读取,允许读取仍在写入的文件。为了终止,您需要使用rw_timeout选项,或者使用中断回调(对于API用户)。

seekable

控制文件是否支持可寻求性。0表示不可寻求,-1表示自动(通常文件为可寻求,命名管道为不可寻求)。

许多解复用器对可寻求和不可寻求资源的处理不同,覆盖此设置可能会加快某些文件的打开速度,但可能会失去某些功能(例如精确寻求)。

3.11 ftp

FTP(文件传输协议)。

使用FTP协议从远程资源读取或写入资源。

需要以下语法。

ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

此协议接受以下选项。

timeout

设置套接字I/O操作的超时时间,以微秒为单位,由底层低级操作使用。默认情况下设置为-1,这意味着未指定超时。

ftp-user

设置用于向FTP服务器验证的用户。这会被FTP URL中的用户覆盖。

ftp-password

设置用于向FTP服务器验证的密码。这会被FTP URL中的密码覆盖,或者当未设置用户时由ftp-anonymous-password默认值代替。

ftp-anonymous-password

以匿名用户登录时使用的密码。通常应该使用电子邮件地址。

ftp-write-seekable

控制连接在编码期间的可寻求性。当设置为1时,资源被认为是可寻求的;设置为0时,被认为不可寻求。默认值为0。

注意:协议可用作输出,但建议不要这样做,除非已采取特殊措施(测试,自定义服务器配置等)。不同的FTP服务器在寻求操作期间可能表现得不同。ff*工具可能由于服务器限制而产生不完整的内容。

3.12 地鼠

地鼠协议。

3.13 地鼠们

地鼠们协议。

使用 TLS 封装的地鼠协议。

3.14 HLS

读取符合 Apple HTTP Live Streaming 的分段流,作为一种统一流。用于描述分段的 M3U8 播放列表可以是远程的 HTTP 资源或本地文件,使用标准文件协议访问。 嵌套协议可以通过在 HLS URI 方案名称后指定 “+proto" 的方式声明,其中proto是 “file” 或 “http”。

hls+http://host/path/to/remote/resource.m3u8
hls+file://path/to/local/resource.m3u8

不建议使用此协议 - HLS 解复用器应该能够同样良好地工作(如果不是,请报告问题),并且更加完整。 要使用 HLS 解复用器来代替,直接使用 M3U8 文件的 URL。

3.15 HTTP

HTTP(超文本传输协议)。

此协议接受以下选项:

seekable

控制连接的可寻性。如果设置为 1,则假定资源是可寻的;如果设置为 0,则假定资源不可寻;如果设置为 -1,则会尝试自动检测其是否可寻。默认值为 -1。

chunked_post

如果设置为 1,则在 POST 中使用分块传输编码,默认值为 1。

http_proxy

设置需要通过的 HTTP 代理,例如:http://example.com:1234

headers

设置自定义 HTTP 头,可以覆盖默认内置头。值必须是字符串编码的头。

content_type

设置 POST 消息或监听模式的特定内容类型。

user_agent

覆盖 User-Agent 头。如果未指定,协议将使用描述 libavformat 构建的字符串(“Lavf/<version>”)。

referer

设置 Referer 头。在 HTTP 请求中包括 ‘Referer: URL’ 头。

multiple_requests

如果设置为 1,则使用持久连接,默认值为 0。

post_data

设置自定义 HTTP POST 数据。

mime_type

导出 MIME 类型。

http_version

导出 HTTP 响应版本号。通常为 “1.0” 或 “1.1”。

cookies

设置将来请求中发送的 Cookie。每个 Cookie 的格式与 Set-Cookie HTTP 响应字段的值相同。多个 Cookie 可以用换行符分隔。

icy

如果设置为 1,从服务器请求 ICY(SHOUTcast)元数据。如果服务器支持此功能,则需要通过应用程序通过读取icy_metadata_headersicy_metadata_packet选项来获取元数据。 默认值为 1。

icy_metadata_headers

如果服务器支持 ICY 元数据,此项包含 ICY 特定的 HTTP 回复头,使用换行符分隔。

icy_metadata_packet

如果服务器支持 ICY 元数据,并且icy被设置为 1,则此项包含上次由服务器发送的非空元数据包。对此感兴趣的应用程序应该定期轮询,以获取流中期的元数据更新。

metadata

设置一个包含比特流 Icecast 元数据的导出字典(如果存在)。仅适用于 C API。

auth_type

设置 HTTP 认证类型。Digest 没有选项,因为这种方法需要从服务器首先获取 nonce 参数并且不能直接使用,例如 Basic。

none

自动选择 HTTP 认证类型。这是默认值。

basic

选择 HTTP 基本认证。

基本认证发送一个 Base64 编码的字符串,其中包含客户端的用户名和密码。Base64 不是加密形式,应视为与以明文发送用户名和密码相同(Base64 是一种可逆编码)。如果资源需要保护,请强烈考虑使用除了基本认证之外的认证方案。基本认证应与 HTTPS/TLS 一起使用。如果没有这些额外的安全增强,基本认证不应被用于保护敏感或有价值的信息。

send_expect_100

为 POST 发送 Expect: 100-continue 头。如果设置为 1,则发送;如果设置为 0,则不发送;如果设置为 -1,它将在适用时尝试发送。默认值为 -1。

location

包含内容位置的导出字典。仅适用于 C API。

offset

设置初始字节偏移。

end_offset

尝试限制请求到位于此偏移之前的字节。

method

作为客户端选项使用时,它设置请求的 HTTP 方法。

作为服务器选项使用时,它设置客户端将要使用的 HTTP 方法。 如果预期和接收到的 HTTP 方法不匹配,客户端将收到“错误请求”响应。 如果未设置,当前不检查 HTTP 方法。这将在未来被替换为自动检测。

reconnect

在 EOF 到达之前自动重新连接。

reconnect_at_eof

如果设置,那么 eof 被视为错误并导致重新连接,这在实时/无尽流中很有用。

reconnect_on_network_error

在连接期间因 TCP/TLS 错误而自动重新连接。

reconnect_on_http_error

用于重新连接的 HTTP 状态代码的逗号分隔列表。列表可以包括特定状态代码(例如 “503”)或字符串 “4xx”/“5xx”。

reconnect_streamed

如果设置,那么即使对于流式/不可寻的流,在错误时也会重新连接。

reconnect_delay_max

设置最大延迟时间(秒),在超过该时间后放弃重新连接。

reconnect_max_retries

设置重新连接最大尝试次数。默认未设置。

reconnect_delay_total_max

设置总重新连接总延迟时间(秒),超过该时间后放弃重新连接。

respect_retry_after

如果启用,且遇到 Retry-After 头,则会遵守其请求的重新连接延迟,而不是使用指数回退。对于 429 和 503 错误来说是有用的。默认启用。

listen

如果设置为 1,启用实验性的 HTTP 服务器。当作为输出选项使用时,可以用于发送数据;当作为输入选项使用时,可以读取客户端通过 HTTP POST 发来的数据。 如果设置为 2,启用实验性的多客户端 HTTP 服务器。这尚未在 ffmpeg.c 中实现,因此不能作为命令行选项使用。

# Server side (sending):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://服务器:端口

# Client side (receiving):
ffmpeg -i http://服务器:端口 -c copy somefile.ogg

# Client can also be done with wget:
wget http://服务器:端口 -O somefile.ogg

# Server side (receiving):
ffmpeg -listen 1 -i http://服务器:端口 -c copy somefile.ogg

# Client side (sending):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://服务器:端口

# Client can also be done with wget:
wget --post-file=somefile.ogg http://服务器:端口
resource

当实验性 HTTP 服务器正在使用时,客户端请求的资源。

reply_code

当实验性 HTTP 服务器正在使用时,返回给客户端的 HTTP 代码。

short_seek_size

设置重读(而非寻求和新的 HTTP 请求)应优先的阈值(以字节为单位)。例如,这有助于确保在视频大数据包之间使用小音频包时使用相同的连接。

3.15.1 HTTP Cookies

有些 HTTP 请求将被拒绝,除非请求中传递 Cookie 值。cookies选项允许指定这些 Cookie。至少每个 Cookie 必须指定一个值以及路径和域。 匹配域和路径的 HTTP 请求将自动在 HTTP Cookie 头字段中包含 Cookie 值。多个 Cookie 可以用换行符分隔。

指定 Cookie 的流的播放所需语法是:

ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8

3.16 Icecast

Icecast 协议(流至 Icecast 服务器)

此协议接受以下选项:

ice_genre

设置流的类型。

ice_name

设置流名称。

ice_description

设置流描述。

ice_url

设置流的网站 URL。

ice_public

设置流是否应为公开。默认值为 0(非公开)。

user_agent

覆盖 User-Agent 头。如果未指定,则使用类似“Lavf/<version>”形式的字符串。

password

设置 Icecast 挂点密码。

content_type

设置流内容类型。如果不同于 audio/mpeg,则必须设置。

legacy_icecast

启用对 Icecast 版本 <2.4.0 的支持,这些版本不支持 HTTP PUT 方法,而是支持 SOURCE 方法。

tls

通过 TLS(HTTPS)连接至 Icecast。

icecast://[用户名[:密码]@]服务器:端口/挂点

3.17 ipfs

星际文件系统(IPFS)协议支持。可以通过所谓的网关访问存储在 IPFS 网络上的文件。这些网关是 http(s) 终端。 此协议将 IPFS 原生协议(ipfs:// 和 ipns://)包装为发送到这样的网关。用户可以(也应)托管自己的节点,这意味着此协议将使用用户的本地网关访问 IPFS 网络上的文件。

此协议接受以下选项:

gateway

定义要使用的网关。如果未设置,协议将首先尝试通过查看$IPFS_GATEWAY, $IPFS_PATH$HOME/.ipfs/来定位本地网关,按此顺序。

可以以两种方式使用此协议。使用 IPFS:

ffplay ipfs://<hash>

或 IPNS 协议(IPNS 是可变的 IPFS):

ffplay ipns://<hash>

3.18 mmst

MMS(微软媒体服务器)协议通过 TCP。

3.19 mmsh

MMS(微软媒体服务器)协议通过 HTTP。

所需语法是:

mmsh://服务器[:端口][/应用程序][/播放路径]

3.20 md5

MD5 输出协议。

计算要写入数据的 MD5 哈希值,并在关闭时将其写入指定输出或标准输出(如果未指定)。它可以用于测试复用器,而无需实际写入任何文件。

下面是一些示例。

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

请注意,有些格式(通常是 MOV)要求输出协议是可寻的,因此它们会与 MD5 输出协议失败。

3.21 管道

UNIX 管道访问协议。

从 UNIX 管道读取和写入。

接受的语法是:

pipe:[数字]

如果fd未指定,数字是管道文件描述符对应的编号(例如,0代表标准输入,1代表标准输出,2代表标准错误)。如果数字未指定,默认情况下,将使用标准输出的文件描述符进行写入,标准输入进行读取。

例如,使用ffmpeg:

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

写入标准输出。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

此协议接受以下选项:

blocksize

设置最大 I/O 操作块大小(以字节为单位)。默认值为INT_MAX,意味着不限制请求块大小。适当低地设置此值可提高用户终止请求反应时间,在数据传输缓慢时很有价值。

fd

设置文件描述符。

请注意,有些格式(通常是 MOV),要求输出协议是可寻的,因此它们会与管道输出协议失败。

3.22 prompeg

Pro-MPEG 代码规范 #3 第 2 版 FEC 协议。

Pro-MPEG CoP#3 FEC 是一种用于通过 RTP 发送的 MPEG-2 传输流的二维奇偶校验前向纠错机制。

此协议必须与rtp_mpegts多路复用器和rtp协议一起使用。

所需语法是:

-f rtp_mpegts -fec prompeg=选项=... rtp://主机名:端口

目标 UDP 端口是port + 2用于列 FEC 流,port + 4用于行 FEC 流。

此协议接受以下选项:

l=列数(4-20,LxD <= 100)

The number of columns (4-20, LxD <= 100)

d=行数(4-20,LxD <= 100)

The number of rows (4-20, LxD <= 100)

示例用法:

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://主机名:端口

3.23 RIST

可靠互联网流传输协议

接受的选项是:

rist_profile

支持的值:

simple
main

这是默认值。

advanced
buffer_size

设置内置 RIST 缓冲区以毫秒为单位的大小,用于重传数据。 默认值为 0,表示使用 librist 默认值(1 秒)。最大值为 30 秒。

fifo_size

librist 接收器输出 FIFO 的大小,以包数量为单位。这必须是 2 的幂。 默认值为 8192(相对于 librist 默认值 1024)。

overrun_nonfatal=1|0

在发生 librist FIFO 缓冲区溢出事件时恢复。默认值为 0。

pkt_size

设置发送数据的最大分组大小。默认值为 1316。

log_level

设置 RIST 日志消息的日志等级,仅需要在显式启用调试级消息或数据包损失模拟时设置该项。 否则,将遵守常规日志等级。

secret

设置覆盖加密密钥,默认情况未设置。

encryption

设置加密类型,默认情况下禁用。 可接受的值为128和256。

3.24 rtmp

实时消息传递协议。

实时消息传递协议(RTMP)用于通过TCP/IP网络进行多媒体内容的流式传输。

所需语法为:

rtmp://[用户名:密码@]服务器[:端口][/应用程序][/实例][/播放路径]

接受的参数为:

username

一个可选的用户名(主要用于发布)。

password

一个可选的密码(主要用于发布)。

server

RTMP服务器的地址。

port

要使用的TCP端口号(默认为1935)。

app

这是要访问的应用程序名称。它通常对应于安装在RTMP服务器上的应用路径 (例如/ondemand/, /flash/live/等)。您可以通过rtmp_app选项覆盖从URI解析的值。

playpath

这是根据指定的应用程序,在app中的资源路径或名称,可以以"mp4:"为前缀。 您可以通过rtmp_playpath选项覆盖从URI解析的值。

listen

充当服务器,监听传入连接。

timeout

等待传入连接的最长时间。意味着监听。

此外,以下参数可以通过命令行选项设置 (或在代码中通过AVOptions):

rtmp_app

要连接到RTMP服务器上的应用名称。此选项覆盖URI中指定的参数。

rtmp_buffer

设置客户端缓冲时间(单位:毫秒)。默认值为3000。

rtmp_conn

解析来自字符串的额外任意AMF连接参数,例如像B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0。 每个值以一个单个字符为前缀,表示类型:B表示布尔值,N表示数字,S表示字符串,O表示对象或Z表示null, 后面紧跟冒号。对于布尔值,数据必须为0或1分别表示FALSE或TRUE。同样对于对象, 数据必须为0或1分别表示结束或开始一个对象。在子对象中的数据项可以通过在 类型前加上’N’,然后在值前指定名称(即NB:myFlag:1)。此选项可多次使用,以构建任意AMF序列。

rtmp_enhanced_codecs

指定客户端在增强RTMP流中声明支持的视频编码格式列表。此选项应设置为逗号分隔的 fourcc值列表,例如hvc1,av01,vp09表示支持多个编码格式 或hvc1表示仅支持一个编码格式。指定的列表将在连接命令消息的"fourCcLive"属性中显示。

rtmp_flashver

运行SWF播放器时使用的Flash插件版本。默认值为LNX 9,0,124,2。(在发布时,默认值为FMLE/3.0(兼容; <libavformat版本>)。

rtmp_flush_interval

在同一请求中刷新的数据包数量(仅RTMPT)。默认值为10。

rtmp_live

指定媒体是流式直播。不能在直播流中恢复或寻址。默认值为any,这意味着订阅者首先尝试播放playpath指定的直播流。 如果没有找到该名称的直播流,则播放记录流。其他可能的值为liverecorded.

rtmp_pageurl

嵌入媒体的网页的URL。默认情况下不会发送任何值。

rtmp_playpath

要播放或发布的流标识符。此选项覆盖URI中指定的参数。

rtmp_subscribe

要订阅的直播流名称。默认情况下不会发送任何值。 仅在指定此选项或者设置rtmp_live为live时发送。

rtmp_swfhash

解压缩SWF文件的SHA256哈希值(32字节)。

rtmp_swfsize

解压缩SWF文件的大小,要求用于SWF验证。

rtmp_swfurl

媒体的SWF播放器URL。默认情况不会发送任何值。

rtmp_swfverify

播放器SWF文件的URL,自动计算哈希值与大小。

rtmp_tcurl

目标流的URL。默认为proto://host[:port]/app。

tcp_nodelay=1|0

设置TCP_NODELAY以禁用Nagle算法。默认值为0。

备注:当前写入套接字未优化以减少系统调用,从而影响TCP_NODELAY的效率。

例如,用ffplay读取一个名为 "sample"的多媒体资源,该资源位于RTMP服务器"myserver"的应用程序"vod"中:

ffplay rtmp://myserver/vod/sample

要发布到受密码保护的服务器,单独传递播放路径和应用程序名称:

ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/

3.25 rtmpe

加密的实时消息传递协议。

加密的实时消息传递协议(RTMPE)用于在标准加密原语内流式传输多媒体内容, 包括Diffie-Hellman密钥交换和HMACSHA256,生成一对RC4密钥。

3.26 rtmps

通过安全SSL连接的实时消息传递协议。

实时消息传递协议(RTMPS)用于通过加密连接流式传输多媒体内容。

3.27 rtmpt

通过HTTP隧道的实时消息传递协议。

通过HTTP隧道的实时消息传递协议(RTMPT)用于在HTTP请求内流式传输多媒体内容以穿越防火墙。

3.28 rtmpte

通过HTTP隧道的加密实时消息传递协议。

通过HTTP隧道的加密实时消息传递协议(RTMPTE)用于在HTTP请求内流式传输多媒体内容以穿越防火墙。

3.29 rtmpts

通过HTTPS隧道的实时消息传递协议。

通过HTTPS隧道的实时消息传递协议(RTMPTS)用于在HTTPS请求内流式传输多媒体内容以穿越防火墙。

3.30 libsmbclient

libsmbclient允许操作CIFS/SMB网络资源。

所需语法如下。

smb://[[domain:]user[:password@]]server[/share[/path[/file]]]

此协议接受以下选项。

timeout

设置套接字I/O操作的超时时间(单位:毫秒),用于底层低级操作。默认设置为-1,表示未指定超时时间。

truncate

设置写入时是否截断现有文件,值为1时表示截断,值为0则禁止截断。默认值为1。

workgroup

设置用于建立连接的工作组。默认情况下未指定工作组。

有关更多信息,请参阅:http://www.samba.org/.

3.31 libssh

通过libssh的安全文件传输协议

使用SFTP协议从远程资源读取或写入。

所需语法如下。

sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

此协议接受以下选项。

timeout

设置套接字I/O操作的超时时间,用于底层低级操作。默认设置为-1,表示未指定超时时间。

truncate

设置写入时是否截断现有文件,值为1表示截断,值为0则禁止截断。默认值为1。

private_key

指定在授权期间使用的包含私钥的文件路径。 默认情况下,libssh会在~/.ssh/目录中查找密钥。

示例:播放存储在远程服务器上的文件。

ffplay sftp://user:password@server_address:22/home/user/resource.mpeg

3.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

通过librtmp支持的实时消息传递协议及其变体。

在配置过程中需要具有librtmp头文件和库。您需要显式地以"–enable-librtmp"配置构建。 如果启用,将替换本地RTMP协议。

此协议提供支持RTMP、HTTP隧道RTMP(RTMPT)、加密RTMP(RTMPE)、SSL/TLS RTMP(RTMPS)及这些加密类型的隧道变体(RTMPTE、RTMPTS)所需的大多数客户端功能及少数服务器功能。

所需语法为:

rtmp_proto://服务器[:端口][/应用程序][/播放路径] 选项

其中rtmp_proto是字符串类型,可以是"rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts"中的一种,分别对应每种RTMP变体,而服务器, 端口, 应用程序播放路径与RTMP本地协议指定的含义相同。选项包含形式为key=val.

的以空格分隔的选项列表。

有关更多信息,请参阅librtmp手册页(man 3 librtmp)。ffmpeg:

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

通过ffplay:

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

3.33 rtp

实时传输协议。

RTP URL的所需语法为: rtp://主机名[:端口][?选项=...]

端口指定要使用的RTP端口。

支持以下URL选项:

ttl=n

设置TTL(生存时间)值(仅针对组播)。

rtcpport=n

将远程RTCP端口设置为n.

localrtpport=n

将本地RTP端口设置为n.

localrtcpport=n'

将本地RTCP端口设置为n.

pkt_size=n

将最大数据包大小(以字节为单位)设置为n.

buffer_size=大小

设置UDP套接字的最大缓冲区大小(以字节为单位)。

connect=0|1

在UDP套接字上执行connect()(如果设置为1)或不执行(如果设置为0)。

sources=IP[,IP]

允许的源IP地址列表。

block=IP[,IP]

不允许(被阻止)的源IP地址列表。

write_to_source=0|1

将数据包发送到最新接收数据包的源地址(如果设置为1)或某默认远程地址(如果设置为0)。

localport=n

将本地RTP端口设置为n.

localaddr=地址

用于发送数据包或加入组播组的网络接口的本地IP地址。

timeout=n

将套接字I/O操作的超时时间(以微秒为单位)设置为n.

这是一个已弃用的选项。请改用localrtpport

重要说明:

  1. 如果rtcpport未设置,RTCP端口将设置为RTP端口值加1。
  2. 如果localrtpport(本地RTP端口)未设置,则将使用任意可用端口作为本地RTP和RTCP端口。
  3. 如果localrtcpport(本地RTCP端口)未设置,则将其设置为本地RTP端口值加1。

3.34 rtsp

实时流协议。

RTSP在libavformat中并非严格意义上的协议处理器,而是一个拆分器 和复合器。拆分器支持正常RTSP(数据通过RTP传输;这用于例如 Apple和Microsoft)和Real-RTSP(数据通过RDT传输)。

复合器可以使用RTSP ANNOUNCE通过RTSP向支持它的服务器发送一个流(目前是Darwin Streaming Server和Mischa Spiegelmock’sRTSP服务器).

RTSP URL的未定语法为:

rtsp://主机名[:端口]/路径

可以在ffmpeg/ffplay命令行上设置选项,也可以通过代码设置选项AVOptions或在avformat_open_input.

3.34.1 复合器

支持以下选项。

rtsp_transport

设置RTSP传输协议。

接受以下值:

udp

使用UDP作为下层传输协议。

tcp

使用TCP(与RTSP控制通道内嵌)作为下层传输协议。

默认值为 ‘0’.

rtsp_flags

设置RTSP标志。

接受以下值:

latm

使用MP4A-LATM数据包代替MPEG4-GENERIC用于AAC。

rfc2190

使用RFC 2190数据包代替RFC 4629用于H.263。

skip_rtcp

不发送RTCP发送者报告。

h264_mode0

使用0模式用于H.264 RTP。

send_bye

完成时发送RTCP关闭包。

默认值为 ‘0’.

min_port

设置最小本地UDP端口。默认值为5000。

max_port

设置最大本地UDP端口。默认值为65000。

buffer_size

设置套接字最大缓冲区大小的字节数。

pkt_size

设置最大发送数据包大小(单位:字节)。默认值为1472。

3.34.2 拆分器

支持以下选项。

initial_pause

如果设置为1则不会马上开始播放流。默认值为0。

rtsp_transport

设置RTSP传输协议。

接受以下值:

udp

使用UDP作为下层传输协议。

tcp

使用TCP(与RTSP控制通道内嵌)作为下层传输协议。

udp_multicast

使用UDP组播作为下层传输协议。

http

使用HTTP隧道作为下层传输协议,该协议用于通过代理。

https

使用HTTPs隧道作为下层传输协议,该协议用于通过代理并因安全考虑被广泛使用。

可以指定多个低层传输协议。在这种情况下,将依次尝试它们(如果一个设置失败,则尝试下一个)。对于复用器,仅支持“tcp” 和 “udp” 选项。

rtsp_flags

设置 RTSP 标志。

接受以下值:

filter_src

仅接受来自协商的对等方地址和端口的数据包。

listen

充当服务器,监听传入的连接。

prefer_tcp

如果 TCP 可用作为 RTSP RTP 传输协议,则优先尝试 TCP 进行 RTP 传输。

satip_raw

导出原始 MPEG-TS 流而不是进行解复用。该标志将仅输出原始流,并保留原始的 PAT/PMT/PIDs。

默认值为“none’.

allowed_media_types

设置要从服务器接受的媒体类型。

接受以下标志:

video
audio
data
subtitle

默认情况下接受所有媒体类型。

min_port

设置最小本地 UDP 端口。默认值为 5000。

max_port

设置最大本地 UDP 端口。默认值为 65000。

listen_timeout

设置建立初始连接的最大超时时间(以秒为单位)。设置listen_timeout> 0 设置rtsp_flags为“listen”。默认值为 -1,这表示当“listen”模式设置时为无限超时。

reorder_queue_size

设置用于处理重新排序数据包的缓冲数据包数量。

timeout

设置套接字 TCP I/O 超时时间(以微秒为单位)。

user_agent

覆盖 User-Agent 头。如果未指定,默认使用 libavformat 标识字符串。

buffer_size

设置最大套接字缓冲区大小(以字节为单位)。

当通过 UDP 接收数据时,解复用器试图对接收到的包进行重新排序(因为它们可能会无序到达,或者数据包可能完全丢失)。可以通过将最大解复用延迟设置为零来禁用此功能(通过 AVFormatContext 的max_delay字段)。

观看具有ffplay的多码率 Real-RTSP 流时,可以通过-vst n-ast n分别为视频和音频选择显示的流,并可以通过按va.

动态切换。

以下示例均使用ffplayffmpeg工具。

  • 通过 UDP 观看流,最大重新排序延迟为 0.5 秒:
    ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
    
  • 通过 HTTP 隧道观看流:
    ffplay -rtsp_transport http rtsp://server/video.mp4
    
  • 实时向 RTSP 服务器发送流,供其他人观看:
    ffmpeg -re -i 输入 -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • 实时接收流:
    ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp 输出
    

3.35 sap

会话公告协议 (RFC 2974)。这在技术上不是 libavformat 的协议处理程序,而是复用器和解复用器。它用于 RTP 流的信令,定期在单独的端口上宣布流的 SDP。

3.35.1 复用器

给复用器提供 SAP URL 的语法为:

sap://目标地址[:端口][?选项]

RTP 数据包发送到目标地址的端口端口,如果未指定端口,则发送到默认端口 5004。选项是一个&-分隔的列表。支持以下选项:

announce_addr=地址

指定发送公告的目标 IP 地址。如果省略,公告将发送到通常使用的 SAP 公告组播地址 224.2.127.254 (sap.mcast.net),或如果目标地址是 IPv6 地址,则发送到 ff0e::2:7ffe。

announce_port=端口

指定发送公告的端口,默认值为 9875(如果未指定)。

ttl=ttl

指定公告和 RTP 数据包的生存时间值,默认值为 255。

same_port=0|1

如果设置为 1,则将所有 RTP 流发送到相同的端口对。如果为 0(默认值),则所有流都发送到唯一的端口,每个流的端口比前一个流的端口高 2 个数字。VLC/Live555 需要将此值设置为 1,以能够接收流。用于接收的 libavformat 中的 RTP 堆栈需要所有流发送到唯一端口。

以下是示例命令行。

通过本地子网广播流,可在 VLC 中观看:

ffmpeg -re -i 输入 -f sap sap://224.0.0.255?same_port=1

类似地,可在ffplay:

ffmpeg -re -i 输入 -f sap sap://224.0.0.255

中观看。ffplay通过 IPv6 观看:

ffmpeg -re -i 输入 -f sap sap://[ff0e::1:2:3:4]

3.35.2 解复用器

给解复用器提供 SAP URL 的语法为:

sap://[地址][:端口]

地址是监听公告的组播地址,如果省略,默认使用 224.2.127.254 (sap.mcast.net)。端口是监听的端口,默认值为 9875(如果省略)。

解复用器监听给定地址和端口上的公告。一旦接收到公告,它尝试接收该特定流。

以下是示例命令行。

在普通 SAP 组播地址上播放第一个公告的流:

ffplay sap://

在默认 IPv6 SAP 组播地址上播放第一个公告的流:

ffplay sap://[ff0e::2:7ffe]

3.36 sctp

流控制传输协议。

接受的 URL 语法为:

sctp://主机地址:端口[?选项]

协议接受以下选项:

listen

如果设置任何值,则监听传入连接。默认情况下进行外部连接。

max_streams

设置最大流数量。默认情况下没有限制。

3.37 srt

通过 libsrt 使用 Haivision 安全可靠传输协议。

支持的 SRT URL 语法为:

srt://主机名:端口[?选项]

选项包含 & 分隔的选项列表,格式为=.

选项 srt://主机名:端口

选项包含“- 选项列表。

此协议接受以下选项。

connect_timeout=毫秒

连接超时;默认连接超时为 3 秒,SRT 无法连接 RTT > 1500 毫秒(2 次握手交换)。此选项适用于调用方和会合连接模式。对于会合模式,连接超时是设置值的 10 倍(可用作早期版本连接问题的解决方法)。

ffs=字节

飞行标志大小(窗口大小),以字节为单位。FFS 实际上是一个内部参数,你应该将其设置为不小于recv_buffer_sizemss。默认值相对较大,因此除非设置非常大的接收缓冲区,否则无需更改该选项。默认值为 25600。

inputbw=字节/秒

发送器标称输入速率,以字节每秒为单位。与oheadbw配合使用,当maxbw设置为相对(0)时,计算与主媒体流一起发送的恢复数据包的最大发送速率:inputbw * (100 + oheadbw) / 100 如果inputbw未设置,而maxbw设置为相对(0),实际输入速率由库内部评估。默认值为 0。

iptos=tos

IP 服务类型。仅适用于发送方。默认值为 0xB8。

ipttl=ttl

IP 生存时间。仅适用于发送方。默认值为 64。

latency=微秒

基于时间戳的数据包交付延迟。用于吸收错过的数据包重传突发次数。此标志设置了rcvlatencypeerlatency相同值。请注意,在版本 1.3.0 之前,这是设置延迟的唯一标志,但它有效地相当于设置为peerlatency,当侧面为发送方时,设置为rcvlatency当接收方时,且双向流发送不受支持。

listen_timeout=微秒

设置套接字侦听超时时间。

maxbw=字节/秒

最大发送带宽,以字节每秒为单位。-1 无限(CSRTCC 限制为 30mbps) 0 相对于输入速率(参见inputbw) >0 绝对限制值 默认值为 0(相对)

mode=调用方|监听者|会合

连接模式。caller打开客户端连接。listener启动服务器监听传入连接。rendezvous使用会合连接模式。默认值为调用者模式。

mss=字节

最大段大小,以字节为单位。用于缓冲区分配和速率计算的假设填满的包计数。使用的最小 MSS 在对等体之间是默认值,通常为 1500。最大 UDP 数据包的大小,除非你有某些不寻常的专用网络设置,否则只能减少构建。默认值为 1500。

nakreport=1|0

如果设置为 1,接收方将周期性发送 'UMSG_LOSSREPORT' 消息,直到丢失的数据包被重传或者已故意丢弃。默认值为 1。

oheadbw=百分比

超过输入速率的恢复带宽开销,以百分比为单位。查看inputbw。默认值为 25%。

passphrase=字符串

HaiCrypt 加密/解密密码字符串,其长度范围为 10 到 79 个字符。密码是发送方和接收方之间的共享秘密。它用于生成密钥加密密钥,使用 PBKDF2(基于密码的密钥派生函数)。它仅在pbkeylen非零时使用。在接收方只有在接收到的数据被加密时使用。配置的密码无法恢复(仅写)。

enforced_encryption=1|0

如果为 true,则连接双方必须设置相同的密码(包括为空,即没有加密)。如果密码不匹配或者只有一侧未加密,连接将被拒绝。默认值为 true。

kmrefreshrate=

发送指定数量的自增包后,切换到新的加密密钥。默认值为 -1。-1 表示自动(在 srt 库中为 0x1000000)。此选项的范围为整数在 0 到INT_MAX.

kmpreannounce=

从发送新的加密密钥到切换发生之间的间隔。这些阶段后间隔也适用于随后的旧密钥退役。此外值定义为新更改周期中自动 (0x1000 srt 库中为范围内的整数,包括 0 到INT_MAX.

snddropdelay=微秒

发送方放弃数据包之前的额外延迟。此延迟会添加到默认的放弃延迟值。

特殊值 -1:发送方完全不放弃数据包。

payload_size=字节

设置传递给发送功能的实时模式中单次调用的最大声明数据包大小。使用 0 如果此值没有设置(文件模式默认)。默认值 -1(自动),通常适合 MPEG-TS;如果你打算使用 SRT 发送任何其他类型负载,比如包装一个活动流在非常小显然。这则支持更大的最大帧大小,输入不大于 1456 字节。

pkt_size=字节

别名为 'payload_size’.

peerlatency=微秒

由发送设备设置为接收设备的最低值(如rcvlatency)。

pbkeylen=字节

发送设备加密密钥长度,以字节为单位。只能设置为 0,16,24 或 32。如果非零,启用发送程序加密。接收设备无需配置(设置为 0),密钥大小会在 haiCrypt 拒绝握手获取。默认值为 0。

rcvlatency=微秒

指定从数据包被发送到传递给接收应用程序时间间隔的时间间隔。此缓冲区时间必须足够用来包括发送,中意外延长 RTT交换,以及重新丢失的 UDP 重传。实际延迟会是输入于根据应用方已配置为设置peerlatency由对等体方设置。latency.

recv_buffer_size=字节

设置 UDP 写缓冲区大小,以字节为单位。

send_buffer_size=字节

调整 UDP 录写阻缓区行字节了改写。

timeout=微秒。数据传输在 UDP以字节单位向外可以设置。

Set raise error timeouts for read, write and connect operations. Note that the SRT library has internal timeouts which can be controlled separately, the value set here is only a cap on those.

tlpktdrop=1|0

太晚了包消失收协议应用载时间。 带接发送者由地驱观察恢复没机会则消息自己机制支持调试。假客户端主要时间失败也会消息调到传送确认;

sndbuf=字节

设置发送缓冲区大小,以字节为单位。

rcvbuf=字节

设置接收缓冲区大小,以字节为单位。

接收缓冲区不得大于ffs.

lossmaxttl=数据包

Reorder Tolerance可以增长到的值。当Reorder Tolerance > 0时,数据包丢失报告会被延迟,直到接收到该数量的数据包。每次收到“延迟”的数据包时,Reorder Tolerance会增加,但不是由于重传造成的(即当UDP数据包顺序紊乱时),并且以最新序列和该数据包序列之间的差值增加,但不会超过此选项的值。默认值为0,表示关闭该机制,并在遭遇序列“缺口”时立即发送丢失报告。

minversion

对端需要的最低SRT版本。如果对端不满足最低版本要求,则连接会被拒绝。

版本格式为十六进制0xXXYYZZ,表示x.y.z的可读形式。

streamid=字符串

连接前可以在套接字上设置的字符串,长度限制为512字符。监听方可以从通过srt_accept返回的套接字中检索此流ID,与设置了流ID的套接字连接。SRT不会对字符串内容进行任何特殊解释。在Rendezvous连接中,此选项没有意义;结果可能是一个方会覆盖另一方的值,具体哪一方胜出取决于情况。

srt_streamid=字符串

streamid’的别名,以避免与ffmpeg命令行选项冲突。

smoother=实时|文件

该套接字用于传输的Smoother类型,负责传输和拥塞控制。如果连接的双方Smoother类型不完全相同,则连接会被拒绝。

messageapi=1|0

启用时,此套接字使用消息API,否则使用缓冲API。请注意,在实时模式下(请参阅transtype),仅有消息API可用。在文件模式下,可以选择以下两种模式之一:

流API(默认,当此选项为false时)。在此模式下,可以使用单次发送指令发送任意数量的数据,或者甚至使用专门的函数直接从文件读取。内部设施将负责速度和拥塞控制。当接收时,也可以接收任意数量的数据,未提取的数据将等待下一次调用。在流模式下,数据块之间没有边界。

消息API。在此模式下,单次发送指令仅传递具有边界的一段数据(消息)。与实时模式不同,此消息可能跨多个UDP数据包,仅限制于发送缓冲区内包含的消息总大小。接收方应使用足够大的缓冲区接收消息,否认消息不会放弃。消息不完整时(未接收到所有数据包或有包丢失),不会放弃。

transtype=实时|文件

设置套接字的传输类型,特别是设置此选项会将多个其他参数设置为适用于特定传输类型的默认值。

实时:设置为实时传输模式。在此模式下,应仅通过单次发送指令发送能够适用于一个UDP数据包的数据量,并限制在默认值payload_size(在此模式下默认值为1316)。此模式下没有速度控制,仅有带宽控制(如果已配置)避免超出带宽。

文件:设置为非实时传输模式。参见messageapi以获得进一步解释。

linger=

套接字关闭时等待未发送数据的秒数。默认值为-1。-1表示自动(实时模式下为0秒,文件模式下为180秒)。此选项的范围为0-INT_MAX.

tsbpd=1|0

启用时,使用基于时间戳的数据包传输模式。默认行为取决于传输类型:实时模式下启用,文件模式下禁用。

有关更多信息,请参阅:https://github.com/Haivision/srt.

3.38 srtp

安全实时传输协议。

接受的选项包括:

srtp_in_suite
srtp_out_suite

选择输入和输出编码套件。

支持的值:

AES_CM_128_HMAC_SHA1_80
SRTP_AES128_CM_HMAC_SHA1_80
AES_CM_128_HMAC_SHA1_32
SRTP_AES128_CM_HMAC_SHA1_32
srtp_in_params
srtp_out_params

设置输入和输出编码参数,通过一个base64编码的二进制块表示。此二进制块的前16字节用作主密钥,接下来的14字节用作主盐。

3.39 subfile

虚拟提取文件或其他流的片段。底层流必须支持寻址。

接受的选项:

start

提取片段的起始偏移量,单位为字节。

end

提取片段的结束偏移量,单位为字节。如果设置为0,则提取到文件末尾。

示例:

从DVD VOB文件中提取一个章节(外部获取的起始和结束扇区并乘以2048):

subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB

直接从TAR归档文件中播放AVI文件:

subfile,,start,183241728,end,366490624,,:archive.tar

从起始偏移量至结束播放MPEG-TS文件:

subfile,,start,32815239,end,0,,:video.ts

3.40 tee

将输出写入多个协议。各单独的输出通过“|”分隔。

tee:file://path/to/local/this.avi|file://path/to/local/that.avi

3.41 tcp

传输控制协议。

TCP URL的必需语法为:

tcp://主机名:端口[?选项]

选项包含形式为=.

的&分隔选项列表。

listen=2|1|0

等待来连接。0表示禁用监听,1表示启用单客户端模式的监听,2表示启用多客户端模式的监听。默认值为0。

local_addr=地址

用于TCP套接字连接的网络接口的本地IP地址。

local_port=端口

用于TCP套接字连接的本地端口。

timeout=微秒

设置错误超时时间,单位为微秒。

此选项仅在读取模式下相关:如果在指定时间间隔内没有数据到达,则抛出错误。

listen_timeout=毫秒

设置监听超时,单位为毫秒。

recv_buffer_size=字节

设置接收缓冲区大小,以字节为单位。

send_buffer_size=字节

设置发送缓冲区大小,以字节为单位。

tcp_nodelay=1|0

设置TCP_NODELAY以禁用Nagle算法。默认值为0。

备注:当前写入套接字尚未优化以减少系统调用,并降低了TCP_NODELAY的效率/效果。

tcp_mss=字节

设置用于发送的TCP数据包的最大段大小,以字节为单位。

以下示例显示如何设置使用ffmpeg的监听TCP连接,然后通过ffplay:

ffmpeg -i 访问。 -f 格式 tcp://主机名:端口?listen
ffplay tcp://主机名:端口

3.42 tls

传输层安全(TLS)/安全套接字层(SSL)

TLS/SSL URL的必需语法为:

tls://主机名:端口[?选项]

以下参数可通过命令行选项设置(或通过代码设置,使用AVOption):

ca_file, cafile=文件名

包含证书授权(CA)根证书的文件,视为可信。如果所链接的TLS库包含默认值,则可能无需指定即可使验证正常工作,但并非所有库和设置都内置默认值。文件必须为OpenSSL PEM格式。

tls_verify=1|0

如果启用,尝试验证与我们通信的对端。请注意,如果使用OpenSSL,这目前仅确保对端证书由CA数据库中的根证书之一签署,但不会验证证书是否实际匹配我们试图连接的主机名。(使用其他后端时,主机名也会得到验证。)

默认禁用,因为在许多情况下需要调用方提供CA数据库。

cert_file, cert=文件名

包含证书的文件,用于与对端的握手。(作为服务器时,在监听模式下,这通常是对端需要的,而客户端证书仅在某些设置中强制要求。)

key_file, key=文件名

包含证书的私钥的文件。

listen=1|0

启用时,在提供的端口上监听连接,并在握手中承担服务器角色而非客户端角色。

http_proxy

HTTP代理用于隧道传输,例如http://example.com:1234。 代理必须支持CONNECT方法。

示例命令行:

创建一个TLS/SSL服务器,用于提供输入流。

ffmpeg -i 输入 -f 格式 tls://主机名:端口?listen&cert=server.crt&key=server.key

使用ffplay:

ffplay tls://从TLS/SSL服务器回放流。:端口

3.43 udp

用户数据报协议。

UDP URL的必需语法为:

udp://主机名:端口[?选项]

选项包含形式为=.

的&分隔选项列表。fifo_sizeoverrun_nonfatal选项与此缓冲区相关。

The list of supported options follows.

buffer_size=大小

设置UDP最大套接字缓冲区大小,以字节为单位。这用于设置接收或发送缓冲区大小,取决于套接字的用途。默认值为输出32 KB,输入384 KB。参见fifo_size.

bitrate=比特率

如设置为非零,输出将具有指定的恒定比特率,如果输入有足够的数据包支持此比特率。

burst_bits=

使用比特率时,这指定了数据包突发中的最大位数。

localport=端口

覆写绑定的本地UDP端口。

localaddr=地址

用于发送数据包或加入组播组的网络接口的本地IP地址。

pkt_size=大小

设置UDP数据包的大小,以字节为单位。

reuse=1|0

明确允许或禁止重用UDP套接字。

ttl=生存时间

设置时间至到期值(仅用于组播)。

connect=1|0

使用connect()初始化UDP套接字。在这种情况下,目的地址无法通过 ff_udp_set_remote_url 更改。 如果起始时目的地址未知,此选项也可以在 ff_udp_set_remote_url 中指定。 这允许通过getsockname找到数据包的源地址,并在收到“目的不可达”时,使写操作返回 AVERROR(ECONNREFUSED)。 对于接收,这的好处是仅接收指定对端地址/端口的数据包。

sources=地址[,地址]

仅接收指定地址发送的数据包。在组播时,也仅订阅这些地址发送的组播流量。

block=地址[,地址]

忽略指定地址发送的数据包。在组播时,也排除组播订阅中的源地址。

fifo_size=单位

设置UDP接收循环缓冲区大小,表示为一个大小为188字节的数据包的数量。如果未指定,默认为7*4096。

overrun_nonfatal=1|0

在UDP接收循环缓冲区超时情况下存活。默认值为0。

timeout=微秒

设置错误超时时间,单位为微秒。

此选项仅在读取模式相关:如果在指定时间间隔内没有数据到达,则抛出错误。

broadcast=1|0

明确允许或不允许 UDP 广播。

请注意,在具有广播风暴保护的网络中,广播可能无法正常工作。

3.43.1 示例

  • 使用ffmpeg通过 UDP 向远程端点流式传输:
    ffmpeg -i 输入 -f 格式 udp://主机名:端口
    
  • 使用ffmpeg通过 UDP 以 mpegts 格式流式传输,使用 188 大小的 UDP 数据包,并使用大输入缓冲区:
    ffmpeg -i 输入 -f mpegts udp://主机名:端口?pkt_size=188&buffer_size=65535
    
  • 使用ffmpeg从远程端点通过 UDP 接收:
    ffmpeg -i udp://[组播地址]:端口 ...
    

3.44 unix

Unix 本地套接字

Unix 套接字 URL 的必需语法是:

unix://文件路径

以下参数可以通过命令行选项设置 (或通过代码中的AVOption进行设置):

timeout

超时,以毫秒为单位。

listen

以监听模式创建 Unix 套接字。

3.45 zmq

使用 libzmq 库的 ZeroMQ 异步消息传递。

该库支持向多个客户端进行单播流传输,而无需依赖外部服务器。

流式传输或连接流所需的语法是:

zmq:tcp://ip-address:port

示例: 在端口 5555 上创建一个本地主机流:

ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555

多个客户端可以使用以下方式连接到流:

ffplay zmq:tcp://127.0.0.1:5555

向多个客户端进行流传输通过 ZeroMQ 的发布订阅模式实现。 服务器端绑定到端口并发布数据。客户端通过 IP 地址/端口连接到服务器并订阅流。 服务器和客户端启动的顺序通常无关紧要。

ffmpeg 必须使用 –enable-libzmq 选项编译以支持此协议。

选项可以在ffmpeg/ffplay命令行中设置。支持以下选项:

pkt_size

强制设置发送/接收数据的最大数据包大小。默认值为 131,072 字节。 在服务器端,它设置通过 ZeroMQ 发送数据包的最大大小。在客户端,它设置用于接收数据包的内部缓冲区大小。 请注意,客户端上的 pkt_size 应等于或大于服务器上的 pkt_size。 否则,接收到的消息可能会被截断,导致解码错误。

4 参见

ffmpeg, ffplay, ffprobe, libavformat

5 作者

FFmpeg 开发者。

有关作者信息的详细内容,请查看项目的 Git 历史 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源代码目录中输入命令git log或浏览在线存储库:https://git.ffmpeg.org/ffmpeg.

特定组件的维护者列在源代码树中的文件中MAINTAINERS

本文档是使用以下工具生成的makeinfo.

托管由以下机构提供:telepoint.bg