FFPlay专辑

FFplay文档解读-12-协议二

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

前言

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

16.18 rtmp

实时消息传递协议。

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

语法如下:

rtmp://[username:password@]server[:port][/app][/instance][/playpath]

参数如下:

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,后跟冒号。对于布尔值,数据必须分别为01表示FALSETRUE。同样,对于对象,数据必须分别为01才能结束或开始对象。可以通过在类型前加上N并在值之前指定名称(即NB:myFlag:1)来命名子对象中的数据项。可以多次使用该选项来构造任意AMF序列。

rtmp_flashver

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

rtmp_flush_interval

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

rtmp_live

指定媒体是实时流。不能在直播中恢复或寻找。默认值为any,这意味着订户首先尝试播放在播放规范中指定的直播流。如果找不到该名称的直播流,则播放录制的流。其他可能的值是实时和记录。

rtmp_pageurl

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

rtmp_playpath

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

rtmp_subscribe

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

rtmp_swfhash

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

rtmp_swfsize

SWFVerification所需的解压缩SWF文件的大小。

rtmp_swfurl

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

rtmp_swfverify

播放器swf文件的URL,自动计算散列/大小。

 rtmp_tcurl

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

例如,使用来自RTMP服务器myserver的应用程序vod中的ffplay读取名为sample的多媒体资源:

ffplay rtmp://myserver/vod/sample

要发布到受密码保护的服务器,请分别传递playpathapp名称:

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

16.19 rtmpe

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

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

16.20 rtmps

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

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

16.21 rtmpt

通过HTTP进行管道传输的实时消息传递协议。

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

16.22 rtmpte

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

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

16.23 rtmpts

通过HTTPS进行管道传输的实时消息传递协议。

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

16.24 libsmbclient

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

语法如下:

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

该协议接受以下选项。

timeout

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

truncate

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

workgrou

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

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

16.25 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

16.26 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

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

在配置期间需要存在librtmp标头和库。 需要使用-enable-librtmp显式配置构建。 如果启用,这将替换本机RTMP协议。

该协议提供了大多数客户端功能和支持RTMP所需的一些服务器功能,通过HTTP(RTMPT)管道传输的RTMP,加密的RTMP(RTMPE),基于SSL/TLSRTMP(RTMPS)以及这些加密类型的管道变体(RTMPTE,RTMPTS)。

所需的语法是:

rtmp_proto://server[:port][/app][/playpath] options

其中rtmp_proto是对应于每个RTMP变体的字符串rtmprtmptrtmpertmpsrtmptertmpts之一,并且服务器,端口,appplaypath具有与指定相同的含义 用于RTMP本机协议。 options包含key = val形式的空格分隔选项列表。

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

例如,使用ffmpeg将文件实时流式传输到RTMP服务器:

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

要使用ffplay播放相同的流:

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

16.27 rtp

实时传输协议。

RTP URL所需的语法是:rtp://hostname[:port][?option=val...]

port指定要使用的RTP端口。

支持以下URL选项:

TTL = N

设置TTL (Time-To-Live)值(仅适用于多播)。

rtcpport = N

将远程RTCP端口设置为n

localrtpport = N

将本地RTP端口设置为n

localrtcpport = N

将本地RTCP端口设置为n。

pkt_size = N

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

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

这是一个弃用的选项。相反,应该使用localrtpport

重要笔记:

1.如果未设置rtcpport,则RTCP端口将设置为RTP端口值加1

2.如果未设置localrtpport(本地RTP端口),则任何可用端口都将用于本地RTPRTCP端口。

3.如果未设置localrtcpport(本地RTCP端口),则将其设置为本地RTP端口值加1

16.28 rtsp

实时流媒体协议。

RTSP在技术上不是libavformat中的协议处理程序,它是一个分离器和多路复用器。 分路器支持普通RTSP(通过RTP传输数据;例如AppleMicrosoft使用)和Real-RTSP(通过RDT传输数据)。

可以使用muxer将流使用RTSP ANNOUNCE发送到支持它的服务器(目前是Darwin Streaming ServerMischa SpiegelmockRTSP服务器)。

RTSP网址所需的语法是:

rtsp://hostname[:port]/path

可以在ffmpeg/ffplay命令行上设置选项,也可以通过AVOptionsavformat_open_input在代码中设置选项。

支持如下选项:

initial_pause

如果设置为1,请勿立即开始播放流。默认值为0

rtsp_transport

设置RTSP传输协议。

它接受以下值:

解释
UDP 使用UDP作为较低的传输协议。
TCP 使用TCPRTSP控制信道内的交织)作为较低的传输协议。
udp_multicast 使用UDP多播作为较低的传输协议。
HTTP 使用HTTP管道作为较低的传输协议,这对于传递代理很有用

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

rtsp_flags

