分类: 其他平台
2015-07-20 08:48:29
FFmpeg协议配置元素,用于访问资源时要求特定的协议。
默认编译时会自动支持所有可用协议。你可以在编译脚本中添加 "–list-protocols"选项来了解有哪些协议被支持。
你也可以在编译时通过 "–disable-protocols"禁止所有的协议支持,然后通过 "–enable-protocol=PROTOCOL"来启用个别协议,或者在默认基础上通过 "–disable-protocol=PROTOCOL"关闭个别协议支持。
在ff*工具集中,"-protocols"选项可以了解编译支持了的协议
当前有效协议介绍如下。
读取BluRay(蓝光)播放列表,其接受如下选项:
angle
BluRay 角度/方向
chapter
开始章(1...N)
playlist
在(BDMV/PLAYLIST/?????.mpls) 读取播放列表
例如:
从加载映射目录/mnt/bluray 读取很长的蓝光播放列表
bluray:/mnt/bluray
从加载映射目录/mnt/bluray 读取蓝光播放列表,从章2(chapter 2
)开始,读取playlist 4
的angle 2
-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
对输入流的缓冲封装
缓存输入流到临时文件,以提供对在线流的搜寻/定位支持。
cache:URL
物理连接协议
从许多资源(资源序列,把它们当作一种独特的资源)中读取和搜索定位
这个协议按如下语法接受URL:
concat:URL1|URL2|...|URLN
这里的URL1、URL2...URLN都是需要连接起来的资源url,每个可能是一个不同的协议
例如,需要利用ffplay
播放一个序列的资源(包含split1.mpeg,split2.mpeg,split3.mpeg):
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
注意在大多数shell
中可能你需要对"|"进行转义
AES加密(AES-encrypted)流读取协议,其接受如下选项:
允许如下的URL格式:
在URI中的行内数据,参考
文件访问协议,实现对文件的读写。
文件协议的URL格式为:
这里的
如果在URL中没有前导协议头则会作为一个文件URL。根据编译的版本,URL可以是Windows下的包含盘符的文件URL(通常在类Unix系统上不支持)
例如利用
这个协议支持下面的选项:
truncate
如果设置为1,则如果文件存在,则截断文件的写入(进行覆盖),如果设置为0则文件存在时不会被删除(覆盖掉),默认为1
blocksize
设置可选的I/O最大块尺寸,单位bytes。默认值是
FTP(File Transfer Protocol——文件传输)协议
通过FTP协议进行远程读写
请求语法是:
这个协议接受如下选项:
timeout
以毫秒(microseconds)为单位,设置socket I/O操作超时时间。默认值为
ftp-anonymous-password
当作为
ftp-write-seekable
控制持续编码时连接的可搜索性。如果设置为1表示可以搜索,如果设置为0则不可搜索,默认为0
注意协议可以用于输出,但通常不建议这样使用,除非特殊任务要求(测试时、定制的服务器配置等等)。不同的FTP服务提供不同的持续定位处理。ff*工具对它们的支持是不完整的。
把Apple的HTTP直播分段流作为一个统一的进行读取。描述分段的
使用这个协议将自动采用
HTTP (Hyper Text Transfer Protocol)协议
协议支持如下选项:
seekable
控制连接是否可搜索,如果设置为1表示资源支持搜索,否则为0.如果设置为-1则尝试自动检测是否支持搜索。默认为-1
chunked_post
如果设置为1则启用分块传输编码,默认为1
content_type
设置一个特定内容类型的消息。
headers
设置定制的
multiple_requests
为1表示使用持久连接,默认为0
post_data
设置定制的
user_agent
覆盖掉用户代理(客户端类型)头。如果没有指定,则采用在
timeout
以毫秒(microseconds)为单位设置I/O操作超时时间。默认为-1,表示没有指定。
mime_type
导出MIME类型
icy
如果设置为1将从服务器请求ICY (SHOUTcast)元数据。如果服务器支持,将通过
icy_metadata_headers
如果服务器支持ICY元数据,它将包含由换行符分隔(即每行1个)的ICY-specific HTTP 应答头
icy_metadata_packet
如果服务器支持ICY元数据,且
cookies
设置未来请求的cookie。 格式为
offset
设置初始字节偏移量
end_offset
尝试偏移限定,单位字节
method
当用在客户端选项时,它设置请求的HTTP方法。
当用在服务器端选项时,它设定(预计)从客户机获要用的方法。如果预期和收到的HTTP方法都不能与客户端匹配将是一个很糟糕的问题。当前对是否设置本方式不检测,以后会自动检测。
listen
如果设置为1,将使用实验性质的HTTP服务。它可以用于在输出中指定数据(例如)——对输出文件,或者通过
一些HTTP请求将被拒绝,除非cookie值按要求进行传递。
下面的请求语法就是播放一个流时指定了cookie:
Icecast (stream to Icecast servers) 协议
协议支持如下的选项:
ice_genre
设置流样式
ice_name
设置流名字
ice_description
设置流说明
ice_url
设置流web URL
ice_public
为1表示流可以被公开,否则为0表示不能公开,默认为0(不公开)
user_agent
覆盖用户代理头。如果没有指定则 "Lavf/" 被使用
password
设置Icecast挂载password.
content_type
设置内容类型。它对audio/mpeg 必须设置为不同
legacy_icecast
这将使得支持 Icecast的版本< 2.4.0,不过源方法将不再支持HTTP PUT方法。
协议URL指定方法:
基于TCP的MMS (Microsoft Media Server)协议.
基于HTTP的MMS (Microsoft Media Server)协议
请求语法:
MD5输出协议
计算要写数据的MD5,它可以写入文件或者标准输出设备上(如果没有指定输出文件),可以用来测试混合器的输出而无需真实写入文件。
下面是一些例子:
把编码成avi文件对应的md5写入output.avi.md5
ffmpeg -i input.flv -f avi -y md5:output.avi.md5
把编码成avi文件对应的md5输出到标准输出设备上
ffmpeg -i input.flv -f avi -y md5:
注意一些格式(例如MOV)要求输出协议是可以搜索/检索(seekable)的,这时MD5输出协议将不被支持(对于这样的MD5计算要求,只能是先生成文件,再利用其它工具对文件计算MD5)。
UNIX先入先出访问协议(管道)
通过UNIX pipe读写
语法为:
这里
例如 ffmpeg从stdin读取
又如写入标准输出:
它等效于
协议支持如下选项:
blocksize
设置I/O操作最大块尺寸,单位byte(字节)。默认是
注意一些格式(例如MOV)要求输出协议是可以搜索/检索(seekable)的,这时pipe输出协议将不被支持
rtmp(Real-Time Messaging Protocol.)
RTMP被用通过TCP/IP网络流式处理多媒体内容
请求语法:
其中各个参数为:
username
可选的用户名,一般在公开发布时
passwrod
可选的密码,一般在公开发布时
server
RTMP服务器地址
port
TCP端口号,默认1935
app
它是根据应用程序的名称来访问,它通常对应于应用程序在RTMP服务器上的安装路径(例如
playpath
是通过
listen
作为服务器,侦听传入的连接
timeout
设置传入连接最大等待时间,其间一直侦听
额外的,下面的参数可以通过命令行(或者在代码中通过
rtmp_app
连接到RTMP服务的程序名。它可以用于覆盖URI中对应部分
rtmp_buffer
设置客户端缓冲时间,单位milliseconds,默认3000.
rtmp_conn
额外的AMF连接参数,参数值是字符串,从中解析出AMF信息。例如: B:1 S:authMe O:1 NN:code:1.23
NS:flag:ok O:0
.每个值有一个单字符前导(B表示布尔值,N表示数字值,S表示字符串,O表示对象,Z表示null),后面加冒号":",对于布尔值,范围为0或者1分
别对应
rtmp_flashver
SWF播放器插件版本,默认 LNX 9,0,124,2. (当发布,默认为FMLE/3.0 (兼容与 ).)
rtmp_flush_interval
在同一请求的数据包刷新数量(只RTMPT)。默认值是10。
rtmp_live
指示是一个直播流。直播流不能重放和搜索。默认值为
rtmp_pageurl
嵌入在URL中的媒体页面。默认没有值被发送
rtmp_playpath
要播放/发布的流的ID。这个值将覆盖URI中的对应部分
rtmp_subscribe
直接订阅的直播流名字,默认没有值被发送。这个值仅在被指定,而且
rtmp_swfhash
解压SWF文件的SHA256(32 bytes).
rtmp_swfsize
解压SWF文件的尺寸,被
rtmp_swfurl
对应媒体SWF播放器的URL。默认没有值被发送
rtmp_swfverify
播放对应swf文件URL,会自动计算hash/size
rtmp_tcurl
目标流URL,默认为
ffplay rtmp://myserver/vod/sample
发布一个资源到密码保护的服务器上
ffmpeg -re -i -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/ 注这里最终发布的URL为
加密的Real-Time Messaging Protocol.
通过提供的标准加密原语加密流式多媒体内容的RTMPE。由Diffie-Hellman 和 HMACSHA256作为密钥交换,产生一对RC4密钥
基于安全SSL的rtmp
通过SSL通道传输的rtmp
基于HTTP的Rtmp
由HTTP通道承载的RTMP,这样可以突破很多防火墙限制。
加密RTMP,且通过http传输
在HTTP通道承载下,进行加密rtmp的传输。
通过HTTPS传输的rtmp。
通过HTTPS进行传输的rtmp,它可以突破很多防火墙并提供安全的连接
libsmbclient提供对CIFS/SMB网络资源访问支持
支持一下语法:
支持下面选项:
timeout
以miliseconds为单位设置I/O操作时限。默认设置为-1,表示没有限制
truncate
如果设置为1,表示文件存在则覆盖,否则为0,默认为1
workgroup
设置工作组属性覆盖参数,默认未设置
更多信息参考
它提供了关于(rtmp, rtmpe, rtmps, rtmpt, rtmpte)大部分客户端功能和一些服务器功能。
请求语法为:
这里
例如,在ffmpeg中流式输出到RTMP协议:
用ffplay播放这个流:
Real-time Transport Protocol——RTP,实时传输协议
请求语法:
下面是被支持的URL选项:
ttl=n
rtcpport=n
localrtpport=n
localrtcpport=n'
pkt_size=n
connect=0|1
sources=ip[,ip]
block=ip[,ip]
write_to_source=0|1
localport=n
重要提示:
Real-Time Streaming Protocol——RTSP,实时流协议
RTSP在libavformat中不是作为技术协议处理,而是作为分离器和混合器。分离器支持两种常见的RTSP(基于RTP的数据传输,被用在Apple 和Microsoft)和Real-RTSP(基于RDT的数据传输)
混合器可以用来发送流(使用
file
file:filename
filename
是文件的路径
ffmpeg
读取input.mpeg
文件:
ffmpeg -i file:input.mpeg output.mpeg
INT_MAX
,它让请求的块没有尺寸限制。合理设置这个值可以提高用户请求反应时间,这对低速媒体上的文件读取有益。
ftp
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
-1
表示没有指定
anonymous
用户登录时的密码,通常为一个e-mail
地址(anonymous@FTP-address
)
hls
M3U8
播放列表文件可以是远程HTTP资源或者本地文件(通过标准文件协议)。通过在hls
后附加+proto
的方式嵌套指定hls
的URI,这里proto
可以是file
或者http
hls+
hls+file://path/to/local/resource.m3u8
hls
分离器(如果不是请报告问)。为了使用hls
分离器,可以把URL简单的指向m3u8
文件。
http
HTTp
头,它可以覆盖掉默认头。这些值必须是可在头中编码的字符串。
HTTP
数据
libavformat
编译中的字符串 ("Lavf/")
icy_metadata_headers
和 icy_metadata_packet
传递具体的请求,默认值为1。
icy
被设置为1,这将包含服务器发送的最后非空元数据包, 它用于定期处理程序执行期间中间流元数据更新
Set-Cookie HTTP
响应一样,多个cookie值可以由换行符隔开。
HTTP POST
读取输入端数据
# 服务器段(发送):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg
# 客户端 (接收):
ffmpeg -i -c copy somefile.ogg
# 客户端可以像下面这样工作
wget -O somefile.ogg
# 服务器端接收
# 客户端 (发送):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg
# 客户端也可以联用在`wget`中
wget --post-file=somefile.ogg
HTTP Cookie
cookies
选项允许对cookie进行指定。至少cookie需要指定一个路径和域。HTTP请求将自动匹配域和路径,并把包含的cookie值放置HTTP Cookie头中。多个cookie可以由换行分隔。
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;"
Icecast
icecast://[username[:password]@]server:port/mountpoint
mmst
mmsh
mmsh://server[:port][/app][/playpath]
md5
pipe
pipe:[number]
number
是对应管道文件描述符(例如0对应stdin,1对应stdout,2对应stderr)。如果number
没有指定,默认为stdout
被用于输出写,stdin
被用于输入读
cat test.wav | ffmpeg -i pipe:
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
ffmpeg -i test.wav -f avi pipe: | cat > test.avi
INT_MAX
,表示没有限制。如果设置了这个值将改善对数据传输缓慢的情况下用户终止请求反应的时间。
rtmp
rtmp://[username:password@]server[:port][/app][/instance][/playpath]
/ondemand/
, /flash/live/
等等),你可以通过rtmp_app
选项值来覆盖URI
app
指定的要播放资源的路径或者名称,可能有mp4:
前缀,你可以通过rtmp_playpath
选项值来覆盖
AVOptionS
)设置
FALSE
和TRUE
。同样对于对象值,必须由0或者1开始或者结束. 数据子项可以被命名,如果数据前面指定了N并且在值前面命名了数据(例如NB:myFlag:1),这个选项可以被多次在AMF序列中使用。
any
,它意味着首先尝试按直播流去搜索playpath
,如果没有找到再以记录流去搜索。其他参数值为live
和recorded
rtmp_live
被设置为live
时发送
SWFVerification
要求
proto://host[:port]/app
例如利用ffplay播放myserver
服务器上vod
应用下的sample
资源:
rtmp://username:password@myserver/long/app/name/some/long/path
rtmpe
rtmps
rtmpt
rtmpte
rtmpts
libsmbclient
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
rtmp_proto://server[:port][/app][/playpath] options
rtmp_proto
可以是(rtmp, rtmpe, rtmps, rtmpt, rtmpte)中的一个,此外诸如server
、port
、app
、playpath
都和在原生RTMP中一样。options
是由空格分隔的key=val
值对列表
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
ffplay "rtmp://myserver/live/mystream live=1"
rtp
rtp://hostname[:port][?option=val...]
设置TTL(Time-To-Live)值,仅多播
设置远端RTCP端口为n.
设置本地RTP端口为n.
设置本地RTCP端口为n.
设置最大包尺寸为n,单位 bytes.
为1则在UDP socket上连接(connect()),否则(为0)不连接
列出允许的源IP地址
列出禁止的源IP地址
如果为1,将数据包发送到最新收到的源地址,否则发送到默认远程地址(为0)
设置本地RTP端口为n
这时一个废弃选项,用`localrtpport`替代
rtcpport
没有被设置,则RTCP端口将是RTP端口加1
localrtpport
(本地RTP端口)没有设置,则任何有效端口可能被用作本地RTP/RTCP端口
localrtcpport
(本地RTCP)没有设置,则默认为本地RTP端口加1.
rtsp
RTSP ANNOUNCE
)给支持它的服务器(当前有Darwin
流服务器和Mischa Spiegelmock
的管理员在2009年8月13日编辑了该文章文章。