前言
Github
地址:Github
簡書地址:簡書
專輯地址:FFplay專輯
16.18 rtmp
實時消息傳遞協(xié)議舰讹。
實時消息傳遞協(xié)議(RTMP
)用于跨TCP/IP
網(wǎng)絡流式傳輸多媒體內(nèi)容茅姜。
語法如下:
rtmp://[username:password@]server[:port][/app][/instance][/playpath]
參數(shù)如下:
username
可選類型的用戶名(主要用于發(fā)布的時候使用)。
password
可選類型的密碼(主要用于發(fā)布的時候使用)月匣。
server
RTMP
服務器的地址钻洒。
port
要使用的TCP
端口號(默認為1935
)。
app
它是要訪問的應用程序的名稱锄开。它通常對應于RTMP
服務器上安裝應用程序的路徑(例如/ ondemand /
素标,/ flash / live /
等)。您也可以通過rtmp_app
選項覆蓋從URI
解析的值院刁。
playpath
它是參考app
中指定的應用程序播放的資源的路徑或名稱糯钙,可以以mp4:
作為前綴。您也可以通過rtmp_playpath
選項覆蓋從URI
解析的值退腥。
listen
充當服務器任岸,偵聽傳入連接。
timeout
等待傳入連接的最長時間狡刘。意思是傾聽享潜。
此外,可以通過命令行選項(或通過AVOptions
在代碼中)設置以下參數(shù):
`rtmp_app`
要在RTMP
服務器上連接的應用程序的名稱嗅蔬。此選項會覆蓋URI
中指定的參數(shù)剑按。
rtmp_buffer
設置客戶端緩沖時間(以毫秒為單位)疾就。默認值為3000
。
rtmp_conn
從字符串解析的額外的任意AMF連接參數(shù)艺蝴,例如猬腰,像B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0
。每個值都以一個表示類型的字符作為前綴猜敢,B
表示布爾值姑荷,N
表示數(shù)字,S
表示字符串缩擂,O
表示對象鼠冕,Z
表示null
,后跟冒號胯盯。對于布爾值懈费,數(shù)據(jù)必須分別為0
或1
表示FALSE
或TRUE
。同樣博脑,對于對象憎乙,數(shù)據(jù)必須分別為0
或1
才能結束或開始對象∏骼鳎可以通過在類型前加上N
并在值之前指定名稱(即NB:myFlag:1
)來命名子對象中的數(shù)據(jù)項寨闹。可以多次使用該選項來構造任意AMF序列君账。
rtmp_flashver
用于運行SWF
播放器的Flash
插件的版本。默認值為LNX 9,0,124,2
沈善。 (發(fā)布時乡数,默認為FMLE/3.0
(兼容; <libavformat版本>)。)
rtmp_flush_interval
在同一請求中刷新的數(shù)據(jù)包數(shù)(僅限RTMPT
)闻牡。默認值為10
净赴。
rtmp_live
指定媒體是實時流。不能在直播中恢復或?qū)ふ艺秩蟆DJ值為any
玖翅,這意味著訂戶首先嘗試播放在播放規(guī)范中指定的直播流。如果找不到該名稱的直播流割以,則播放錄制的流金度。其他可能的值是實時和記錄。
rtmp_pageurl
嵌入媒體的網(wǎng)頁的URL
严沥。默認情況下猜极,不會發(fā)送任何值。
rtmp_playpath
要播放或發(fā)布的流標識符消玄。此選項會覆蓋URI
中指定的參數(shù)跟伏。
rtmp_subscribe
要訂閱的直播流的名稱丢胚。默認情況下,不會發(fā)送任何值受扳。僅在指定選項或rtmp_live
設置為live
時才會發(fā)送携龟。
rtmp_swfhash
解壓縮的SWF
文件的SHA256
哈希值(32
字節(jié))。
rtmp_swfsize
SWFVerification
所需的解壓縮SWF
文件的大小勘高。
rtmp_swfurl
媒體的SWF
播放器的URL
骨宠。默認情況下,不會發(fā)送任何值相满。
rtmp_swfverify
播放器swf
文件的URL
层亿,自動計算散列/大小。
rtmp_tcurl
目標流的URL
立美。默認為proto://host[:port]/app
匿又。
例如,使用來自RTMP
服務器myserver
的應用程序vod
中的ffplay
讀取名為sample
的多媒體資源:
ffplay rtmp://myserver/vod/sample
要發(fā)布到受密碼保護的服務器建蹄,請分別傳遞playpath
和app
名稱:
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
16.19 rtmpe
加密的實時消息傳遞協(xié)議碌更。
加密實時消息傳遞協(xié)議(RTMPE
)用于在標準加密原語內(nèi)流式傳輸多媒體內(nèi)容,包括Diffie-Hellman
密鑰交換和HMACSHA256
洞慎,生成一對RC4
密鑰痛单。
16.20 rtmps
通過安全SSL
連接的實時消息傳遞協(xié)議。
實時消息傳遞協(xié)議(RTMPS
)用于跨加密連接流式傳輸多媒體內(nèi)容劲腿。
16.21 rtmpt
通過HTTP
進行管道傳輸?shù)膶崟r消息傳遞協(xié)議旭绒。
通過HTTP(RTMPT)
管道傳輸?shù)膶崟r消息傳遞協(xié)議用于在HTTP
請求中流式傳輸多媒體內(nèi)容以遍歷防火墻。
16.22 rtmpte
通過HTTP
管道傳輸?shù)募用軐崟r消息傳遞協(xié)議焦人。
通過HTTP
管道傳輸?shù)募用軐崟r消息傳遞協(xié)議(RTMPTE
)用于在HTTP
請求中流式傳輸多媒體內(nèi)容以遍歷防火墻挥吵。
16.23 rtmpts
通過HTTPS
進行管道傳輸?shù)膶崟r消息傳遞協(xié)議。
通過HTTPS(RTMPTS)
管道傳輸?shù)膶崟r消息傳遞協(xié)議用于在HTTPS
請求中流式傳輸多媒體內(nèi)容以遍歷防火墻花椭。
16.24 libsmbclient
libsmbclient
允許用戶操作CIFS/SMB
網(wǎng)絡資源忽匈。
語法如下:
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
該協(xié)議接受以下選項。
timeout
設置基礎低級操作使用的套接字I/O
操作的超時(以毫秒為單位)矿辽。 默認情況下丹允,它設置為-1
,這意味著未指定超時袋倔。
truncate
如果設置為1
雕蔽,則在寫入時截斷現(xiàn)有文件。值為0
可防止截斷奕污。 默認值為1
萎羔。
workgrou
設置用于建立連接的工作組。 默認情況下碳默,未指定工作組贾陷。
有關更多信息缘眶,請參閱:http://www.samba.org/。
16.25 libssh
通過libssh
安全文件傳輸協(xié)議
使用SFTP
協(xié)議讀取或?qū)懭脒h程資源髓废。
語法如下:
sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
該協(xié)議接受以下選項巷懈。
timeout
設置基礎低級操作使用的套接字I/O
操作的超時。 默認情況下慌洪,它設置為-1
顶燕,這意味著未指定超時。
truncate
如果設置為1
冈爹,則在寫入時截斷現(xiàn)有文件涌攻。值為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
支持實時消息傳遞協(xié)議及其變體。
在配置期間需要存在librtmp
標頭和庫岸更。 需要使用-enable-librtmp
顯式配置構建鸵膏。 如果啟用,這將替換本機RTMP
協(xié)議怎炊。
該協(xié)議提供了大多數(shù)客戶端功能和支持RTMP
所需的一些服務器功能谭企,通過HTTP(RTMPT)
管道傳輸?shù)?code>RTMP,加密的RTMP(RTMPE)
结胀,基于SSL/TLS
的RTMP(RTMPS)
以及這些加密類型的管道變體(RTMPTE赞咙,RTMPTS
)。
所需的語法是:
rtmp_proto://server[:port][/app][/playpath] options
其中rtmp_proto
是對應于每個RTMP
變體的字符串rtmp
糟港,rtmpt
,rtmpe
院仿,rtmps
秸抚,rtmpte
,rtmpts
之一歹垫,并且服務器剥汤,端口,app
和playpat
h具有與指定相同的含義 用于RTMP
本機協(xié)議排惨。 options
包含key = val
形式的空格分隔選項列表吭敢。
有關更多信息,請參見librtmp手冊頁(man 3 librtmp
)暮芭。
例如鹿驼,使用ffmpeg
將文件實時流式傳輸?shù)?code>RTMP服務器:
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
要使用ffplay
播放相同的流:
ffplay "rtmp://myserver/live/mystream live=1"
16.27 rtp
實時傳輸協(xié)議欲低。
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
將最大數(shù)據(jù)包大欣吧(以字節(jié)為單位)設置為n
。
connect=0|1
在UDP
套接字上設置connect()
(如果設置為1
)或不設置(如果設置為0
)块蚌。
sources=ip[,ip]
列出允許的源IP
地址闰非。
block=ip[,ip]
列出不允許(阻止)的源IP
地址。
write_to_source=0|1
將數(shù)據(jù)包發(fā)送到最新接收數(shù)據(jù)包的源地址(如果設置為1
)或默認遠程地址(如果設置為0
)峭范。
localport=n
將本地RTP
端口設置為n
财松。
這是一個棄用的選項。相反虎敦,應該使用localrtpport
游岳。
重要筆記:
1.如果未設置rtcpport
,則RTCP
端口將設置為RTP
端口值加1
其徙。
2.如果未設置localrtpport
(本地RTP
端口)胚迫,則任何可用端口都將用于本地RTP
和RTCP
端口。
3.如果未設置localrtcpport
(本地RTCP
端口)唾那,則將其設置為本地RTP
端口值加1
访锻。
16.28 rtsp
實時流媒體協(xié)議。
RTSP
在技術上不是libavformat
中的協(xié)議處理程序闹获,它是一個分離器和多路復用器期犬。 分路器支持普通RTSP
(通過RTP
傳輸數(shù)據(jù);例如Apple
和Microsoft
使用)和Real-RTSP
(通過RDT
傳輸數(shù)據(jù))。
可以使用muxer
將流使用RTSP ANNOUNCE
發(fā)送到支持它的服務器(目前是Darwin Streaming Server
和Mischa Spiegelmock
的RTSP
服務器)避诽。
RTSP
網(wǎng)址所需的語法是:
rtsp://hostname[:port]/path
可以在ffmpeg/ffplay
命令行上設置選項龟虎,也可以通過AVOptions
或avformat_open_input
在代碼中設置選項。
支持如下選項:
initial_pause
如果設置為1
沙庐,請勿立即開始播放流鲤妥。默認值為0
。
rtsp_transport
設置RTSP
傳輸協(xié)議拱雏。
它接受以下值:
值 | 解釋 |
---|---|
UDP | 使用UDP 作為較低的傳輸協(xié)議棉安。 |
TCP | 使用TCP (RTSP 控制信道內(nèi)的交織)作為較低的傳輸協(xié)議。 |
udp_multicast | 使用UDP 多播作為較低的傳輸協(xié)議铸抑。 |
HTTP | 使用HTTP 管道作為較低的傳輸協(xié)議贡耽,這對于傳遞代理很有用 |
可以指定多個較低的傳輸協(xié)議,在這種情況下,它們一次嘗試一個(如果一個設置失敗蒲赂,則嘗試下一個)阱冶。 對于復用器,僅支持tcp
和udp
選項凳宙。
rtsp_flags
設置RTSP標志熙揍。
能接受的值如下表所述:
值 | 解釋 |
---|---|
filter_src | 僅接受來自協(xié)商的對等地址和端口的數(shù)據(jù)包 |
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
設置要緩沖的數(shù)據(jù)包數(shù)以處理重新排序的數(shù)據(jù)包逸吵。
stimeout
設置套接字TCP I/O
超時(以微秒為單位)凶硅。
user-agent
覆蓋User-Agent
標頭。 如果未指定扫皱,則默認為libavformat
標識符字符串足绅。
當通過UDP
接收數(shù)據(jù)時,解復用器嘗試重新排序接收到的數(shù)據(jù)包(因為它們可能無序到達韩脑,或者數(shù)據(jù)包可能完全丟失)氢妈。 可以通過將最大解復用延遲設置為零(通過AVFormatContext
的max_delay
字段)來禁用此功能。
當使用ffplay
觀看多比特率Real-RTSP
流時段多,可以分別為視頻和音頻選擇-vst n
和-ast n
來顯示要顯示的流首量,并且可以通過按v
和a
來即時切換。
16.28.1 Examples
以下示例均使用ffplay
和ffmpeg
工具进苍。
通過UDP
觀察流蕾总,最大重新排序延遲為0.5
秒:
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
觀看通過HTTP
管道傳輸?shù)牧鳎?/p>
ffplay -rtsp_transport http rtsp://server/video.mp4
實時將流發(fā)送到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
會話公告協(xié)議(RFC 2974
)琅捏。 這在技術上不是libavformat
中的協(xié)議處理程序,它是一個muxer
和demuxer
递雀。 它通過在單獨的端口上定期通知流的SDP
柄延,用于RTP
流的信令。
16.29.1 Muxer
提供給多路復用器的SAP url
的語法是:
sap://destination[:port][?options]
RTP
數(shù)據(jù)包在端口端口上發(fā)送到目標,如果沒有指定端口搜吧,則發(fā)送到端口5004
市俊。選項是一個&
分離列表涵叮。支持以下選項:
announce_addr=address
指定發(fā)送通知的目標IP地址街氢。如果省略,則通知將發(fā)送到常用的SAP公告多播地址224.2.127.254(sap.mcast.net)
或ff0e :: 2:7ffe(
如果destination
是IPv6
地址)峭咒。
announce_port=port
指定發(fā)送通知的端口蜒程,如果未指定绅你,則默認為9875
。
ttl=ttl
指定通知和RTP數(shù)據(jù)包的生存時間值昭躺,默認為255
忌锯。
same_port=0|1
如果設置為1
,則在同一端口對上發(fā)送所有RTP
流领炫。如果為零(默認值)偶垮,則所有流都在唯一端口上發(fā)送,端口2上的每個流都比前一個更高帝洪。VLC / Live555
要求將其設置為1
似舵,以便能夠接收流。libavformat
中用于接收的RTP
堆棧要求在唯一端口上發(fā)送所有流葱峡。
示例命令行如下砚哗。
要在本地子網(wǎng)上廣播流,以便在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
是要監(jiān)聽的端口常空,如果省略則為9875
。
解復用器偵聽給定地址和端口的通知盖溺。 收到通知后漓糙,它會嘗試接收該特定流。
示例命令行如下:
要播放在正常SAP多播地址上公布的第一個流:
ffplay sap://
要播放默認IPv6 SAP
多播地址上公布的第一個流:
ffplay sap://[ff0e::2:7ffe]
16.30 sctp
流控制傳輸協(xié)議烘嘱。
接受的URL語法是:
sctp://host:port[?options]
該協(xié)議接受以下選項:
listen
如果設置為任何值昆禽,請偵聽傳入連接。 默認情況下蝇庭,傳出連接已完成醉鳖。
max_streams
設置最大流數(shù)。 默認情況下哮内,不設置限制盗棵。
16.31 srt
通過libsrt
實現(xiàn)Haivision
安全可靠傳輸協(xié)議。
SRT url
支持的語法是:
srt://hostname:port[?options]
options
包含key = val
形式的&-separated
選項列表。
或者:
options srt:// hostname:port
options
包含-key val
選項列表纹因。
該協(xié)議接受以下選項:
connect_timeout
連接超時; SRT
無法連接RTT> 1500
毫秒(2
次握手交換)喷屋,默認連接超時為3
秒。 此選項適用于呼叫者和集合點連接模式瞭恰。 連接超時是集合點模式設置值的10
倍(可以用作早期版本此連接問題的解決方法)屯曹。
ffs=bytes
飛行標志大小(窗口大芯贰)恶耽,以字節(jié)為單位。 FFS實際上是一個內(nèi)部參數(shù)陕截,您應該將其設置為不小于recv_buffer_size
和mss
驳棱。 默認值相對較大,因此除非設置非常大的接收緩沖區(qū)农曲,否則無需更改此選項社搅。 默認值為25600
。
inputbw=bytes/seconds
發(fā)送者標稱輸入速率乳规,以每秒字節(jié)數(shù)為單位形葬。 與oheadbw
一起使用,當maxbw
設置為relative(0)
時暮的,計算恢復數(shù)據(jù)包與主媒體流一起發(fā)送時的最大發(fā)送速率:inputbw'*(100 +'oheadbw')/ 100 if 'maxbw'
設置為relative(0)
時未設置inputbw
笙以,實際輸入速率在庫內(nèi)評估。 默認值為0
冻辩。
iptos=tos
IP
服務類型猖腕。 僅適用于發(fā)件人。 默認值為0xB8
恨闪。
ipttl=ttl
IP
生存時間倘感。 僅適用于發(fā)件人。 默認值為64
咙咽。
listen_timeout
設置套接字監(jiān)聽超時老玛。
maxbw=bytes/seconds
最大發(fā)送帶寬,以每秒字節(jié)數(shù)為單位钧敞。 -1
無限(CSRTCC
限制為30mbps
)0
相對于輸入速率(參見inputbw
)> 0
絕對限制值默認值為0
(relative
)
mode=caller|listener|rendezvous
連接模式蜡豹。 caller
打開客戶端連接。 listener
啟動服務器以偵聽傳入的連接溉苛。 rendezvous
使用Rendez-Vous
連接模式镜廉。 默認值是調(diào)用者。
mss=bytes
最大段大小愚战,以字節(jié)為單位桨吊。 用于緩沖區(qū)分配和速率計算威根,使用數(shù)據(jù)包計數(shù)器假定完全填充的數(shù)據(jù)包。 使用對等體之間的最小MSS
视乐。 整個互聯(lián)網(wǎng)默認為1500
。 這是UDP
數(shù)據(jù)包的最大大小敢茁,只能減少佑淀,除非您有一些不尋常的專用網(wǎng)絡設置。 默認值為1500
彰檬。
nakreport=1|0
如果設置為1
伸刃,Receiver
將定期發(fā)送UMSG_LOSSREPORT
消息,直到重新傳輸或故意丟棄丟失的數(shù)據(jù)包逢倍。 默認值為1
捧颅。
oheadbw=percents
恢復帶寬開銷高于輸入速率,以百分比表示较雕。 請參閱inputbw
碉哑。 默認值為25%
。
passphrase=string
HaiCrypt
加密/解密密碼短語字符串亮蒋,長度從10
到79
個字符扣典。 密碼短語是發(fā)送者和接收者之間的共享秘密。 它用于使用PBKDF2
(基于密碼的密鑰派生函數(shù))生成密鑰加密密鑰慎玖。 僅當pbkeylen
非零時才使用它贮尖。 僅在接收的數(shù)據(jù)被加密時才在接收器上使用它。 配置的密碼短語無法恢復(只寫)趁怔。
pbkeylen=bytes
發(fā)件人加密密鑰長度湿硝,以字節(jié)為單位。 只能設置為0,16,24
和32
.如果不是0
润努,則啟用發(fā)送方加密关斜。接收方不需要(設置為0
),從HaiCrypt
握手中的發(fā)送方獲取密鑰大小任连。 默認值為0
蚤吹。
recv_buffer_size=bytes
設置接收緩沖區(qū)大小,以字節(jié)為單位随抠。
send_buffer_size=bytes
設置發(fā)送緩沖區(qū)大小裁着,以字節(jié)為單位。
rw_timeout
設置讀/寫選擇的引發(fā)錯誤超時拱她。
此選項僅在讀取模式下相關:如果沒有超過此時間間隔的數(shù)據(jù)二驰,則引發(fā)錯誤。
tlpktdrop=1|0
Too-late
的丟包秉沼。 當在接收器上啟用時桶雀,它會跳過未及時傳送的丟失數(shù)據(jù)包矿酵,并在其播放時間到來時將以下數(shù)據(jù)包傳送給應用程序。 它還向發(fā)送方發(fā)送假ACK
矗积。 當在發(fā)送方上啟用并在接收對等方上啟用時全肮,發(fā)送方丟棄不能及時交付的舊數(shù)據(jù)包。 如果接收方支持棘捣,它會在發(fā)送方自動啟用辜腺。
tsbpddelay
基于時間戳的數(shù)據(jù)包傳送延遲。 用于吸收丟失數(shù)據(jù)包重傳的突發(fā)乍恐。
有關更多信息评疗,請參閱:https://github.com/Haivision/srt。
16.32 srtp
安全的實時傳輸協(xié)議茵烈。
接受的選項是:
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
設置輸入和輸出編碼參數(shù),這些參數(shù)由二進制塊的base64
編碼表示表示呜投。 該二進制塊的前16
個字節(jié)用作主密鑰加匈,后面的14
個字節(jié)用作master salt
。
16.33 subfile
start
提取段的起始偏移量宙彪,以字節(jié)為單位矩动。
end
提取的段的結束偏移量,以字節(jié)為單位释漆。 如果設置為0
悲没,則提取到文件末尾。
示例如下:
從DVD VOB
文件中提取章節(jié)(從外部獲得的起始和結束扇區(qū)男图,再乘以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
將輸出寫入多個協(xié)議示姿。 各個輸出由|
分隔。
tee:file://path/to/local/this.avi|file://path/to/local/that.avi
16.35 tcp
傳輸控制協(xié)議逊笆。
TCP
網(wǎng)址所需的語法是:
tcp://hostname:port[?options]
options
包含key = val
形式的&-separated
選項列表栈戳。
支持的選項列表如下:
listen=1|0
偵聽傳入連接。 默認值為0
难裆。
timeout=microseconds
設置提升錯誤超時子檀,以微秒表示。
此選項僅在讀取模式下相關:如果沒有超過此時間間隔的數(shù)據(jù)乃戈,則引發(fā)錯誤褂痰。
listen_timeout=milliseconds
設置監(jiān)聽超時,以毫秒為單位症虑。
recv_buffer_size=bytes
設置接收緩沖區(qū)大小缩歪,表示字節(jié)。
send_buffer_size=bytes
設置發(fā)送緩沖區(qū)大小谍憔,表示字節(jié)匪蝙。
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
在代碼中)設置以下參數(shù):
ca_file, cafile=filename
包含證書頒發(fā)機構(CA
)根證書的文件千元,以視為受信任。如果鏈接的TLS
庫包含默認值需忿,則可能不需要指定驗證工作诅炉,但并非所有庫和設置都內(nèi)置默認值。文件必須采用OpenSSL PEM
格式屋厘。
tls_verify=1|0
如果啟用,請嘗試驗證我們正在與之通信的對等方月而。請注意汗洒,如果使用OpenSSL
,目前只能確保對等證書由CA
數(shù)據(jù)庫中的一個根證書簽名父款,但它不會驗證證書是否與我們嘗試連接的主機名實際匹配溢谤。 (使用其他后端,主機名也會得到驗證憨攒。)
默認情況下禁用此選項世杀,因為在許多情況下它需要調(diào)用方提供CA
數(shù)據(jù)庫。
cert_file肝集,cert = filename
包含與對等方握手時使用的證書的文件瞻坝。 (作為服務器運行時,在偵聽模式下杏瞻,對等端通常需要這樣做所刀,而客戶端證書僅在某些設置中強制要求。)
key_file, key=filename
包含證書私鑰的文件捞挥。
listen=1|0
如果啟用浮创,請偵聽提供的端口上的連接,并假定握手中的服務器角色而不是客戶端角色砌函。
示例命令行:
創(chuàng)建服務輸入流的TLS/SSL
服務器斩披。
ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
使用ffplay
從TLS/SSL
服務器回放流:
ffplay tls://hostname:port
16.37 udp
用戶數(shù)據(jù)報協(xié)議。
UDP url
所需的語法是:
udp://hostname:port[?options]
options
包含key = val
形式的&-separated
選項列表讹俊。
如果在系統(tǒng)上啟用了線程垦沉,則使用循環(huán)緩沖區(qū)來存儲傳入數(shù)據(jù),這樣可以減少由于UDP
套接字緩沖區(qū)溢出而導致的數(shù)據(jù)丟失劣像。 fifo_size
和overrun_nonfatal
選項與此緩沖區(qū)相關乡话。
支持的選項列表如下:
buffer_size=size
設置UDP
最大套接字緩沖區(qū)大小,以字節(jié)為單位這用于設置接收或發(fā)送緩沖區(qū)大小耳奕,具體取決于套接字的用途绑青。默認值為64KB
诬像。另見fifo_size
。
bitrate=bitrate
如果設置為非零闸婴,則輸出將具有指定的常量比特率坏挠,如果輸入具有足夠的數(shù)據(jù)包來維持它。
burst_bits=bits
使用比特率時邪乍,它指定數(shù)據(jù)包突發(fā)中的最大比特數(shù)降狠。
localport=port
覆蓋要綁定的本地UDP端口。
localaddr=addr
選擇本地IP
地址庇楞。這很有用榜配,例如如果發(fā)送組播并且主機有多個接口,則用戶可以通過指定該接口的IP地址來選擇要發(fā)送的接口吕晌。
pkt_size=size
設置UDP
數(shù)據(jù)包的大械叭臁(以字節(jié)為單位)。
reuse=1|0
明確允許或禁止重用UDP
套接字睛驳。
ttl=ttl
設置生存時間值(僅適用于多播)烙心。
connect=1|0
使用connect()
初始化UDP
套接字。在這種情況下乏沸,以后無法使用ff_udp_set_remote_url
更改目標地址淫茵。如果在開始時未知目標地址,則也可以在ff_udp_set_remote_url
中指定此選項蹬跃。這允許查找具有getsockname
的數(shù)據(jù)包的源地址匙瘪,并且如果收到destination unreachable
,則使用AVERROR(ECONNREFUSED)
返回寫入炬转。對于接收辆苔,這提供了僅接收來自指定對等地址/端口的分組的益處。
sources=address[,address]
僅接收從指定的發(fā)送方IP
地址之一發(fā)送到組播組的數(shù)據(jù)包扼劈。
block=address[,address]
忽略從指定的發(fā)送方IP
地址發(fā)送到組播組的數(shù)據(jù)包驻啤。
fifo_size=units
設置UDP
接收循環(huán)緩沖區(qū)大小,表示為大小為188
字節(jié)的數(shù)據(jù)包數(shù)荐吵。如果未指定骑冗,則默認為7 * 4096
。
overrun_nonfatal=1|0
在UDP
接收循環(huán)緩沖區(qū)溢出的情況下生存先煎。默認值為0
贼涩。
timeout=microseconds
設置提升錯誤超時,以微秒表示薯蝎。
此選項僅在讀取模式下相關:如果沒有超過此時間間隔的數(shù)據(jù)遥倦,則引發(fā)錯誤。
broadcast=1|0
明確允許或禁止UDP
廣播占锯。
請注意袒哥,廣播可能無法在具有廣播風暴保護的網(wǎng)絡上正常工作缩筛。
16.37.1 示例
-
使用
ffmpeg
將UDP
流式傳輸?shù)竭h程端點:ffmpeg -i input -f format udp://hostname:port
-
使用
ffmpeg
使用188
個大小的UDP
數(shù)據(jù)包通過UDP
以mpegts
格式傳輸,使用大輸入緩沖區(qū):ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
-
使用
ffmpeg
從遠程端點接收UDP
:ffmpeg -i udp://[multicast-address]:port ...
16.38 unix
Unix
本地套接字
Unix
套接字URL
所需的語法是:
unix://filepath
可以通過命令行選項(或通過AVOptions
在代碼中)設置以下參數(shù):
timeout
超時以毫秒為單位堡称。
listen
在偵聽模式下創(chuàng)建Unix
套接字瞎抛。