设置RTSP标志。

能接受的值如下表所述:

解释
filter_src 仅接受来自协商的对等地址和端口的数据包
listen 充当服务器,侦听传入连接
prefer_tcp 如果TCP可用作RTSP RTP传输,请首先尝试使用TCP进行RTP传输

默认值为none

allowed_media_types

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

接受以下标志:

video
audio
data

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

min_port

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

max_port

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

timeout

设置等待传入连接的最大超时(以秒为单位)。

-1表示无限(默认)。 此选项意味着rtsp_flags设置为listen

reorder_queue_size

设置要缓冲的数据包数以处理重新排序的数据包。

stimeout

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

user-agent

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

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

当使用ffplay观看多比特率Real-RTSP流时,可以分别为视频和音频选择-vst n-ast n来显示要显示的流,并且可以通过按va来即时切换。

16.28.1 Examples

以下示例均使用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 input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp

实时接收流:

ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp输出

16.29 sap

会话公告协议(RFC 2974)。 这在技术上不是libavformat中的协议处理程序,它是一个muxerdemuxer。 它通过在单独的端口上定期通知流的SDP,用于RTP流的信令。

16.29.1 Muxer

提供给多路复用器的SAP url的语法是:

sap://destination[:port][?options]

RTP数据包在端口端口上发送到目标,如果没有指定端口,则发送到端口5004。选项是一个分离列表。支持以下选项:

announce_addr=address

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

announce_port=port

指定发送通知的端口,如果未指定,则默认为9875

ttl=ttl

指定通知和RTP数据包的生存时间值,默认为255

same_port=0|1

如果设置为1,则在同一端口对上发送所有RTP流。如果为零(默认值),则所有流都在唯一端口上发送,端口2上的每个流都比前一个更高。VLC / Live555要求将其设置为1,以便能够接收流。libavformat中用于接收的RTP堆栈要求在唯一端口上发送所有流。

示例命令行如下。

要在本地子网上广播流,以便在VLC中观看:

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

同样,在ffplay中观看:

ffmpeg -re -i input -f sap sap://224.0.0.255

通过IPv6观看ffplay

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

16.29.2 Demuxer

提供给解复用程序的SAP url的语法是:

sap://[address][:port]

address是侦听通知的多播地址,如果省略,则使用默认的224.2.127.254(sap.mcast.net)port是要监听的端口,如果省略则为9875

解复用器侦听给定地址和端口的通知。 收到通知后,它会尝试接收该特定流。

示例命令行如下:

要播放在正常SAP多播地址上公布的第一个流:

ffplay sap://

要播放默认IPv6 SAP多播地址上公布的第一个流:

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

16.30 sctp

流控制传输协议。

接受的URL语法是:

sctp://host:port[?options]

该协议接受以下选项:

listen

如果设置为任何值,请侦听传入连接。 默认情况下,传出连接已完成。

max_streams

设置最大流数。 默认情况下,不设置限制。

16.31 srt

通过libsrt实现Haivision安全可靠传输协议。

SRT url支持的语法是:

srt://hostname:port[?options]

options包含key = val形式的&-separated选项列表。

或者:

options srt:// hostname:port

options包含-key val选项列表。

该协议接受以下选项:

connect_timeout

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

ffs=bytes

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

inputbw=bytes/seconds

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

iptos=tos

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

ipttl=ttl

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

listen_timeout

设置套接字监听超时。

maxbw=bytes/seconds

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

mode=caller|listener|rendezvous

连接模式。 caller打开客户端连接。 listener启动服务器以侦听传入的连接。 rendezvous使用Rendez-Vous连接模式。 默认值是调用者。

mss=bytes

最大段大小,以字节为单位。 用于缓冲区分配和速率计算,使用数据包计数器假定完全填充的数据包。 使用对等体之间的最小MSS。 整个互联网默认为1500。 这是UDP数据包的最大大小,只能减少,除非您有一些不寻常的专用网络设置。 默认值为1500

 nakreport=1|0

如果设置为1Receiver将定期发送UMSG_LOSSREPORT消息,直到重新传输或故意丢弃丢失的数据包。 默认值为1

oheadbw=percents

恢复带宽开销高于输入速率,以百分比表示。 请参阅inputbw。 默认值为25%

passphrase=string

HaiCrypt加密/解密密码短语字符串,长度从1079个字符。 密码短语是发送者和接收者之间的共享秘密。 它用于使用PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。 仅当pbkeylen非零时才使用它。 仅在接收的数据被加密时才在接收器上使用它。 配置的密码短语无法恢复(只写)。

pbkeylen=bytes

发件人加密密钥长度,以字节为单位。 只能设置为0,16,2432.如果不是0,则启用发送方加密。接收方不需要(设置为0),从HaiCrypt握手中的发送方获取密钥大小。 默认值为0

