FFmpeg 協議文件

目錄

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

其中 URL1URL2、...、URLN 是要串連的資源的 URL,每個 URL 都可能指定不同的協議。

例如,若要使用 ffplay 讀取檔案序列 split1.mpegsplit2.mpegsplit3.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.mpegsplit2.mpegsplit3.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_headersicy_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 中指定的即時串流。如果找不到該名稱的即時串流,則會播放錄製的串流。其他可能的值為 liverecorded

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 變體,serverportappplaypath 的含義與原生 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 位址,用於傳送封包或加入多點傳播群組。

  1. timeout=n
  2. 將 Socket I/O 操作逾時時間(以微秒為單位)設定為 n
  3. 重要注意事項

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 分別選擇要顯示的視訊和音訊串流,並且可以透過按下 va 即時切換。

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

以下範例全部使用 ffplayffmpeg 工具。

透過 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_sizemss。預設值相對較大,因此除非您設定非常大的接收器緩衝區,否則您無需變更此選項。預設值為 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

基於時間戳記的封包傳遞延遲。用於吸收遺失的封包重傳的叢發。此旗標將 rcvlatencypeerlatency 設定為相同的值。請注意,在 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
安全即時傳輸協定。
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_sizeoverrun_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

逾時時間(以毫秒為單位)。