目錄
- 1 描述
- 2 協議選項
- 3 協議
- 3.1 amqp
- 3.2 async
- 3.3 bluray
- 3.4 cache
- 3.5 concat
- 3.6 concatf
- 3.7 crypto
- 3.8 data
- 3.9 fd
- 3.10 file
- 3.11 ftp
- 3.12 gopher
- 3.13 gophers
- 3.14 hls
- 3.15 http
- 3.16 Icecast
- 3.17 ipfs
- 3.18 mmst
- 3.19 mmsh
- 3.20 md5
- 3.21 pipe
- 3.22 prompeg
- 3.23 rist
- 3.24 rtmp
- 3.25 rtmpe
- 3.26 rtmps
- 3.27 rtmpt
- 3.28 rtmpte
- 3.29 rtmpts
- 3.30 libsmbclient
- 3.31 libssh
- 3.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
- 3.33 rtp
- 3.34 rtsp
- 3.35 sap
- 3.36 sctp
- 3.37 srt
- 3.38 srtp
- 3.39 subfile
- 3.40 tee
- 3.41 tcp
- 3.42 tls
- 3.43 udp
- 3.44 unix
- 3.45 zmq
- 4 參見
- 5 作者
1 描述
本文檔描述了 libavformat 函式庫提供的輸入和輸出協議。
2 協議選項
libavformat 函式庫提供了一些通用的全域選項,這些選項可以在所有協議上設定。此外,每個協議都可能支援所謂的私有選項,這些選項是該組件特有的。
選項可以透過在 FFmpeg 工具中指定 -option value 來設定,或者透過在 AVFormatContext
選項中明確設定值,或使用 libavutil/opt.h API 進行程式化使用。
支援的選項列表如下
- protocol_whitelist list (輸入)
設定以「,」分隔的允許協議列表。「ALL」匹配所有協議。以「-」為字首的協議將被停用。預設情況下允許所有協議,但另一個協議使用的協議(巢狀協議)僅限於每個協議子集。
3 協議
協議是 FFmpeg 中配置的元素,可讓您存取需要特定協議的資源。
當您配置 FFmpeg 建置時,預設會啟用所有支援的協議。您可以使用 configure 選項「–list-protocols」列出所有可用的協議。
您可以使用 configure 選項「–disable-protocols」停用所有協議,並使用選項「–enable-protocol=PROTOCOL」選擇性地啟用協議,或者您可以使用選項「–disable-protocol=PROTOCOL」停用特定協議。
ff* 工具的「-protocols」選項將顯示支援的協議列表。
所有協議都接受以下選項
- rw_timeout
等待(網路)讀取/寫入操作完成的最長時間,以微秒為單位。
以下是目前可用協議的描述。
3.1 amqp
進階訊息佇列協議 (AMQP) 0-9-1 版是一種基於代理的發布-訂閱通訊協議。
FFmpeg 必須使用 –enable-librabbitmq 編譯才能支援 AMQP。還必須執行單獨的 AMQP 代理。RabbitMQ 是一個開放原始碼 AMQP 代理範例。
啟動代理後,FFmpeg 用戶端可以使用以下命令將資料串流傳輸到代理
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
其中 hostname 和 port(預設值為 5672)是代理的位址。用戶端還可以設定使用者/密碼以進行身份驗證。這兩個欄位的預設值均為「guest」。可以使用 vhost 設定代理上的虛擬主機名稱。預設值為「/」。
多個訂閱者可以使用以下命令從代理串流傳輸
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
在 RabbitMQ 中,發布到代理的所有資料都通過特定的交換器,每個訂閱用戶端都有一個已分配的佇列/緩衝區。當封包到達交換器時,可能會根據交換器和 routing_key 欄位將其複製到用戶端的佇列中。
支援以下選項
- exchange
設定要在代理上使用的交換器。RabbitMQ 有幾個預定義的交換器:「amq.direct」是預設交換器,發布者和訂閱者必須具有匹配的 routing_key;「amq.fanout」與廣播操作相同(即,資料將轉發到 fanout 交換器上的所有佇列,而與 routing_key 無關);「amq.topic」與「amq.direct」類似,但允許更複雜的模式匹配(請參閱 RabbitMQ 文件)。
- routing_key
設定路由金鑰。預設值為「amqp」。路由金鑰在「amq.direct」和「amq.topic」交換器上用於決定是否將封包寫入訂閱者的佇列。
- pkt_size
傳送/接收到代理的每個封包的最大大小。預設值為 131072。最小值為 4096,最大值為任何大值(可以用 int 表示)。接收封包時,這會在 FFmpeg 中設定內部緩衝區大小。它應等於或大於發布到代理的封包大小。否則,接收到的訊息可能會被截斷,導致解碼錯誤。
- connection_timeout
與代理初始連線期間的逾時時間(以秒為單位)。預設值為 rw_timeout;如果未設定 rw_timeout,則預設值為 5 秒。
- delivery_mode 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
讀取 BluRay 播放清單。
接受的選項包括
- angle
BluRay 角度
- chapter
開始章節 (1...N)
- playlist
要讀取的播放清單 (BDMV/PLAYLIST/?????.mpls)
範例
從掛載到 /mnt/bluray 的 BluRay 讀取最長的播放清單
bluray:/mnt/bluray
從掛載到 /mnt/bluray 的 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,每個 URL 都可能指定不同的協議。
例如,若要使用 ffplay
讀取檔案序列 split1.mpeg、split2.mpeg、split3.mpeg,請使用以下命令
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
請注意,您可能需要逸出字元「|」,該字元對於許多 shell 而言是特殊的。
3.6 concatf
實體串連協議,使用換行符號分隔的資源清單。
從多個資源依序讀取和搜尋,就像它們是唯一的資源一樣。
此協議接受的 URL 具有以下語法
concatf:URL
其中 URL 是包含換行符號分隔的資源清單的 URL,這些資源將被串連,每個資源都可能指定不同的協議。特殊字元必須使用反斜線或單引號逸出。請參閱 (ffmpeg-utils)ffmpeg-utils(1) 手冊中的「引號和逸出」章節。
例如,若要使用 ffplay
讀取檔案序列 split1.mpeg、split2.mpeg、split3.mpeg,這些檔案在檔案 split.txt 中以單獨的行列出,請使用以下命令
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。
例如,若要使用 ffmpeg
轉換內嵌的 GIF 檔案
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
3.9 fd
檔案描述元存取協議。
接受的語法為
fd: -fd file_descriptor
如果未指定 fd,則預設情況下,stdout 檔案描述元將用於寫入,stdin 用於讀取。與 pipe 協議不同,fd 協議如果對應於常規檔案,則具有搜尋支援。fd 協議不支援透過 URL 傳遞檔案描述元以確保安全。
此協議接受以下選項
- blocksize
設定 I/O 操作的最大區塊大小,以位元組為單位。預設值為
INT_MAX
,這會導致不限制請求的區塊大小。合理地降低此值可以改善使用者終止請求反應時間,這在資料傳輸速度較慢時非常重要。- fd
設定檔案描述元。
3.10 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
,這會導致不限制請求的區塊大小。合理地降低此值可以改善使用者終止請求反應時間,這對於慢速媒體上的檔案非常重要。- follow
如果設定為 1,則協議將在檔案結尾重試讀取,從而允許讀取仍在寫入的檔案。為了使其終止,您需要使用 rw_timeout 選項,或使用中斷回呼(對於 API 使用者)。
- seekable
控制是否在檔案上宣告可搜尋性。0 表示不可搜尋,-1 表示自動(對於普通檔案可搜尋,對於具名管道不可搜尋)。
許多解多工器以不同的方式處理可搜尋和不可搜尋的資源,覆寫此設定可能會加快開啟某些檔案的速度,但會犧牲某些功能(例如精確搜尋)。
3.11 ftp
FTP(檔案傳輸協議)。
使用 FTP 協議從遠端資源讀取或寫入遠端資源。
需要以下語法。
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
此協議接受以下選項。
- timeout
設定基礎低層級操作使用的 Socket 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 gopher
Gopher 協議。
3.13 gophers
Gophers 協議。
具有 TLS 封裝的 Gopher 協議。
3.14 hls
將符合 Apple HTTP 即時串流的區段化串流讀取為統一串流。描述區段的 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/<版本>」)
- 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_headers 和 icy_metadata_packet 選項來擷取元資料。預設值為 1。
- icy_metadata_headers
如果伺服器支援 ICY 元資料,則此選項包含 ICY 特定的 HTTP 回覆標頭,以換行字元分隔。
- icy_metadata_packet
如果伺服器支援 ICY 元資料,且 icy 設定為 1,則此選項包含伺服器傳送的最後一個非空元資料封包。對串流中元資料更新感興趣的應用程式應定期輪詢此選項。
- metadata
如果存在,則設定包含來自位元串流的 Icecast 元資料的匯出字典。僅適用於 C API。
- auth_type
-
設定 HTTP 驗證類型。沒有摘要選項,因為此方法需要先從伺服器取得 nonce 參數,且無法像基本驗證那樣直接使用。
- 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 方法不符,則會向用戶端發送錯誤請求回應。當未設定時,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://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
- resource
當實驗性 HTTP 伺服器正在使用時,用戶端請求的資源。
- reply_code
當實驗性 HTTP 伺服器正在使用時,傳回給用戶端的 HTTP 代碼。
- short_seek_size
設定閾值(以位元組為單位),用於確定何時應優先使用預先讀取而不是搜尋和新的 HTTP 請求。這很有用,例如,確保相同的連線用於讀取大型視訊封包和中間的小型音訊封包。
3.15.1 HTTP Cookie
除非在請求中傳遞 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
3.16 Icecast
Icecast 協議(串流傳輸到 Icecast 伺服器)
此協議接受以下選項
- ice_genre
設定串流類型。
- ice_name
設定串流名稱。
- ice_description
設定串流描述。
- ice_url
設定串流網站 URL。
- ice_public
設定串流是否應公開。預設值為 0(不公開)。
- user_agent
覆寫 User-Agent 標頭。如果未指定,則將使用「Lavf/<版本>」形式的字串。
- password
設定 Icecast 掛載點密碼。
- content_type
設定串流內容類型。如果與 audio/mpeg 不同,則必須設定此選項。
- legacy_icecast
這啟用對 Icecast 版本 < 2.4.0 的支援,這些版本不支援 HTTP PUT 方法,但支援 SOURCE 方法。
- tls
建立與 Icecast 的 TLS (HTTPS) 連線。
icecast://[username[:password]@]server:port/mountpoint
3.17 ipfs
星際檔案系統 (IPFS) 協議支援。使用者可以透過所謂的閘道存取儲存在 IPFS 網路上的檔案。這些是 http(s) 端點。此協議封裝 IPFS 原生協議(ipfs:// 和 ipns://),以便傳送到此類閘道。使用者可以(並且應該)託管自己的節點,這表示此協議將使用使用者的本機閘道來存取 IPFS 網路上的檔案。
此協議接受以下選項
- gateway
定義要使用的閘道。如果未設定,則協議將首先嘗試透過依序查看
$IPFS_GATEWAY
、$IPFS_PATH
和$HOME/.ipfs/
來定位本機閘道。
使用者可以透過 2 種方式使用此協議。使用 IPFS
ffplay ipfs://<hash>
或 IPNS 協議(IPNS 是可變 IPFS)
ffplay ipns://<hash>
3.18 mmst
透過 TCP 的 MMS (Microsoft Media Server) 協議。
3.19 mmsh
透過 HTTP 的 MMS (Microsoft Media Server) 協議。
所需的語法為
mmsh://server[:port][/app][/playpath]
3.20 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 輸出協議。
3.21 pipe
UNIX 管道存取協議。
從 UNIX 管道讀取和寫入 UNIX 管道。
接受的語法為
pipe:[number]
如果未指定 fd,則 number 是對應於管道檔案描述元的數字(例如,stdin 為 0,stdout 為 1,stderr 為 2)。如果未指定 number,則預設情況下,stdout 檔案描述元將用於寫入,stdin 用於讀取。
例如,若要使用 ffmpeg
從 stdin 讀取
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
,這會導致不限制請求的區塊大小。合理地降低此值可以改善使用者終止請求反應時間,這在資料傳輸速度較慢時非常重要。- fd
設定檔案描述元。
請注意,某些格式(通常為 MOV)要求輸出協議是可搜尋的,因此它們將無法使用 pipe 輸出協議。
3.22 prompeg
Pro-MPEG Code of Practice #3 Release 2 FEC 協議。
Pro-MPEG CoP#3 FEC 是一種二維同位檢查前向錯誤更正機制,適用於透過 RTP 傳送的 MPEG-2 傳輸串流。
此協議必須與 rtp_mpegts
混合器和 rtp
協議結合使用。
所需的語法為
-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port
目標 UDP 連接埠對於欄 FEC 串流為 port + 2
,對於列 FEC 串流為 port + 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
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[:port][/app][/instance][/playpath]
接受的參數為
- username
選用的使用者名稱(主要用於發布)。
- password
password
- 選用的密碼(主要用於發布)。
server
- RTMP 伺服器的位址。
port
- 要使用的 TCP 連接埠號碼(預設值為 1935)。
app
- 它是要存取的應用程式的名稱。它通常對應於應用程式在 RTMP 伺服器上的安裝路徑(例如 /ondemand/、/flash/live/ 等)。您也可以透過
rtmp_app
選項覆寫從 URI 剖析的值。 playpath
- listen
它是要播放的資源的路徑或名稱,參考 app 中指定的應用程式,可以加上「mp4:」字首。您也可以透過
rtmp_playpath
選項覆寫從 URI 剖析的值。- timeout
act_server
充當伺服器,偵聽連入連線。暗示偵聽。
- timeout
等待連入連線的最長時間。暗示偵聽。
- 此外,以下參數可以透過命令列選項設定(或在程式碼中透過
AVOption
設定) 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 串流中支援的編碼解碼器列表。此選項應設定為以逗號分隔的四個字碼值列表,例如
hvc1,av01,vp09
表示多個編碼解碼器,或hvc1
表示僅一個編碼解碼器。指定的列表將顯示在 Connect Command Message 的「fourCcLive」屬性中。 rtmp_flashver
- 用於執行 SWF 播放器的 Flash 外掛程式版本。預設值為 LNX 9,0,124,2。(發布時,預設值為 FMLE/3.0 (compatible; <libavformat version>)。)
rtmp_flush_interval
- 在同一個請求中刷新的封包數(僅限 RTMPT)。預設值為 10。
rtmp_live
- 指定媒體是即時串流。即時串流中無法恢復或搜尋。預設值為
any
,表示訂閱者首先嘗試播放 playpath 中指定的即時串流。如果找不到該名稱的即時串流,則會播放錄製的串流。其他可能的值為live
和recorded
。 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。
tcp_nodelay=1|0
ffplay rtmp://myserver/vod/sample
設定 TCP_NODELAY 以停用 Nagle 演算法。預設值為 0。
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
3.25 rtmpe
備註:目前未最佳化寫入 Socket 以最大程度地減少系統呼叫,並降低 TCP_NODELAY 的效率/效果。
例如,若要使用 ffplay
從 RTMP 伺服器「myserver」的應用程式「vod」讀取名為「sample」的多媒體資源
3.26 rtmps
若要發布到受密碼保護的伺服器,請分別傳遞 playpath 和應用程式名稱
加密即時訊息傳輸協定。
3.27 rtmpt
加密即時訊息傳輸協定 (RTMPE) 用於在標準密碼編譯基本元素內串流傳輸多媒體內容,包括 Diffie-Hellman 金鑰交換和 HMACSHA256,產生一對 RC4 金鑰。
透過安全 SSL 連線的即時訊息傳輸協定。
3.28 rtmpte
即時訊息傳輸協定 (RTMPS) 用於跨加密連線串流傳輸多媒體內容。
透過 HTTP 通道的即時訊息傳輸協定。
3.29 rtmpts
透過 HTTP 通道的即時訊息傳輸協定 (RTMPT) 用於在 HTTP 請求中串流傳輸多媒體內容以穿越防火牆。
透過 HTTP 通道的加密即時訊息傳輸協定。
3.30 libsmbclient
透過 HTTP 通道的加密即時訊息傳輸協定 (RTMPTE) 用於在 HTTP 請求中串流傳輸多媒體內容以穿越防火牆。
需要以下語法。
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
此協議接受以下選項。
- timeout
透過 HTTPS 通道的即時訊息傳輸協定。
- truncate
如果設定為 1,則在寫入時截斷現有檔案。值為 0 可防止截斷。預設值為 1。
- 透過 HTTPS 通道的即時訊息傳輸協定 (RTMPTS) 用於在 HTTPS 請求中串流傳輸多媒體內容以穿越防火牆。
libsmbclient 允許使用者操作 CIFS/SMB 網路資源。
設定基礎低層級操作使用的 Socket I/O 操作逾時時間(以毫秒為單位)。預設情況下,它設定為 -1,表示未指定逾時時間。
3.31 libssh
workgroup
設定用於建立連線的工作群組。預設情況下,未指定工作群組。
需要以下語法。
sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
此協議接受以下選項。
- timeout
如需更多資訊,請參閱:http://www.samba.org/。
- truncate
如果設定為 1,則在寫入時截斷現有檔案。值為 0 可防止截斷。預設值為 1。
- 透過 libssh 的安全檔案傳輸協議
使用 SFTP 協議從遠端資源讀取或寫入遠端資源。
設定基礎低層級操作使用的 Socket I/O 操作逾時時間。預設情況下,它設定為 -1,表示未指定逾時時間。
ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
3.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
private_key
指定包含要用於授權的私密金鑰的檔案路徑。預設情況下,libssh 會在 ~/.ssh/ 目錄中搜尋金鑰。
範例:播放儲存在遠端伺服器上的檔案。
所需的語法為
rtmp_proto://server[:port][/app][/playpath] options
透過 librtmp 支援的即時訊息傳輸協定及其變體。
組態期間需要存在 librtmp 標頭和函式庫。您需要使用「–enable-librtmp」明確配置建置。如果啟用,這將取代原生 RTMP 協議。
此協議提供大多數用戶端功能和一些伺服器功能,以支援 RTMP、HTTP 通道中的 RTMP (RTMPT)、加密 RTMP (RTMPE)、SSL/TLS 上的 RTMP (RTMPS) 以及這些加密類型的通道變體 (RTMPTE、RTMPTS)。
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
其中 rtmp_proto 是字串「rtmp」、「rtmpt」、「rtmpe」、「rtmps」、「rtmpte」、「rtmpts」之一,對應於每個 RTMP 變體,server、port、app 和 playpath 的含義與原生 RTMP 協議指定的含義相同。options 包含以空格分隔的 key=val 形式的選項列表。
ffplay "rtmp://myserver/live/mystream live=1"
3.33 rtp
如需更多資訊,請參閱 librtmp 手冊頁面 (man 3 librtmp)。
例如,若要使用 ffmpeg
將檔案即時串流傳輸到 RTMP 伺服器
rtp://hostname[:port][?options]
若要使用 ffplay
播放相同的串流
即時傳輸協議。
RTP URL 的所需語法為
- port 指定要使用的 RTP 連接埠。
options 包含以 & 分隔的 key=val 形式的選項列表。
- 支援以下 URL 選項
ttl=n
- 設定 TTL(存活時間)值(僅限多點傳播)。
rtcpport=n
- 將遠端 RTCP 連接埠設定為 n。
localrtpport=n
- 將本機 RTP 連接埠設定為 n。
localrtcpport=n'
- 將本機 RTCP 連接埠設定為 n。
pkt_size=n
- 將最大封包大小(以位元組為單位)設定為 n。
buffer_size=size
- 設定最大 UDP Socket 緩衝區大小(以位元組為單位)。
connect=0|1
- 在 UDP Socket 上執行
connect()
(如果設定為 1),否則不執行(如果設定為 0)。 sources=ip[,ip]
- 列出允許的來源 IP 位址。
block=ip[,ip]
- 列出不允許(封鎖)的來源 IP 位址。
rtcpport=n
write_to_source=0|1
- 將封包傳送到最新接收封包的來源位址(如果設定為 1),或傳送到預設遠端位址(如果設定為 0)。
localport=n
- 這是一個已棄用的選項。應改用 localrtpport。
localaddr=addr
網路介面的本機 IP 位址,用於傳送封包或加入多點傳播群組。
- timeout=n
- 將 Socket I/O 操作逾時時間(以微秒為單位)設定為 n。
- 重要注意事項
3.34 rtsp
如果未設定 rtcpport,則 RTCP 連接埠將設定為 RTP 連接埠值加 1。
如果未設定 localrtpport(本機 RTP 連接埠),則任何可用的連接埠都將用於本機 RTP 和 RTCP 連接埠。
如果未設定 localrtcpport(本機 RTCP 連接埠),則將設定為本機 RTP 連接埠值加 1。
即時串流協定。
rtsp://hostname[:port]/path
RTSP 在 libavformat 中並非嚴格來說是協議處理常式,而是一個解多工器和混合器。解多工器同時支援正常 RTSP(透過 RTP 傳輸資料;例如 Apple 和 Microsoft 使用此協議)和 Real-RTSP(透過 RDT 傳輸資料)。
3.34.1 混合器
混合器可用於使用 RTSP ANNOUNCE 將串流傳送至支援它的伺服器(目前為 Darwin Streaming Server 和 Mischa Spiegelmock 的 RTSP 伺服器)。
- RTSP URL 的所需語法為
選項可以在
ffmpeg
/ffplay
命令列中設定,或在程式碼中透過AVOption
或在avformat_open_input
中設定。支援以下選項。
- rtsp_transport
設定 RTSP 傳輸協議。
- 它接受以下值
‘udp’
使用 UDP 作為較低的傳輸協議。
- ‘tcp’
使用 TCP(在 RTSP 控制通道內交錯)作為較低的傳輸協議。
預設值為 ‘0’。
- rtsp_flags
設定 RTSP 旗標。
- 接受以下值
‘latm’
- 針對 AAC 使用 MP4A-LATM 封包化,而不是 MPEG4-GENERIC。
‘rfc2190’
- 針對 H.263 使用 RFC 2190 封包化,而不是 RFC 4629。
‘skip_rtcp’
- 不要傳送 RTCP 傳送者報告。
‘h264_mode0’
使用 UDP 作為較低的傳輸協議。
- 針對 RTP 中的 H.264 使用模式 0。
‘send_bye’
- 完成時傳送 RTCP BYE 封包。
min_port
- buffer_size
設定最小本機 UDP 連接埠。預設值為 5000。
- pkt_size
max_port
3.34.2 解多工器
混合器可用於使用 RTSP ANNOUNCE 將串流傳送至支援它的伺服器(目前為 Darwin Streaming Server 和 Mischa Spiegelmock 的 RTSP 伺服器)。
- 設定最大本機 UDP 連接埠。預設值為 65000。
max_buffer_size
- RTSP URL 的所需語法為
選項可以在
ffmpeg
/ffplay
命令列中設定,或在程式碼中透過AVOption
或在avformat_open_input
中設定。支援以下選項。
- rtsp_transport
設定 RTSP 傳輸協議。
- 它接受以下值
‘udp’
- 設定最大 Socket 緩衝區大小(以位元組為單位)。
pkt_size
- 設定最大傳送封包大小(以位元組為單位)。預設值為 1472。
initial_pause
- 如果設定為 1,則不要立即開始播放串流。預設值為 0。
‘udp_multicast’
使用 UDP 多點傳播作為較低的傳輸協議。
- ‘tcp’
使用 TCP(在 RTSP 控制通道內交錯)作為較低的傳輸協議。
預設值為 ‘0’。
- ‘http’
使用 HTTP 通道作為較低的傳輸協議,這對於通過 Proxy 很有用。
- ‘https’
它是要播放的資源的路徑或名稱,參考 app 中指定的應用程式,可以加上「mp4:」字首。您也可以透過
rtmp_playpath
選項覆寫從 URI 剖析的值。- 使用 HTTPs 通道作為較低的傳輸協議,這對於通過 Proxy 很有用,並且廣泛用於安全性考量。
可以指定多個較低的傳輸協議,在這種情況下,它們會一次嘗試一個(如果一個的設定失敗,則會嘗試下一個)。對於混合器,僅支援 ‘tcp’ 和 ‘udp’ 選項。
- ‘filter_src’
僅接受來自協商的對等位址和連接埠的封包。
‘listen’
- ‘prefer_tcp’
如果 TCP 可用作 RTSP RTP 傳輸,則首先嘗試 TCP 進行 RTP 傳輸。
‘satip_raw’
- 匯出原始 MPEG-TS 串流,而不是解多工。旗標只會寫出原始串流,並保留原始 PAT/PMT/PID。
- 預設值為 ‘none’。
- allowed_media_types
- 設定要從伺服器接受的媒體類型。
接受以下旗標
- 針對 RTP 中的 H.264 使用模式 0。
‘send_bye’
- 完成時傳送 RTCP BYE 封包。
min_port
- ‘video’
‘audio’
- ‘data’
‘subtitle’
- timeout
預設情況下,它接受所有媒體類型。
- user_agent
listen_timeout
- buffer_size
設定最小本機 UDP 連接埠。預設值為 5000。
設定建立初始連線的最大逾時時間(以秒為單位)。設定 listen_timeout > 0 會將 rtsp_flags 設定為 ‘listen’。預設值為 -1,表示在設定 ‘listen’ 模式時為無限逾時。
reorder_queue_size
3.34.3 範例
設定要緩衝以處理重新排序的封包的封包數。
- socket_timeout
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
- 設定 Socket TCP I/O 逾時時間(以微秒為單位)。
ffplay -rtsp_transport http rtsp://server/video.mp4
- user_agent
ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
- 覆寫 User-Agent 標頭。如果未指定,則預設為 libavformat 識別碼字串。
ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp output
3.35 sap
當透過 UDP 接收資料時,解多工器會嘗試重新排序接收到的封包(因為它們可能會亂序到達,或者封包可能會完全遺失)。可以透過將最大解多工延遲設定為零(透過 AVFormatContext 的 max_delay
欄位)來停用此功能。
3.35.1 混合器
當使用 ffplay
觀看多位元率 Real-RTSP 串流時,可以使用 -vst
n 和 -ast
n 分別選擇要顯示的視訊和音訊串流,並且可以透過按下 v
和 a
即時切換。
sap://destination[:port][?options]
以下範例全部使用 ffplay
和 ffmpeg
工具。
- 透過 UDP 觀看串流,最大重新排序延遲為 0.5 秒
觀看透過 HTTP 通道的串流
- 即時將串流傳送到 RTSP 伺服器,供其他人觀看
即時接收串流
- 工作階段宣告協定 (RFC 2974)。這在 libavformat 中並非嚴格來說是協議處理常式,而是一個混合器和解多工器。它用於 RTP 串流的信號傳輸,方法是在單獨的連接埠上定期宣告串流的 SDP。
提供給混合器的 SAP URL 的語法為
- RTP 封包會傳送到連接埠 port 上的 destination,如果未指定連接埠,則傳送到連接埠 5004。options 是以
&
分隔的列表。支援以下選項 announce_addr=address
指定用於傳送宣告的目標 IP 位址。如果省略,則宣告將傳送到常用的 SAP 宣告多點傳播位址 224.2.127.254 (sap.mcast.net),如果 destination 是 IPv6 位址,則傳送到 ff0e::2:7ffe。
announce_port=port
ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
指定傳送宣告的連接埠,如果未指定,則預設為 9875。
ffmpeg -re -i input -f sap sap://224.0.0.255
ttl=ttl
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
3.35.2 解多工器
指定宣告和 RTP 封包的存活時間值,預設為 255。
sap://[address][:port]
same_port=0|1
如果設定為 1,則在相同的連接埠對上傳送所有 RTP 串流。如果為零(預設值),則所有串流都將在唯一的連接埠上傳送,每個串流的連接埠都比前一個連接埠高 2 個數字。VLC/Live555 要求將其設定為 1,才能接收串流。libavformat 中的 RTP 堆疊接收需要所有串流都在唯一的連接埠上傳送。
指定用於傳送宣告的目標 IP 位址。如果省略,則宣告將傳送到常用的 SAP 宣告多點傳播位址 224.2.127.254 (sap.mcast.net),如果 destination 是 IPv6 位址,則傳送到 ff0e::2:7ffe。
以下是命令列範例。
ffplay sap://
若要在本機子網路上廣播串流,以便在 VLC 中觀看
ffplay sap://[ff0e::2:7ffe]
3.36 sctp
同樣,在 ffplay
中觀看
以及在 ffplay
中透過 IPv6 觀看
sctp://host:port[?options]
提供給解多工器的 SAP URL 的語法為
- listen
address 是要偵聽宣告的多點傳播位址,如果省略,則使用預設值 224.2.127.254 (sap.mcast.net)。port 是要偵聽的連接埠,如果省略,則為 9875。
- 解多工器偵聽給定位址和連接埠上的宣告。收到宣告後,它會嘗試接收該特定串流。
若要播放正常 SAP 多點傳播位址上宣告的第一個串流
3.37 srt
若要播放預設 IPv6 SAP 多點傳播位址之一上宣告的第一個串流
串流控制傳輸協定。
srt://hostname:port[?options]
即時傳輸協議。
接受的 URL 語法為
options srt://hostname:port
協議接受以下選項
此協議接受以下選項。
- listen
如果設定為任何值,則偵聽連入連線。預設情況下完成連出連線。
- max_streams
設定最大串流數。預設情況下,未設定限制。
- 透過 libsrt 的 Haivision 安全可靠傳輸協定。
SRT URL 的支援語法為
- 或
options 包含 ‘-key val’ 選項的列表。
- connect_timeout=milliseconds
連線逾時;SRT 無法在 RTT > 1500 毫秒(2 次握手交換)的情況下連線,預設連線逾時時間為 3 秒。此選項適用於呼叫者和會合連線模式。會合模式的連線逾時時間設定值的 10 倍(可用作早期版本的此連線問題的解決方案)。
- ffs=bytes
Flight Flag Size(視窗大小),以位元組為單位。FFS 實際上是一個內部參數,您應將其設定為不小於 recv_buffer_size 和 mss。預設值相對較大,因此除非您設定非常大的接收器緩衝區,否則您無需變更此選項。預設值為 25600。
- inputbw=bytes/seconds
傳送者標稱輸入速率,以位元組/秒為單位。與 oheadbw 一起使用,當 maxbw 設定為相對值 (0) 時,用於計算最大傳送速率,當復原封包與主要媒體串流一起傳送時:inputbw * (100 + oheadbw) / 100。如果在 maxbw 設定為相對值 (0) 時未設定 inputbw,則在函式庫內部評估實際輸入速率。預設值為 0。
- iptos=tos
IP 服務類型。僅適用於傳送者。預設值為 0xB8。
- ipttl=ttl
IP 存活時間。僅適用於傳送者。預設值為 64。
- latency=microseconds
基於時間戳記的封包傳遞延遲。用於吸收遺失的封包重傳的叢發。此旗標將 rcvlatency 和 peerlatency 設定為相同的值。請注意,在 1.3.0 版之前,這是設定延遲的唯一旗標,但是當側為傳送者且 rcvlatency 為接收器時,這實際上等效於設定 peerlatency,並且不支援雙向串流傳送。
- listen_timeout=microseconds
設定 Socket 偵聽逾時時間。
- maxbw=bytes/seconds
最大傳送頻寬,以位元組/秒為單位。-1 無限(CSRTCC 限制為 30mbps)0 相對於輸入速率(請參閱 inputbw)>0 絕對限制值 預設值為 0(相對)。
- mode=caller|listener|rendezvous
連線模式。caller 開啟用戶端連線。listener 啟動伺服器以偵聽連入連線。rendezvous 使用會合連線模式。預設值為呼叫者。
- mss=bytes
最大區段大小,以位元組為單位。用於緩衝區配置和速率計算,方法是使用封包計數器,假設封包已完全填滿。使用對等方之間最小的 MSS。在整個網際網路上,預設值為 1500。這是 UDP 封包的最大大小,只能減小,除非您有一些不尋常的專用網路設定。預設值為 1500。
- nakreport=1|0
如果設定為 1,則接收器將定期傳送「UMSG_LOSSREPORT」訊息,直到重新傳輸或有意捨棄遺失的封包。預設值為 1。
- oheadbw=percents
高於輸入速率的復原頻寬額外負荷,以百分比表示。請參閱 inputbw。預設值為 25%。
- passphrase=string
HaiCrypt 加密/解密密碼字串,長度從 10 到 79 個字元。密碼是傳送者和接收器之間的共用密碼。它用於使用 PBKDF2(基於密碼的金鑰衍生函式)產生金鑰加密金鑰。僅當 pbkeylen 為非零時才使用它。僅當接收到的資料已加密時,才在接收器上使用它。已配置的密碼無法復原(僅寫入)。
enforced_encryption=1|0
- 如果為 true,則連線雙方都必須設定相同的密碼(包括空密碼,即沒有加密)。如果密碼不符或只有一方未加密,則會拒絕連線。預設值為 true。
kmrefreshrate=packets
- 要傳輸的封包數,之後加密金鑰會切換到新金鑰。預設值為 -1。-1 表示自動(srt 函式庫中為 0x1000000)。此選項的範圍是 0 -
INT_MAX
中的整數。 kmpreannounce=packets
- 傳送新加密金鑰與發生切換之間的時間間隔。此值也適用於發生切換與舊加密金鑰停用之間的後續間隔。預設值為 -1。-1 表示自動(srt 函式庫中為 0x1000)。此選項的範圍是 0 -
INT_MAX
中的整數。 snddropdelay=microseconds
- 傳送者的額外延遲時間,然後捨棄封包。此延遲時間會新增至預設捨棄延遲時間間隔值。
特殊值 -1:完全不要在傳送者上捨棄封包。
- payload_size=bytes
設定在即時模式下單次呼叫傳送函式期間傳輸的封包的最大宣告大小。如果未使用此值,則使用 0(在檔案模式下為預設值)。預設值為 -1(自動),這通常表示 MPEG-TS;如果您要使用 SRT 傳送任何不同種類的 Payload,例如,將即時串流包裝在非常小的影格中,則可以使用更大的最大影格大小,但不得超過 1456 位元組。
- pkt_size=bytes
‘payload_size’ 的別名。
- peerlatency=microseconds
由傳送者側設定為接收器的最小值的延遲值(如 rcvlatency 中所述)。
- pbkeylen=bytes
傳送者加密金鑰長度,以位元組為單位。只能設定為 0、16、24 和 32。如果不是 0,則啟用傳送者加密。接收器不需要此選項(設定為 0),金鑰大小從 HaiCrypt 握手中取得。預設值為 0。
- rcvlatency=microseconds
自封包傳送時刻起,到封包在接收函式中傳遞到接收器應用程式的時刻應經過的時間。此時間應為緩衝時間,足夠大以涵蓋傳送所花費的時間、意外延長的 RTT 時間以及重傳遺失的 UDP 封包所需的時間。有效延遲值將是此選項的值與對等方設定的 peerlatency 值的最大值。在 1.3.0 版之前,此選項僅作為 latency 提供。
- recv_buffer_size=bytes
設定 UDP 接收緩衝區大小,以位元組表示。
- send_buffer_size=bytes
設定 UDP 傳送緩衝區大小,以位元組表示。
timeout=microseconds
- 設定讀取、寫入和連線操作的引發錯誤逾時時間。請注意,SRT 函式庫具有可以單獨控制的內部逾時時間,此處設定的值僅是對這些逾時時間的上限。
tlpktdrop=1|0
- 太晚封包捨棄。在接收器上啟用後,它會略過未及時傳遞的遺失封包,並在其播放時間到來時將後續封包傳遞到應用程式。它也會向傳送者傳送虛假的 ACK。在傳送者上啟用並在接收對等方上啟用後,傳送者會捨棄沒有機會及時傳遞的較舊封包。如果接收器支援,則會在傳送者中自動啟用它。
sndbuf=bytes
設定傳送緩衝區大小,以位元組表示。
- rcvbuf=bytes
設定接收緩衝區大小,以位元組表示。
- 接收緩衝區不得大於 ffs。
lossmaxttl=packets
- 重新排序容許度可以成長到的值。當重新排序容許度 > 0 時,封包遺失報告會延遲,直到收到該數量的封包。每次「延遲」封包到達時,重新排序容許度都會增加,但這不是由於重傳(即,當 UDP 封包傾向於亂序到達時),而是最新序列與此封包序列之間的差異,並且不超過此選項的值。預設情況下為 0,表示此機制已關閉,並且始終在序列中遇到「間隙」時立即傳送遺失報告。
minversion
- 對等方所需的最小 SRT 版本。與不滿足最小版本需求的對等方的連線將被拒絕。
十六進位版本格式為 0xXXYYZZ,人類可讀形式為 x.y.z。
streamid=string
一個字串,限制為 512 個字元,可以在連線之前在 Socket 上設定。此串流 ID 將能夠從 srt_accept 傳回且由具有該設定串流 ID 的 Socket 連線的 Socket 中由偵聽器側擷取。SRT 不會強制執行對此字串內容的任何特殊解譯。此選項在會合連線中沒有意義;結果可能是僅一側會覆寫另一側的值,並且這取決於運氣,哪一側會獲勝。
- srt_streamid=string
‘streamid’ 的別名,以避免與 ffmpeg 命令列選項衝突。
smoother=live|file
用於該 Socket 的傳輸的 Smoother 類型,它負責傳輸和壅塞控制。連接雙方的 Smoother 類型必須完全相同,否則會拒絕連線。
- messageapi=1|0
設定後,此 Socket 使用訊息 API,否則使用緩衝區 API。請注意,在即時模式下(請參閱 transtype),只有訊息 API 可用。在檔案模式下,您可以選擇使用兩種模式之一
- 串流 API(預設值,當此選項為 false 時)。在此模式下,您可以使用一個傳送指令傳送任意數量的資料,甚至可以使用直接從檔案讀取的專用函式。內部設施將處理任何速度和壅塞控制。接收時,您也可以接收任意數量的資料,未擷取的資料將等待下一次呼叫。在串流模式下,資料部分之間沒有邊界。
訊息 API。在此模式下,您的單個傳送指令會傳遞恰好一塊具有邊界的資料(訊息)。與即時模式相反,此訊息可以跨多個 UDP 封包,唯一的大小限制是它應完整地容納在傳送緩衝區中。接收器應使用盡可能大的緩衝區來接收訊息,否則將不會放棄訊息。當訊息不完整時(未收到所有封包或發生封包遺失),將不會放棄訊息。
transtype=live|file
3.38 srtp
設定 Socket 的傳輸類型,特別是,設定此選項會將多個其他參數設定為特定傳輸類型所需的預設值。
接受的選項包括
- live:將選項設定為即時傳輸。在此模式下,您應僅透過一個傳送指令傳送適合一個 UDP 封包的資料量,並且限制為首先在 payload_size 中定義的值(在此模式下,預設值為 1316)。在此模式下沒有速度控制,只有頻寬控制(如果已配置),以便不超過具有額外負荷傳輸(重傳和控制封包)的頻寬。
- file:將選項設定為非即時傳輸。請參閱 messageapi 以取得更多說明
linger=seconds
支援的值
- Socket 在關閉時等待未傳送資料的秒數。預設值為 -1。-1 表示自動(即時模式下關閉,時間為 0 秒,檔案模式下開啟,時間為 180 秒)。此選項的範圍是 0 -
INT_MAX
中的整數。 - tsbpd=1|0
- 如果為 true,則使用基於時間戳記的封包傳遞模式。預設行為取決於傳輸類型:在即時模式下啟用,在檔案模式下停用。
- 如需更多資訊,請參閱:https://github.com/Haivision/srt。
- Socket 在關閉時等待未傳送資料的秒數。預設值為 -1。-1 表示自動(即時模式下關閉,時間為 0 秒,檔案模式下開啟,時間為 180 秒)。此選項的範圍是 0 -
- 安全即時傳輸協定。
- srtp_in_suite
srtp_out_suite
3.39 subfile
選取輸入和輸出編碼套件。
‘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
subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB
設定輸入和輸出編碼參數,這些參數由二進位區塊的 Base64 編碼表示形式表示。此二進位區塊的前 16 個位元組用作主金鑰,後續 14 個位元組用作主鹽。
subfile,,start,183241728,end,366490624,,:archive.tar
虛擬擷取檔案或其他串流的區段。基礎串流必須是可搜尋的。
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
start
擷取區段的開始偏移量,以位元組為單位。
tcp://hostname:port[?options]
即時傳輸協議。
end
- 擷取區段的結束偏移量,以位元組為單位。如果設定為 0,則擷取到檔案結尾。
從 DVD VOB 檔案擷取章節(開始和結束扇區從外部取得並乘以 2048)
- 直接從 TAR 封存檔播放 AVI 檔案
從開始偏移量到結尾播放 MPEG-TS 檔案
- 將輸出寫入多個協議。個別輸出以 | 分隔
傳輸控制協議。
- pbkeylen=bytes
TCP URL 的所需語法為
支援的選項列表如下。
- listen=2|1|0
偵聽連入連線。0 停用偵聽,1 在單用戶端模式下啟用偵聽,2 在多用戶端模式下啟用偵聽。預設值為 0。
- pkt_size=bytes
local_addr=addr
- peerlatency=microseconds
用於 TCP Socket 連線的網路介面的本機 IP 位址。
- 播放器 swf 檔案的 URL,自動計算雜湊值/大小。
rtmp_tcurl
目標串流的 URL。預設值為 proto://host[:port]/app。
- local_port=port
用於 TCP Socket 連線的本機連接埠。
timeout
ffmpeg -i input -f format tcp://hostname:port?listen ffplay tcp://hostname:port
3.42 tls
設定引發錯誤逾時時間,以微秒為單位表示。
此選項僅在讀取模式下相關:如果在超過此時間間隔內沒有資料到達,則引發錯誤。
tls://hostname:port[?options]
listen_timeout=milliseconds
- 設定偵聽逾時時間,以毫秒為單位表示。
recv_buffer_size
- 設定接收緩衝區大小,以位元組表示。
send_buffer_size
設定傳送緩衝區大小,以位元組表示。
- tcp_mss=bytes
設定外寄 TCP 封包的最大區段大小,以位元組表示。
- 以下範例示範如何使用
ffmpeg
設定偵聽 TCP 連線,然後使用ffplay
存取該連線 傳輸層安全性 (TLS) / 安全 Socket 層 (SSL)
- TLS/SSL URL 的所需語法為
以下參數可以透過命令列選項設定(或在程式碼中透過
AVOption
設定)- http_proxy
ca_file, cafile=filename
包含要視為受信任的憑證授權單位 (CA) 根憑證的檔案。如果連結的 TLS 函式庫包含預設值,則可能不需要指定此選項即可使驗證正常運作,但並非所有函式庫和設定都內建預設值。檔案必須採用 OpenSSL PEM 格式。
tls_verify=1|0
ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
如果啟用,則嘗試驗證我們正在通訊的對等方。請注意,如果使用 OpenSSL,則目前僅確保對等方憑證由 CA 資料庫中的其中一個根憑證簽署,但不驗證憑證是否實際符合我們嘗試連線的主機名稱。(對於其他後端,也會驗證主機名稱。)
ffplay tls://hostname:port
3.43 udp
預設情況下停用此選項,因為在許多情況下,它需要呼叫者提供 CA 資料庫。
cert_file, cert=filename
udp://hostname:port[?options]
即時傳輸協議。
包含要在與對等方握手中使用的憑證的檔案。(當作為伺服器在偵聽模式下運作時,對等方更常需要此選項,而用戶端憑證僅在某些設定中是強制性的。)
end
- 將本機 RTCP 連接埠設定為 n。
key_file, key=filename
- 包含憑證的私密金鑰的檔案。
listen=1|0
- 如果啟用,則偵聽提供的連接埠上的連線,並在握手中假設伺服器角色,而不是用戶端角色。
http_proxy
- 要通過其建立通道的 HTTP Proxy,例如
http://example.com:1234
。Proxy 必須支援 CONNECT 方法。 命令列範例
- 將封包傳送到最新接收封包的來源位址(如果設定為 1),或傳送到預設遠端位址(如果設定為 0)。
localport=n
- 若要建立提供輸入串流的 TLS/SSL 伺服器。
若要使用
ffplay
從 TLS/SSL 伺服器播放串流- 用戶資料包協定。
UDP URL 的所需語法為
- 工作階段宣告協定 (RFC 2974)。這在 libavformat 中並非嚴格來說是協議處理常式,而是一個混合器和解多工器。它用於 RTP 串流的信號傳輸,方法是在單獨的連接埠上定期宣告串流的 SDP。
如果系統上啟用了執行緒,則會使用循環緩衝區來儲存連入資料,這允許使用者減少由於 UDP Socket 緩衝區溢位而造成的資料遺失。fifo_size 和 overrun_nonfatal 選項與此緩衝區相關。
- max_buffer_size
設定 UDP 最大 Socket 緩衝區大小(以位元組為單位)。這用於設定接收或傳送緩衝區大小,具體取決於 Socket 的用途。輸出預設值為 32 KB,輸入預設值為 384 KB。另請參閱 fifo_size。
- bitrate=bitrate
如果設定為非零值,則如果輸入有足夠的封包來維持,則輸出將具有指定的恆定位元率。
- burst_bits=bits
當使用 bitrate 時,這會指定封包叢發中的最大位元數。
- localport=port
覆寫要綁定的本機 UDP 連接埠。
- overrun_nonfatal=1|0
pkt_size=size
- pbkeylen=bytes
TCP URL 的所需語法為
支援的選項列表如下。
- 設定 UDP 封包的大小(以位元組為單位)。
reuse=1|0
明確允許或不允許重複使用 UDP Socket。
3.43.1 範例
- ttl=ttl
ffmpeg -i input -f format udp://hostname:port
- 設定存活時間值(僅限多點傳播)。
ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
- connect=1|0
ffmpeg -i udp://[multicast-address]:port ...
3.44 unix
使用 connect()
初始化 UDP Socket。在這種情況下,稍後無法使用 ff_udp_set_remote_url 變更目標位址。如果一開始不知道目標位址,也可以在 ff_udp_set_remote_url 中指定此選項。這允許使用 getsockname 找出封包的來源位址,並使寫入在收到「目標不可達」時傳回 AVERROR(ECONNREFUSED)。對於接收,這提供了僅接收來自指定對等位址/連接埠的封包的優點。
sources=address[,address]
unix://filepath
listen_timeout=milliseconds
- timeout
僅接收從指定位址傳送的封包。在多點傳播的情況下,也僅訂閱來自這些位址的多點傳播流量。
- listen
block=address[,address]
3.45 zmq
忽略從指定位址傳送的封包。在多點傳播的情況下,也排除多點傳播訂閱中的來源位址。
fifo_size=units
設定 UDP 接收循環緩衝區大小,以大小為 188 位元組的封包數表示。如果未指定,則預設為 7*4096。
zmq:tcp://ip-address:port
overrun_nonfatal=1|0
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
在 UDP 接收循環緩衝區溢位的情況下繼續運作。預設值為 0。
ffplay zmq:tcp://127.0.0.1:5555
broadcast=1|0
明確允許或不允許 UDP 廣播。
請注意,廣播在具有廣播風暴保護的網路上可能無法正常運作。
- pkt_size
使用
ffmpeg
透過 UDP 串流傳輸到遠端端點
4 參見
使用 ffmpeg
透過 UDP 以 mpegts 格式串流傳輸,使用 188 大小的 UDP 封包,使用大型輸入緩衝區
5 作者
使用 ffmpeg
透過 UDP 從遠端端點接收
Unix 本機 Socket
Unix Socket URL 的所需語法為
timeout
逾時時間(以毫秒為單位)。