recv_buffer_size=bytes

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

send_buffer_size=bytes

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

rw_timeout

设置读/写选择的引发错误超时。

此选项仅在读取模式下相关:如果没有超过此时间间隔的数据,则引发错误。

tlpktdrop=1|0

Too-late的丢包。 当在接收器上启用时,它会跳过未及时传送的丢失数据包,并在其播放时间到来时将以下数据包传送给应用程序。 它还向发送方发送假ACK。 当在发送方上启用并在接收对等方上启用时,发送方丢弃不能及时交付的旧数据包。 如果接收方支持,它会在发送方自动启用。

tsbpddelay

基于时间戳的数据包传送延迟。 用于吸收丢失数据包重传的突发。

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

16.32 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个字节用作master salt

16.33 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

16.34 tee

将输出写入多个协议。 各个输出由|分隔。

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

16.35 tcp

传输控制协议。

TCP网址所需的语法是:

tcp://hostname:port[?options]

options包含key = val形式的&-separated选项列表。

支持的选项列表如下:

listen=1|0

侦听传入连接。 默认值为0

timeout=microseconds

设置提升错误超时,以微秒表示。

此选项仅在读取模式下相关:如果没有超过此时间间隔的数据,则引发错误。

listen_timeout=milliseconds

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

recv_buffer_size=bytes

设置接收缓冲区大小,表示字节。

send_buffer_size=bytes

设置发送缓冲区大小,表示字节。

tcp_nodelay=1|0

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

以下示例显示如何使用ffmpeg设置侦听TCP连接,然后使用ffplay访问该连接:

ffmpeg -i input -f format tcp://hostname:port?listen
ffplay tcp://hostname:port

16.36 tls

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

TLS/SSL URL语法如下:

tls://hostname:port[?options]

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

ca_file, cafile=filename

包含证书颁发机构(CA)根证书的文件,以视为受信任。如果链接的TLS库包含默认值,则可能不需要指定验证工作,但并非所有库和设置都内置默认值。文件必须采用OpenSSL PEM格式。

tls_verify=1|0

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

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

cert_file,cert = filename

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

key_file, key=filename

包含证书私钥的文件。

listen=1|0

如果启用,请侦听提供的端口上的连接,并假定握手中的服务器角色而不是客户端角色。

示例命令行:

创建服务输入流的TLS/SSL服务器。

ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key

使用ffplayTLS/SSL服务器回放流:

ffplay tls://hostname:port

16.37 udp

用户数据报协议。

UDP url所需的语法是:

udp://hostname:port[?options]

options包含key = val形式的&-separated选项列表。

如果在系统上启用了线程,则使用循环缓冲区来存储传入数据,这样可以减少由于UDP套接字缓冲区溢出而导致的数据丢失。 fifo_sizeoverrun_nonfatal选项与此缓冲区相关。

支持的选项列表如下:

buffer_size=size

设置UDP最大套接字缓冲区大小,以字节为单位这用于设置接收或发送缓冲区大小,具体取决于套接字的用途。默认值为64KB。另见fifo_size

bitrate=bitrate

如果设置为非零,则输出将具有指定的常量比特率,如果输入具有足够的数据包来维持它。

burst_bits=bits

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

localport=port

覆盖要绑定的本地UDP端口。

localaddr=addr

选择本地IP地址。这很有用,例如如果发送组播并且主机有多个接口,则用户可以通过指定该接口的IP地址来选择要发送的接口。

pkt_size=size

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

reuse=1|0

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

ttl=ttl

设置生存时间值(仅适用于多播)。

connect=1|0

使用connect()初始化UDP套接字。在这种情况下,以后无法使用ff_udp_set_remote_url更改目标地址。如果在开始时未知目标地址,则也可以在ff_udp_set_remote_url中指定此选项。这允许查找具有getsockname的数据包的源地址,并且如果收到destination unreachable,则使用AVERROR(ECONNREFUSED)返回写入。对于接收,这提供了仅接收来自指定对等地址/端口的分组的益处。

sources=address[,address]

仅接收从指定的发送方IP地址之一发送到组播组的数据包。

block=address[,address]

忽略从指定的发送方IP地址发送到组播组的数据包。

fifo_size=units

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

overrun_nonfatal=1|0

UDP接收循环缓冲区溢出的情况下生存。默认值为0

timeout=microseconds

设置提升错误超时,以微秒表示。

此选项仅在读取模式下相关:如果没有超过此时间间隔的数据,则引发错误。

broadcast=1|0

明确允许或禁止UDP广播。

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

16.37.1 示例

16.38 unix

Unix本地套接字

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

unix://filepath

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

timeout

超时以毫秒为单位。

listen

在侦听模式下创建Unix套接字。

上一篇下一篇

猜你喜欢

热点阅读