FFPlay专辑

FFplay文档解读-11-协议一

2018-11-15  本文已影响19人  张芳涛

前言

Github地址:Github
简书地址:简书
专辑地址:FFplay专辑

16.协议

协议是FFmpeg中配置的元素,用于访问需要特定协议的资源。

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

您可以使用configure选项-disable-protocols禁用所有协议,并使用选项-enable-protocol = PROTOCOL选择性地启用协议,或者可以使用选项-disable-protocol =禁用特定协议 协议。

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

所有协议都接受以下选项:

rw_timeout

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

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

16.1 async

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

在后台线程中填充数据,以将I / O操作与demux线程分离。

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

16.2 bluray

阅读BluRay播放列表。

相关选项如下:

angle

蓝光角度

chapter

开始章节(1 ... N)

playlist

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

例子:

读取BluRay中安装到/mnt/bluray的最长播放列表:

bluray:/mnt/bluray

BluRay读取安装到/mnt/bluray的播放列表4的角度2,从第2章开始:

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

16.3 cache

输入流的缓存包装器。

将输入流缓存到临时文件。 它为直播带来了搜索能力。

cache:URL

16.4 concat

物理级联协议。

按顺序从许多资源中读取和搜索,就像它们是一个独特的资源一样。

此协议接受的URL具有以下语法:

concat:URL1|URL2|...|URLN

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

例如,要使用ffplay读取文件序列split1.mpegsplit2.mpeg','split3.mpeg,请使用以下命令:

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

请注意,可能需要转义字符| 这是许多shells特殊的地方。

16.5 crypto

AES加密的流读取协议。

接受的选项是:

key 

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

iv

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

接受的网址格式:

crypto:URL
crypto+URL

16.6 data

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

例如,要转换与ffmpeg内联给出的GIF文件:

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

16.7 file

文件访问协议。

读取或写入文件。

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

file:filename

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

将假定没有协议前缀的URL是文件URL。 根据构建,看起来像开头带有驱动器号的Windows路径的URL也将被假定为文件URL(对于类Unix系统的构建通常不是这种情况)。

例如,使用ffmpeg从文件input.mpeg读取命令时使用命令:

ffmpeg -i file:input.mpeg output.mpeg

该协议接受以下选项:

truncate

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

blocksize

设置I/O操作最大块大小,以字节为单位。 默认值为INT_MAX,这导致不限制请求的块大小。 将此值设置得相当低可以改善用户终止请求响应时间,这对于慢速介质上的文件很有用。

16.8 ftp

FTP(文件传输协议)。

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

需要以下语法。

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

该协议接受以下选项。

timeout

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

ftp-anonymous-password

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

ftp-write-seekable

控制编码期间连接的可查找性。如果设置为1,则资源应该是可搜索的,如果设置为0,则认为该资源不可搜索。默认值为0

注意:协议可以用作输出,但建议不要这样做,除非特别小心(测试,自定义服务器配置等)。在搜索操作期间,不同的FTP服务器以不同的方式运行。由于服务器的限制,ff *工具可能会产生不完整的内容。

该协议接受以下选项:

follow

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

16.9 gopher

Gopher协议。

16.10 hls

Apple HTTP Live Streaming兼容的分段流读作统一的流。 描述段的M3U8播放列表可以是使用标准文件协议访问的远程HTTP资源或本地文件。 通过在hls URI方案名称之后指定+ proto来声明嵌套协议,其中protofilehttp

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

不鼓励使用此协议 - hls解复用器也应该正常工作(如果没有,请报告问题)并且更完整。 要使用hls demuxer,只需使用m3u8文件的直接URL即可。

16.11 http

HTTP(超文本传输​​协议)。

该协议接受以下选项:

seekable

控制连接的可寻找性。如果设置为1,则资源应该是可搜索的,如果设置为0,则认为不可搜索,如果设置为-1,如果它是可搜索的,它将尝试自动检测。默认值为-1

chunked_post

如果设置为1,则对帖子使用chunked Transfer-Encoding,默认值为1

content_type

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

HTTP_PROXY

设置HTTP代理以通过例如管道传输http://example.com:1234

headers

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

multiple_requests

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

post_data

设置自定义HTTP发布数据。

referer

设置Referer标头。在HTTP请求中包含Referer:URL标头。

user_agent

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

user-agent

这是一个已弃用的选项,您可以使用user_agent代替它。

timeout

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

reconnect_at_eof

如果设置,则将eof视为错误并导致重新连接,这对于实时/无限流非常有用。

reconnect_streamed

如果设置,则甚至流式/非可搜索流将在错误时重新连接。

reconnect_delay_max

设置放弃重新连接的最大延迟(以秒为单位)

MIME_TYPE

导出MIME类型。

http_version

导出HTTP响应版本号。通常为1.01.1

icy

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

icy_metadata_headers

如果服务器支持ICY元数据,则它包含ICY特定的HTTP回复标头,由换行符分隔。

icy_metadata_packet

如果服务器支持ICY元数据,并且icy设置为1,则它包含服务器发送的最后一个非空元数据包。应该对对流中间元数据更新感兴趣的应用程序定期轮询它。

cookies

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

offset

设置初始字节偏移量。

end_offset

尝试将请求限制为此偏移量之前的字节。

method

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

当用作服务器选项时,它设置将从客户端预期的HTTP方法。如果预期和接收的HTTP方法不匹配,则客户端将收到错误请求响应。取消设置时,不会立即检查HTTP方法。这将在未来被自动检测取代。

listen

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

# Server side (sending):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://server:port

# Client side (receiving):
ffmpeg -i http://server:port -c copy somefile.ogg

# Client can also be done with wget:
wget http://server:port -O somefile.ogg

# Server side (receiving):
ffmpeg -listen 1 -i http://server:port -c copy somefile.ogg

# Client side (sending):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://server:port

# Client can also be done with wget:
wget --post-file=somefile.ogg http://server:port

16.11.1 HTTP Cookies

除非将cookie值与请求一起传入,否则将拒绝某些HTTP请求。 cookies选项允许指定这些cookie。 至少,每个cookie必须指定一个值以及路径和域。 与域和路径匹配的HTTP请求将自动在HTTP Cookie标头字段中包含cookie值。 多个cookie可以通过换行符分隔。

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

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

16.12 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方法。

icecast://[username[:password]@]server:port/mountpoint

16.13 mmst

TCP上的MMS(Microsoft Media Server)协议。

16.14 mmsh

通过HTTPMMS(Microsoft Media Server)协议。

所需的语法是:

mmsh://server[:port][/app][/playpath]

16.15 md5

MD5输出协议。

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

一些例子如下:

# 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输出协议而失败。

16.16 pipe

UNIX管道访问协议。

UNIX管道读取和写入。

接受的语法是:

pipe:[number]

number是与管道的文件描述符相对应的数字(例如,对于stdin0,对于stdout1,对于stderr2)。 如果未指定number,则默认情况下stdout文件描述符将用于写入,stdin用于读取。

例如,使用ffmpegstdin读取:

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

ffmpeg写入stdout

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,这导致不限制请求的块大小。 将此值设置得相当低可以改善用户终止请求响应时间,这在数据传输缓慢时很有用。

请注意,某些格式(通常为MOV)要求输出协议是可搜索的,因此它们将使用管道输出协议失败。

16.17 prompeg

Pro-MPEG操作规范#32FEC协议。

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

此协议必须与rtp_mpegts muxerrtp协议一起使用。

语法如下:

-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port

目标UDP端口对于列FEC流是端口+ 2,对于行FEC流是端口+4

该协议接受以下选项:

l=n

列数(4-20,LxD <= 100

d=n

行数(4-20,LxD <= 100

用法示例:

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://hostname:port
上一篇下一篇

猜你喜欢

热点阅读