FFmpeg プロトコル ドキュメント
1 概要
このドキュメントでは、libavformat ライブラリが提供する入力・出力プロトコルについて説明します。
2 プロトコルのオプション
libavformat ライブラリは、すべてのプロトコルに設定できる汎用のグローバルオプションをいくつか提供しています。さらに各プロトコルは、そのコンポーネント固有のいわゆるプライベートオプションをサポートする場合があります。
オプションは、FFmpeg ツールで -option value の形で指定するか、AVFormatContext のオプションに明示的に値を設定するか、プログラムから利用する場合は libavutil/opt.h API を使って設定できます。
サポートされるオプションの一覧を次に示します。
protocol_whitelist list (input)
許可するプロトコルを "," 区切りのリストで指定します。"ALL" はすべてのプロトコルにマッチします。"-" を前置したプロトコルは無効化されます。既定ではすべてのプロトコルが許可されるが、別のプロトコルから利用されるプロトコル(ネストされたプロトコル)は、プロトコルごとのサブセットに制限されます。
3 プロトコル
プロトコルは FFmpeg 内の設定可能な要素で、特定のプロトコルを必要とするリソースへのアクセスを可能にします。
FFmpeg のビルドを構成すると、サポートされるすべてのプロトコルが既定で有効になります。利用可能なものはすべて configure オプション "–list-protocols" で一覧表示できます。
configure オプション "–disable-protocols" ですべてのプロトコルを無効化し、"–enable-protocol=PROTOCOL" オプションで個別に有効化できます。また "–disable-protocol=PROTOCOL" オプションで特定のプロトコルを無効化することもできます。
ff* ツールの "-protocols" オプションを使うと、サポートされるプロトコルの一覧が表示されます。
すべてのプロトコルは次のオプションを受け付けます。
rw_timeout
(ネットワークの)読み書き操作が完了するまで待機する最大時間(マイクロ秒単位)。
現在利用可能なプロトコルの説明を次に示します。
3.1 amqp
Advanced Message Queueing Protocol (AMQP) バージョン 0-9-1 は、ブローカーを介した publish-subscribe 型の通信プロトコルです。
AMQP をサポートするには、FFmpeg を –enable-librabbitmq でコンパイルする必要があります。別途 AMQP ブローカーも実行しておく必要があります。オープンソースの AMQP ブローカーの例として RabbitMQ があります。
ブローカーを起動したあと、FFmpeg クライアントは次のコマンドでブローカーへデータをストリーミングできます。
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
ここで hostname と port(既定は 5672)はブローカーのアドレスです。クライアントは認証用に user/password を設定することもできます。どちらの既定値も "guest" です。ブローカー上の仮想ホスト名は vhost で設定できます。既定値は "/" です。
複数のサブスクライバーが次のコマンドでブローカーからストリーミングできます。
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
RabbitMQ では、ブローカーへ publish されたすべてのデータは特定の exchange を経由して流れ、各サブスクライバークライアントには専用のキュー(バッファ)が割り当てられます。パケットが exchange に到着すると、exchange と routing_key フィールドに応じてクライアントのキューへコピーされることがあります。
次のオプションがサポートされます。
exchange
ブローカー上で使用する exchange を設定します。RabbitMQ にはあらかじめ定義された exchange がいくつかあります。"amq.direct" は既定の exchange で、publisher と subscriber の routing_key が一致している必要があります。"amq.fanout" はブロードキャスト操作と同じ(つまり routing_key に関係なく、fanout exchange 上のすべてのキューへデータが転送されます)。"amq.topic" は "amq.direct" に似ているが、より複雑なパターンマッチングが可能です(詳細は RabbitMQ のドキュメントを参照)。
routing_key
ルーティングキーを設定します。既定値は "amqp" です。ルーティングキーは "amq.direct" と "amq.topic" の exchange で、パケットをサブスクライバーのキューに書き込むかどうかを判断するために使われます。
pkt_size
ブローカーへ送受信する各パケットの最大サイズ。既定は 131072 です。最小は 4096 で、最大は int で表現できる任意の大きな値です。パケットを受信する際、これは FFmpeg 内部のバッファサイズを設定します。ブローカーへ publish されるパケットのサイズ以上に設定すべきです。さもないと受信メッセージが切り詰められ、デコードエラーの原因となります。
connection_timeout
ブローカーへの初回接続時のタイムアウト(秒単位)。既定値は rw_timeout、rw_timeout が設定されていない場合は 5 秒です。
delivery_mode mode
ブローカーへ送る各メッセージの配送モードを設定します。次の値を受け付けます。
‘persistent’
配送モードを "persistent" (2) に設定します。これが既定値です。ブローカーの設定によっては、メッセージがブローカーのディスクへ書き込まれることがあります。
‘non-persistent’
配送モードを "non-persistent" (1) に設定します。ブローカーがメモリ不足にならない限り、メッセージはブローカーのメモリ内に留まります。
3.2 async
入力ストリーム向けの非同期データ充填ラッパー。
I/O 操作を demux スレッドから切り離すため、バックグラウンドスレッドでデータを充填します。
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 であり、それぞれ異なるプロトコルを指定してもかまいません。
例えば split1.mpeg, split2.mpeg, split3.mpeg という一連のファイルを ffplay で読み込むには、次のコマンドを使います。
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
多くのシェルで特別な意味を持つ文字 "|" はエスケープが必要になる場合がある点に注意してください。
3.6 concatf
改行区切りのリソース一覧を用いる物理的連結プロトコル。
複数のリソースをひとつのリソースであるかのように、順番に読み込み・シークします。
このプロトコルが受け付ける URL の構文は次のとおりです。
concatf:URL
ここで URL は、連結するリソースを改行区切りで列挙したリストを含む url であり、各リソースはそれぞれ異なるプロトコルを指定してもかまいません。特殊文字はバックスラッシュまたはシングルクォートでエスケープする必要があります。(ffmpeg-utils) ffmpeg-utils(1) マニュアルの "Quoting and escaping" の節 を参照してください。
例えば split1.mpeg, split2.mpeg, split3.mpeg という一連のファイルを split.txt ファイル内に1行ずつ列挙し、それを ffplay で読み込むには、次のコマンドを使います。
ffplay concatf:split.txt
ここで split.txt には次の行が含まれます。
split1.mpeg
split2.mpeg
split3.mpeg
3.7 crypto
AES 暗号化ストリームの読み込みプロトコル。
受け付けるオプションは次のとおりです。
key
与えられた16進表現から、AES 復号鍵のバイナリブロックを設定します。
iv
与えられた16進表現から、AES 復号の初期化ベクトルのバイナリブロックを設定します。
受け付ける URL 形式:
crypto:URL
crypto+URL
3.8 data
URI にインラインで埋め込まれたデータ。http://en.wikipedia.org/wiki/Data_URI_scheme を参照してください。
例えば、インラインで与えた GIF ファイルを ffmpeg で変換するには次のようにします。
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 系システム向けのビルドでは通常そうなりません)。
例えば input.mpeg というファイルから ffmpeg で読み込むには次のコマンドを使います。
ffmpeg -i file:input.mpeg output.mpeg
このプロトコルは次のオプションを受け付けます。
truncate
1 に設定すると、書き込み時に既存ファイルを切り詰めます。0 にすると切り詰めを防ぎます。既定値は 1 です。
blocksize
I/O 操作の最大ブロックサイズ(バイト単位)を設定します。既定値は INT_MAX で、要求するブロックサイズを制限しません。この値を適度に小さくすると、ユーザーによる終了要求への反応時間が改善されます。低速なメディア上のファイルで有用です。
follow
1 に設定すると、ファイル末尾に達した際に読み込みを再試行し、まだ書き込み中のファイルを読み込めるようにします。これを終了させるには、rw_timeout オプションを使うか、(API 利用者の場合は)割り込みコールバックを使う必要があります。このオプションを設定すると、ファイルシステムが報告するファイルサイズも無視されます。
seekable
ファイルでシーク可能と通知するかどうかを制御します。0 はシーク不可、-1 は自動(通常ファイルはシーク可能、名前付きパイプはシーク不可)を意味します。
多くの demuxer はシーク可能なリソースとシーク不可なリソースを異なる方法で扱います。これを上書きすると、一部の機能(正確なシークなど)を失う代わりに、特定ファイルのオープンが高速化される場合があります。
pkt_size
ファイル I/O で使う最大パケットサイズを設定します。小さい値はメモリ使用量を削減し得ます。大きい値は、特にネットワークファイルシステムでスループットを向上させ得ます。
読み込みの場合、明示的に設定すると、既定の内部バッファサイズ(32 KB)を上書きし、1回の操作で読み込む最大データ量を制限します。
書き込みの場合、これは各書き込み操作のサイズを設定します。既定は通常ファイルで 256 KB、それ以外では 32 KB です。
3.11 ftp
FTP (File Transfer Protocol)。
FTP プロトコルを使ってリモートリソースから読み込む、またはリモートリソースへ書き込みます。
次の構文が必要です。
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
このプロトコルは次のオプションを受け付けます。
timeout
低レベルの操作で使われるソケット I/O 操作のタイムアウト(マイクロ秒単位)を設定します。既定では -1 で、タイムアウトを指定しないことを意味します。
ftp-user
FTP サーバーへの認証に使うユーザーを設定します。これは FTP URL 内の user によって上書きされます。
ftp-password
FTP サーバーへの認証に使うパスワードを設定します。これは FTP URL 内の password によって上書きされ、user が設定されていない場合は ftp-anonymous-password によって上書きされます。
ftp-anonymous-password
anonymous ユーザーとしてログインする際に使うパスワード。通常はメールアドレスを使うべきです。
ftp-write-seekable
エンコード中の接続のシーク可能性を制御します。1 に設定するとリソースはシーク可能とみなされ、0 に設定するとシーク不可とみなされます。既定値は 0 です。
注意: このプロトコルは出力としても使えるが、特別な配慮(テスト、サーバー設定のカスタマイズなど)をしない限り、そうしないことを推奨します。FTP サーバーによってシーク操作時の挙動はさまざまです。サーバーの制限により、ff* ツールが不完全なコンテンツを生成することがあります。
3.12 gopher
Gopher プロトコル。
3.13 gophers
Gophers プロトコル。
TLS でカプセル化した Gopher プロトコル。
3.14 http
HTTP (Hyper Text Transfer Protocol)。
このプロトコルは次のオプションを受け付けます。
seekable
接続のシーク可能性を制御します。1 に設定するとリソースはシーク可能とみなされ、0 に設定するとシーク不可とみなされ、-1 に設定するとシーク可能かどうかを自動検出しようとします。既定値は -1 です。
chunked_post
1 に設定すると POST で chunked Transfer-Encoding を使います。既定は 1 です。
http_proxy
トンネルに使う HTTP プロキシを設定します。例: http://example.com:1234
headers
カスタム HTTP ヘッダを設定します。組み込みの既定ヘッダを上書きできます。値はヘッダをエンコードした文字列でなければなりません。
content_type
POST メッセージ用、または listen モード用に特定の content type を設定します。
user_agent
User-Agent ヘッダを上書きします。指定しない場合、プロトコルは libavformat のビルドを表す文字列("Lavf/
referer
Referer ヘッダを設定します。HTTP リクエストに 'Referer: URL' ヘッダを含めます。
multiple_requests
1 に設定すると持続的接続(persistent connection)を使います。既定は 0 です。
request_size
行うリクエストのサイズを制限します。これは、際限のない range リクエストを絞り込む一部の問題のあるサーバーに対して、また頻繁にシークすることが予想される場合に有用です。既定では無効です(0 に設定)。
このオプションを有効にする場合は、multiple_requests オプションも有効にし、さらに short_seek_size を同じ値かそれ以上に設定することを強く推奨します。そうすることで、FFmpeg は可能な限り単一の HTTP 接続を再利用できます。
initial_request_size
初回リクエストのサイズを制限します。request_size と似ているが、初回のフォーマット解析中にのみ使われます。ヘッダ解析中に頻繁なシークを必要とする MXF や MOV のようなフォーマットで有用です。demuxer が(間にシークを挟まずに)このサイズより大きい読み込みリクエストを行うまで有効で、それ以降は通常どおりのリクエストを続けます。既定では無効です(0 に設定)。
このオプションを有効にする場合は、multiple_requests オプションも有効にし、さらに short_seek_size を同じ値かそれ以上に設定することを強く推奨します。
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 認証タイプを設定します。Digest 用のオプションはありません。この方式はまずサーバーから nonce パラメータを取得する必要があり、Basic のようにすぐには使えないためです。
none
HTTP 認証タイプを自動的に選びます。これが既定です。
basic
HTTP basic 認証を選びます。
Basic 認証は、クライアントのユーザー名とパスワードを含む Base64 エンコードされた文字列を送信します。Base64 は暗号化の一種ではなく、ユーザー名とパスワードを平文で送るのと同じとみなすべきです(Base64 は可逆エンコードです)。リソースを保護する必要がある場合は、basic 認証以外の認証方式の利用を強く検討してください。Basic 認証は HTTPS/TLS とともに使うべきです。こうした追加のセキュリティ強化がなければ、機密性の高い情報や価値ある情報の保護に basic 認証を使うべきではありません。
send_expect_100
POST に対して Expect: 100-continue ヘッダを送ります。1 に設定すると送り、0 に設定すると送らず、-1 に設定すると適用可能なら送ろうとします。既定値は -1 です。
location
content location を格納する、エクスポート用の辞書。C API でのみ有用です。
offset
初期バイトオフセットを設定します。
end_offset
このオフセットより前のバイトにリクエストを制限しようとします。
method
クライアントオプションとして使う場合、リクエストの HTTP メソッドを設定します。
サーバーオプションとして使う場合、クライアントに期待する HTTP メソッドを設定します。期待した HTTP メソッドと受信した HTTP メソッドが一致しない場合、クライアントには Bad Request レスポンスが返されます。未設定の場合、現時点では 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 ではまだ実装されておらず、コマンドラインオプションとして使ってはなりません。
# サーバー側(送信):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://server:port
# クライアント側(受信):
ffmpeg -i http://server:port -c copy somefile.ogg
# クライアントは wget でも行える:
wget http://server:port -O somefile.ogg
# サーバー側(受信):
ffmpeg -listen 1 -i http://server:port -c copy somefile.ogg
# クライアント側(送信):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://server:port
# クライアントは wget でも行える:
wget --post-file=somefile.ogg http://server:port
resource
実験的な HTTP サーバーを使用中に、クライアントが要求したリソース。
reply_code
実験的な HTTP サーバーを使用中に、クライアントへ返す HTTP コード。
short_seek_size
シークして新しい HTTP リクエストを行うより先読みを優先すべき閾値(バイト単位)を設定します。これは例えば、大きな映像パケットとその間にある小さな音声パケットの読み込みで、同じ接続を確実に使うために有用です。
3.14.1 HTTP Cookie
一部の HTTP リクエストは、リクエストとともに cookie の値が渡されないと拒否されます。cookies オプションでこれらの cookie を指定できます。少なくとも各 cookie は path と domain に加えて value を指定しなければなりません。domain と path の両方にマッチする HTTP リクエストには、HTTP Cookie ヘッダフィールドに cookie の値が自動的に含まれます。複数の cookie は改行で区切れます。
cookie を指定してストリームを再生するのに必要な構文は次のとおりです。
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
3.15 Icecast
Icecast プロトコル(Icecast サーバーへのストリーミング)
このプロトコルは次のオプションを受け付けます。
ice_genre
ストリームのジャンルを設定します。
ice_name
ストリームの名前を設定します。
ice_description
ストリームの説明を設定します。
ice_url
ストリームのウェブサイト URL を設定します。
ice_public
ストリームを公開するかどうかを設定します。既定は 0 です(非公開)。
user_agent
User-Agent ヘッダを上書きします。指定しない場合、"Lavf/
password
Icecast のマウントポイントのパスワードを設定します。
content_type
ストリームの content type を設定します。audio/mpeg と異なる場合は設定しなければなりません。
legacy_icecast
HTTP PUT メソッドをサポートせず SOURCE メソッドを使う、2.4.0 未満の Icecast バージョンのサポートを有効にします。
tls
Icecast への TLS (HTTPS) 接続を確立します。
icecast://[username[:password]@]server:port/mountpoint
3.16 ipfs
InterPlanetary File System (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.17 mmst
TCP 上の MMS (Microsoft Media Server) プロトコル。
3.18 mmsh
HTTP 上の MMS (Microsoft Media Server) プロトコル。
必要な構文は次のとおりです。
mmsh://server[:port][/app][/playpath]
3.19 md5
MD5 出力プロトコル。
書き込むデータの MD5 ハッシュを計算し、クローズ時に指定の出力先(指定がなければ stdout)へ書き出します。実際のファイルを書き込まずに muxer をテストするのに使えます。
例を次に示します。
# エンコードした AVI ファイルの MD5 ハッシュをファイル output.avi.md5 へ書き込む。
ffmpeg -i input.flv -f avi -y md5:output.avi.md5
# エンコードした AVI ファイルの MD5 ハッシュを stdout へ書き込む。
ffmpeg -i input.flv -f avi -y md5:
一部のフォーマット(典型的には MOV)は出力プロトコルがシーク可能であることを要求するため、MD5 出力プロトコルでは失敗する点に注意してください。
3.20 pipe
UNIX パイプアクセスプロトコル。
UNIX パイプから読み込む、またはパイプへ書き込みます。
受け付ける構文は次のとおりです。
pipe:[number]
fd を指定しない場合、number はパイプのファイルディスクリプタに対応する番号です(例: stdin が 0、stdout が 1、stderr が 2)。number を指定しない場合、既定では書き込みに stdout のファイルディスクリプタ、読み込みに stdin が使われます。
例えば ffmpeg で stdin から読み込むには次のようにします。
cat test.wav | ffmpeg -i pipe:0
# ...これは次と同じ...
cat test.wav | ffmpeg -i pipe:
ffmpeg で stdout へ書き込むには次のようにします。
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
# ...これは次と同じ...
ffmpeg -i test.wav -f avi pipe: | cat > test.avi
このプロトコルは次のオプションを受け付けます。
blocksize
I/O 操作の最大ブロックサイズ(バイト単位)を設定します。既定値は INT_MAX で、要求するブロックサイズを制限しません。この値を適度に小さくすると、ユーザーによる終了要求への反応時間が改善されます。データ転送が遅い場合に有用です。
fd
ファイルディスクリプタを設定します。
一部のフォーマット(典型的には MOV)は出力プロトコルがシーク可能であることを要求するため、pipe 出力プロトコルでは失敗する点に注意してください。
3.21 prompeg
Pro-MPEG Code of Practice #3 Release 2 FEC プロトコル。
Pro-MPEG CoP#3 FEC は、RTP 上で送られる MPEG-2 トランスポートストリーム向けの2次元パリティチェック型前方誤り訂正(FEC)機構です。
このプロトコルは rtp_mpegts muxer および 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.22 rist
Reliable Internet Streaming Transport プロトコル
受け付けるオプションは次のとおりです。
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.23 rtmp
Real-Time Messaging Protocol。
Real-Time Messaging Protocol (RTMP) は、TCP/IP ネットワーク上でマルチメディアコンテンツをストリーミングするのに使われます。
必要な構文は次のとおりです。
rtmp://[username:password@]server[:port][/app][/instance][/playpath]
受け付けるパラメータは次のとおりです。
username
任意のユーザー名(主に publish 用)。
password
任意のパスワード(主に publish 用)。
server
RTMP サーバーのアドレス。
port
使用する TCP ポート番号(既定は 1935)です。
app
アクセスするアプリケーションの名前。通常は RTMP サーバー上でアプリケーションがインストールされているパス(例: /ondemand/、/flash/live/ など)に対応します。rtmp_app オプションで URI から解析された値を上書きすることもできます。
playpath
app で指定したアプリケーションを基準とした、再生するリソースのパスまたは名前。"mp4:" を前置できます。rtmp_playpath オプションで URI から解析された値を上書きすることもできます。
listen
サーバーとして動作し、着信接続を待ち受けます。
timeout
着信接続を待つ最大時間。listen を含意します。
さらに、次のパラメータをコマンドラインオプション(またはコード内では 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 のように指定します。各値の先頭には型を示す1文字を付けます。B は Boolean、N は number、S は string、O は object、Z は null を表し、その後にコロンを続けます。Boolean では、データは FALSE が 0、TRUE が 1 でなければなりません。同様に Object では、データはオブジェクトの終了が 0、開始が 1 でなければなりません。サブオブジェクト内のデータ項目には名前を付けられ、型の前に 'N' を付けて値の前に名前を指定します(つまり NB:myFlag:1)。このオプションは複数回使って任意の AMF シーケンスを構築できます。
rtmp_enhanced_codecs
拡張 RTMP ストリームでクライアントがサポートを表明するコーデックのリストを指定します。このオプションは fourcc 値のカンマ区切りリストで設定すべきで、複数コーデックなら hvc1,av01,vp09、単一コーデックなら hvc1 のように指定します。指定したリストは Connect Command Message の "fourCcLive" プロパティに提示されます。
rtmp_flashver
SWF プレイヤーの実行に使う Flash プラグインのバージョン。既定は LNX 9,0,124,2 です。(publish 時の既定は FMLE/3.0 です(compatible;
rtmp_flush_interval
同一リクエストでフラッシュするパケット数(RTMPT のみ)。既定は 10 です。
rtmp_live
メディアがライブストリームであることを指定します。ライブストリームでは再開やシークはできません。既定値は any で、subscriber はまず playpath で指定したライブストリームの再生を試みます。その名前のライブストリームが見つからない場合は、録画済みストリームを再生します。他に取れる値は live と recorded です。
rtmp_pageurl
メディアが埋め込まれていたウェブページの URL。既定では何も送信されません。
rtmp_playpath
再生または publish するストリーム識別子。このオプションは URI で指定したパラメータを上書きします。
rtmp_subscribe
subscribe するライブストリームの名前。既定では何も送信されません。このオプションを指定した場合、または rtmp_live が live に設定されている場合にのみ送信されます。
rtmp_swfhash
展開後の SWF ファイルの SHA256 ハッシュ(32 バイト)。
rtmp_swfsize
展開後の SWF ファイルのサイズ。SWFVerification に必要です。
rtmp_swfurl
メディア用の SWF プレイヤーの URL。既定では何も送信されません。
rtmp_swfverify
プレイヤーの swf ファイルへの URL。ハッシュ/サイズを自動的に計算します。
rtmp_tcurl
対象ストリームの URL。既定は proto://host[:port]/app です。
tcp_nodelay=1|0
TCP_NODELAY を設定して Nagle アルゴリズムを無効にします。既定値は 0 です。
補足: ソケットへの書き込みは現状システムコールを最小化するよう最適化されておらず、TCP_NODELAY の効率/効果を低下させます。
tcp_keepalive=1|0
TCP keepalive 機構を有効にし、応答のない相手を検出するとともに、長時間アイドルな接続の維持を助けます。既定値は 0 です。
有効化/無効化できるのは基本的な keepalive オプション(SO_KEEPALIVE)のみです。TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT といったプラットフォーム固有のチューニングパラメータは設定できず、オペレーティングシステムの既定値が使われます。
例えば ffplay で RTMP サーバー "myserver" のアプリケーション "vod" から "sample" という名前のマルチメディアリソースを読み込むには次のようにします。
ffplay rtmp://myserver/vod/sample
パスワード保護されたサーバーへ、playpath と app の名前を別々に渡して publish するには次のようにします。
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
3.24 rtmpe
Encrypted Real-Time Messaging Protocol。
Encrypted Real-Time Messaging Protocol (RTMPE) は、標準的な暗号プリミティブの枠内でマルチメディアコンテンツをストリーミングするのに使われます。Diffie-Hellman 鍵交換と HMACSHA256 から成り、RC4 鍵のペアを生成します。
3.25 rtmps
セキュアな SSL 接続上の Real-Time Messaging Protocol。
Real-Time Messaging Protocol over SSL (RTMPS) は、暗号化された接続を介してマルチメディアコンテンツをストリーミングするのに使われます。
3.26 rtmpt
HTTP でトンネルした Real-Time Messaging Protocol。
HTTP でトンネルした Real-Time Messaging Protocol (RTMPT) は、ファイアウォールを越えるために HTTP リクエスト内でマルチメディアコンテンツをストリーミングするのに使われます。
3.27 rtmpte
HTTP でトンネルした Encrypted Real-Time Messaging Protocol。
HTTP でトンネルした Encrypted Real-Time Messaging Protocol (RTMPTE) は、ファイアウォールを越えるために HTTP リクエスト内でマルチメディアコンテンツをストリーミングするのに使われます。
3.28 rtmpts
HTTPS でトンネルした Real-Time Messaging Protocol。
HTTPS でトンネルした Real-Time Messaging Protocol (RTMPTS) は、ファイアウォールを越えるために HTTPS リクエスト内でマルチメディアコンテンツをストリーミングするのに使われます。
3.29 libsmbclient
libsmbclient を使うと CIFS/SMB ネットワークリソースを操作できます。
次の構文が必要です。
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
このプロトコルは次のオプションを受け付けます。
timeout
低レベルの操作で使われるソケット I/O 操作のタイムアウト(ミリ秒単位)を設定します。既定では -1 で、タイムアウトを指定しないことを意味します。
truncate
1 に設定すると、書き込み時に既存ファイルを切り詰めます。0 にすると切り詰めを防ぎます。既定値は 1 です。
workgroup
接続に使うワークグループを設定します。既定ではワークグループは指定されません。
詳細は http://www.samba.org/ を参照してください。
3.30 libssh
libssh を介した Secure File Transfer Protocol
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
3.31 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
librtmp を通じてサポートされる Real-Time Messaging Protocol とその派生。
構成時に librtmp のヘッダとライブラリが存在する必要があります。"–enable-librtmp" を使ってビルドを明示的に構成する必要があります。有効にすると、これがネイティブの RTMP プロトコルを置き換えます。
このプロトコルは、RTMP、HTTP でトンネルした RTMP (RTMPT)、暗号化 RTMP (RTMPE)、SSL/TLS 上の RTMP (RTMPS)、およびこれら暗号化版のトンネル派生(RTMPTE、RTMPTS)をサポートするために必要な、大半のクライアント機能と一部のサーバー機能を提供します。
必要な構文は次のとおりです。
rtmp_proto://server[:port][/app][/playpath] options
ここで rtmp_proto は各 RTMP 派生に対応する文字列 "rtmp"、"rtmpt"、"rtmpe"、"rtmps"、"rtmpte"、"rtmpts" のいずれかであり、server、port、app、playpath は 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"
3.32 rtp
Real-time Transport Protocol。
RTP URL に必要な構文は次のとおりです。
rtp://hostname[:port][?options]
port は使用する RTP ポートを指定します。
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
サポートされるオプションの一覧を次に示します。
ttl=n
TTL (Time-To-Live) 値を設定します(マルチキャストのみ)。
rtcpport=n
リモート RTCP ポートを n に設定します。
localport, local_rtpport, localrtpport=n
ローカル RTP ポートを n に設定します。
localport というオプション名の使用は非推奨で、使うべきではありません。
local_rtcpport, localrtcpport=n'
ローカル RTCP ポートを n に設定します。
pkt_size=n
最大パケットサイズ(バイト単位)を n に設定します。
buffer_size=size
UDP ソケットの最大バッファサイズ(バイト単位)を設定します。
connect=0|1
UDP ソケットに対して connect() を行う(1 に設定)か行わない(0 に設定)か。
sources=ip[,ip]
許可する送信元 IP アドレスを列挙します。
block=ip[,ip]
許可しない(ブロックする)送信元 IP アドレスを列挙します。
write_to_source=0|1
最後に受信したパケットの送信元アドレスへパケットを送る(1 に設定)か、既定のリモートアドレスへ送る(0 に設定)か。
localaddr=addr
パケット送信またはマルチキャストグループへの参加に使うネットワークインターフェースのローカル IP アドレス。
timeout=n
ソケット I/O 操作のタイムアウト(マイクロ秒単位)を n に設定します。
重要な注意点:
- rtcpport が設定されていない場合、RTCP ポートは RTP ポート値に 1 を足した値に設定されます。
- localrtpport(ローカル RTP ポート)が設定されていない場合、ローカルの RTP ポートと RTCP ポートには利用可能な任意のポートが使われます。
- localrtcpport(ローカル RTCP ポート)が設定されていない場合、ローカル RTP ポート値に 1 を足した値に設定されます。
3.33 rtsp
Real-Time Streaming Protocol。
RTSP は厳密には libavformat のプロトコルハンドラではなく、demuxer と muxer です。demuxer は通常の RTSP(RTP 上でデータを転送します。例えば Apple や Microsoft が使う)と Real-RTSP(RDT 上でデータを転送する)の両方をサポートします。
muxer は、RTSP ANNOUNCE をサポートするサーバー(現状 Darwin Streaming Server と Mischa Spiegelmock の RTSP server)へ RTSP ANNOUNCE でストリームを送るのに使えます。
RTSP url に必要な構文は次のとおりです。
rtsp://hostname[:port]/path
オプションは ffmpeg/ffplay のコマンドラインで設定するか、コード内では AVOption あるいは avformat_open_input で設定できます。
3.33.1 Muxer
次のオプションがサポートされます。
rtsp_transport
RTSP のトランスポートプロトコルを設定します。
次の値を受け付けます。
‘udp’
下位トランスポートプロトコルとして UDP を使います。
‘tcp’
下位トランスポートプロトコルとして TCP(RTSP 制御チャネル内でのインターリーブ)を使います。
既定値は ‘0’ です。
rtsp_flags
RTSP フラグを設定します。
次の値を受け付けます。
‘latm’
AAC に対して MPEG4-GENERIC の代わりに MP4A-LATM パケット化を使います。
‘rfc2190’
H.263 に対して RFC 4629 の代わりに RFC 2190 パケット化を使います。
‘skip_rtcp’
RTCP の sender report を送りません。
‘h264_mode0’
RTP 内の H.264 にモード 0 を使います。
‘send_bye’
終了時に RTCP BYE パケットを送ります。
既定値は ‘0’ です。
min_port
ローカル UDP ポートの最小値を設定します。既定値は 5000 です。
max_port
ローカル UDP ポートの最大値を設定します。既定値は 65000 です。
buffer_size
ソケットの最大バッファサイズ(バイト単位)を設定します。
pkt_size
最大送信パケットサイズ(バイト単位)を設定します。既定値は 1472 です。
3.33.2 Demuxer
次のオプションがサポートされます。
initial_pause
1 に設定すると、ストリームの再生を直ちには開始しません。既定値は 0 です。
rtsp_transport
RTSP のトランスポートプロトコルを設定します。
次の値を受け付けます。
‘udp’
下位トランスポートプロトコルとして UDP を使います。
‘tcp’
下位トランスポートプロトコルとして TCP(RTSP 制御チャネル内でのインターリーブ)を使います。
‘udp_multicast’
下位トランスポートプロトコルとして UDP マルチキャストを使います。
‘http’
下位トランスポートプロトコルとして HTTP トンネリングを使います。プロキシを通過するのに有用です。
‘https’
下位トランスポートプロトコルとして HTTPs トンネリングを使います。プロキシを通過するのに有用で、セキュリティ上の理由から広く使われています。
複数の下位トランスポートプロトコルを指定でき、その場合は1つずつ試されます(1つの設定に失敗すると次が試されます)。muxer については ‘tcp’ と ‘udp’ のみがサポートされます。
rtsp_flags
RTSP フラグを設定します。
次の値を受け付けます。
‘filter_src’
ネゴシエートした相手のアドレスとポートからのパケットのみを受け付けます。
‘listen’
サーバーとして動作し、着信接続を待ち受けます。
‘prefer_tcp’
RTSP の RTP トランスポートとして TCP が利用可能なら、RTP トランスポートにまず TCP を試します。
‘satip_raw’
demux せずに生の MPEG-TS ストリームをエクスポートします。このフラグは元の PAT/PMT/PID をそのまま保ったまま、生のストリームを単純に書き出します。
既定値は ‘none’ です。
allowed_media_types
サーバーから受け付けるメディアタイプを設定します。
次のフラグを受け付けます。
‘video’ ‘audio’ ‘data’ ‘subtitle’
既定ではすべてのメディアタイプを受け付けます。
min_port
ローカル UDP ポートの最小値を設定します。既定値は 5000 です。
max_port
ローカル UDP ポートの最大値を設定します。既定値は 65000 です。
listen_timeout
初回接続を確立する最大タイムアウト(秒単位)を設定します。listen_timeout > 0 に設定すると rtsp_flags が ‘listen’ になります。既定は -1 で、‘listen’ モードが設定されている場合は無限タイムアウトを意味します。
reorder_queue_size
順序が乱れたパケットを処理するためにバッファリングするパケット数を設定します。
timeout
ソケットの TCP I/O タイムアウトをマイクロ秒単位で設定します。
user_agent
User-Agent ヘッダを上書きします。指定しない場合、libavformat の識別子文字列が既定で使われます。
buffer_size
ソケットの最大バッファサイズ(バイト単位)を設定します。
UDP 上でデータを受信する際、demuxer は受信したパケットの順序を並べ替えようとします(パケットは順序が乱れて到着したり、完全に失われたりすることがあるため)。これは(AVFormatContext の max_delay フィールドで)最大 demux 遅延をゼロに設定すると無効化できます。
ffplay でマルチビットレートの Real-RTSP ストリームを視聴する際、表示するストリームは映像と音声でそれぞれ -vst n と -ast n で選択でき、v と a を押すことで途中で切り替えられます。
3.33.3 例
次の例はいずれも ffplay と ffmpeg ツールを使います。
-
最大並べ替え遅延 0.5 秒で UDP 上のストリームを視聴します。
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 output
3.34 sap
Session Announcement Protocol (RFC 2974)。これは厳密には libavformat のプロトコルハンドラではなく、muxer と demuxer です。RTP ストリームのシグナリングに使われ、ストリームの SDP を別ポート上で定期的にアナウンスします。
3.34.1 Muxer
muxer に与える SAP url の構文は次のとおりです。
sap://destination[:port][?options]
RTP パケットは destination のポート port へ送られます。port を指定しない場合はポート 5004 へ送られます。options は & 区切りのリストです。次のオプションがサポートされます。
announce_addr=address
アナウンスの送信先 IP アドレスを指定します。省略すると、アナウンスは一般的に使われる SAP アナウンス用マルチキャストアドレス 224.2.127.254 (sap.mcast.net) へ送られます。destination が IPv6 アドレスの場合は ff0e::2:7ffe へ送られます。
announce_port=port
アナウンスを送るポートを指定します。指定しない場合は既定で 9875 です。
ttl=ttl
アナウンスと RTP パケットの time to live 値を指定します。既定は 255 です。
same_port=0|1
1 に設定すると、すべての RTP ストリームを同じポートペアで送ります。0(既定)の場合、すべてのストリームは固有のポートで送られ、各ストリームは前のストリームより 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]
3.34.2 Demuxer
demuxer に与える SAP url の構文は次のとおりです。
sap://[address][:port]
address はアナウンスを待ち受けるマルチキャストアドレスです。省略すると既定の 224.2.127.254 (sap.mcast.net) が使われます。port は待ち受けるポートで、省略すると 9875。
demuxer は与えられたアドレスとポートでアナウンスを待ち受けます。アナウンスを受信すると、その特定のストリームの受信を試みます。
コマンドライン例を次に示します。
通常の SAP マルチキャストアドレスでアナウンスされた最初のストリームを再生します。
ffplay sap://
既定の IPv6 SAP マルチキャストアドレスのいずれかでアナウンスされた最初のストリームを再生します。
ffplay sap://[ff0e::2:7ffe]
3.35 sctp
Stream Control Transmission Protocol。
受け付ける URL 構文は次のとおりです。
sctp://host:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
サポートされるオプションの一覧を次に示します。
listen
何らかの値を設定すると、着信接続を待ち受けます。既定では発信接続を行います。
max_streams
ストリームの最大数を設定します。既定では上限を設定しません。
3.36 shared
入力ストリーム向けの、スレッドセーフで永続的なプロセス間キャッシュラッパー。入力ストリームを指定ディレクトリ内のファイルにキャッシュします。これは cache に似ているが、ディスク上に永続的なキャッシュを持ち、複数のプロセスや demuxer 間で(同時にでも)共有できます。
キャッシュのファイル名は入力 URL をハッシュして得られるため、同じ URL を異なるコンテンツに使うと(例えばストリーム ID の選択に余分な POST データを使った結果として)衝突の危険がいくらかあります。これを避けるため、このプロトコルはコンテンツを一意に識別する URL に対してのみ使ってください。さもないとソースが入り混じった壊れたデータが得られる場合があります。
受け付けるオプションは次のとおりです。
cache_dir
キャッシュファイルを保存するディレクトリのパス。このオプションは必須です。
block_shift
内部の読み書きに使うブロックサイズのシフト係数(log2)。既定は 15、すなわち 32KB ブロックです。既存のキャッシュファイル作成時に指定された値と一致しない場合は、以前に指定された値が代わりに使われます。
read_only
true にすると、共有キャッシュを読み込みに使うが、新しいブロックの書き込みは行いません。既定は false です。このオプションを有効にしても、キャッシュファイルがまだ存在しない場合は初期化される点に注意してください。
cache_verify
true にすると、キャッシュから読み込んだデータを元の入力ストリームと照合し、不一致があれば報告します。これを行うとキャッシュ層は実質的に無意味になる点に注意してください。これは純粋にデバッグ用のオプションです。
cache_timeout
ゼロ以外の値に設定すると、別のプロセスが同時に同じブロックを取得してキャッシュしようとしている場合に、データが利用可能になるまで待つ最大時間(マイクロ秒単位)を指定します。このタイムアウトが経過した場合、その間に別のプロセスが行き詰まったか終了したとみなします。
ゼロに設定すると待機は行わず、すべてのプロセスが直ちに競い合って欠落ブロックを自分で取得しようとします。既定は 10000 です(10 ms)。
retry_errors
true(既定)にすると、元の入力ストリームからの一時的な読み込みエラーは無視され、再試行されます。false にすると、以前に読み込みに失敗したブロックは恒久的にアクセス不能として扱われます。
URL の構文は次のとおりです。
shared:URL
3.37 srt
libsrt を介した Haivision Secure Reliable Transport Protocol。
SRT URL でサポートされる構文は次のとおりです。
srt://hostname:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
サポートされるオプションの一覧を次に示します。
connect_timeout=milliseconds
接続タイムアウト。SRT は既定の接続タイムアウト 3 秒では RTT > 1500 msec(2 回のハンドシェイク交換)では接続できません。このオプションは caller モードと rendezvous 接続モードに適用されます。接続タイムアウトは rendezvous モードに設定した値の 10 倍になります(これは古いバージョンでのこの接続問題の回避策として使えます)。
ffs=bytes
Flight Flag Size(ウィンドウサイズ)、バイト単位。FFS は実際には内部パラメータであり、recv_buffer_size と mss を下回らない値に設定すべきです。既定値は比較的大きいため、非常に大きな受信バッファを設定しない限り、このオプションを変更する必要はありません。既定値は 25600 です。
inputbw=bytes/seconds
送信側の公称入力レート、1 秒あたりのバイト数。maxbw が相対(0)に設定されている場合に oheadbw とともに使われ、メインのメディアストリームとともに回復用パケットを送る際の最大送信レートを計算する: inputbw * (100 + oheadbw) / 100。maxbw が相対(0)に設定されているのに inputbw が設定されていない場合、実際の入力レートはライブラリ内部で評価されます。既定値は 0 です。
iptos=tos
IP Type of Service。送信側にのみ適用されます。既定値は 0xB8 です。
ipttl=ttl
IP Time To Live。送信側にのみ適用されます。既定値は 64 です。
latency=microseconds
タイムスタンプベースのパケット配送遅延。失われたパケットの再送のバーストを吸収するために使われます。このフラグは rcvlatency と peerlatency の両方を同じ値に設定します。バージョン 1.3.0 より前ではこれが遅延を設定する唯一のフラグだった点に注意してください。ただしこれは、送信側のときは peerlatency、受信側のときは rcvlatency を設定するのと実質的に等価であり、双方向のストリーム送信はサポートされません。
listen_timeout=microseconds
ソケットの listen タイムアウトを設定します。
maxbw=bytes/seconds
最大送信帯域、1 秒あたりのバイト数。-1 は無限(CSRTCC の制限は 30mbps)、0 は入力レートに対する相対(inputbw を参照)、>0 は絶対的な制限値。既定値は 0 です(相対)。
mode=caller|listener|rendezvous
接続モード。caller はクライアント接続を開きます。listener は着信接続を待ち受けるサーバーを起動します。rendezvous は Rendez-Vous 接続モードを使います。既定値は caller です。
mss=bytes
Maximum Segment Size、バイト単位。バッファ確保と、パケットが完全に満たされていると仮定したパケットカウンタによるレート計算に使われます。相手間で最小の MSS が使われます。インターネット全体では既定で 1500 です。これは UDP パケットの最大サイズであり、特殊な専用ネットワーク設定がない限り、小さくすることしかできません。既定値は 1500 です。
nakreport=1|0
1 に設定すると、受信側は失われたパケットが再送されるか意図的に破棄されるまで、UMSG_LOSSREPORT メッセージを定期的に送ります。既定値は 1 です。
oheadbw=percents
入力レートを超える回復用帯域のオーバーヘッド、パーセント単位。inputbw を参照してください。既定値は 25% です。
passphrase=string
HaiCrypt の暗号化/復号パスフレーズ文字列、長さは 10 から 79 文字。パスフレーズは送信側と受信側の共有秘密です。PBKDF2 (Password-Based Key Derivation Function) を使って Key Encrypting Key を生成するのに使われます。pbkeylen が非ゼロの場合にのみ使われます。受信側では受信データが暗号化されている場合にのみ使われます。設定したパスフレーズは復元できません(write-only)。
enforced_encryption=1|0
true にすると、接続する両者は同じパスワード(暗号化なしを意味する空も含む)を設定していなければなりません。パスワードが一致しないか、片側のみが暗号化されていない場合、接続は拒否されます。既定は true です。
kmrefreshrate=packets
暗号化鍵を新しい鍵に切り替えるまでに送信するパケット数。既定は -1 です。-1 は auto(srt ライブラリでは 0x1000000)を意味します。このオプションの範囲は 0 から INT_MAX の整数です。
kmpreannounce=packets
新しい暗号化鍵が送られてから切り替えが起こるまでの間隔。この値は、切り替えが起こってから古い暗号化鍵が廃止されるまでの後続の間隔にも適用されます。既定は -1 です。-1 は auto(srt ライブラリでは 0x1000)を意味します。このオプションの範囲は 0 から INT_MAX の整数です。
snddropdelay=microseconds
送信側がパケットを破棄するまでの追加遅延。この遅延は既定の破棄遅延の時間間隔値に加算されます。
特別な値 -1: 送信側ではパケットをまったく破棄しません。
payload_size=bytes
Live モードで送信関数の単一呼び出し中に転送されるパケットの最大宣言サイズを設定します。この値を使わない場合は 0 を使います(file モードでは既定)。既定は -1(自動)で、これは通常 MPEG-TS を意味します。SRT で異なる種類のペイロード、例えばライブストリームを非常に小さいフレームでラップして送る場合は、より大きい最大フレームサイズを使えるが、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
Too-late Packet Drop。受信側で有効にすると、期限内に配送されなかった欠落パケットをスキップし、再生時刻が来たら後続のパケットをアプリケーションへ配送します。また送信側へ偽の ACK を送ります。送信側で有効にし、かつ受信相手で有効になっている場合、送信側は期限内に配送される見込みのない古いパケットを破棄します。受信側がサポートしていれば、送信側で自動的に有効になります。
sndbuf=bytes
送信バッファサイズをバイト単位で設定します。
rcvbuf=bytes
受信バッファサイズをバイト単位で設定します。
受信バッファは ffs より大きくしてはなりません。
lossmaxttl=packets
Reorder Tolerance が増大しうる上限値。Reorder Tolerance が > 0 のとき、その数のパケットが到着するまでパケットロスの報告が遅延されます。Reorder Tolerance は、"遅れて" 到着したパケットが再送によるものでない場合(つまり UDP パケットが順序を乱して到着しがちな場合)に、最新のシーケンスとこのパケットのシーケンスの差だけ、ただしこのオプションの値を超えない範囲で、毎回増大します。既定は 0 で、この機構が無効であることを意味し、シーケンスに "ギャップ" が生じた時点で常に直ちにロス報告が送られます。
minversion
相手に要求する最小 SRT バージョン。最小バージョン要件を満たさない相手への接続は拒否されます。
16進でのバージョン形式は、人間が読める形の x.y.z に対して 0xXXYYZZ です。
streamid=string
接続前にソケットに設定できる、512 文字までの文字列。このストリーム ID は、listener 側が srt_accept から返され、その設定済みストリーム ID を持つソケットによって接続されたソケットから取得できます。SRT はこの文字列の内容について特別な解釈を強制しません。このオプションは Rendezvous 接続では意味をなしません。結果として一方が他方の値を単に上書きするだけになりかねず、どちらが勝つかは運次第です。
srt_streamid=string
ffmpeg コマンドラインオプションとの衝突を避けるための ‘streamid’ のエイリアス。
smoother=live|file
そのソケットの送信に使う Smoother の種類。送信と輻輳制御を担います。Smoother の種類は接続する両者でまったく同じでなければならず、さもないと接続は拒否されます。
messageapi=1|0
設定すると、このソケットは Message API を使い、そうでなければ Buffer API を使います。live モード(transtype を参照)では Message API のみが利用可能である点に注意してください。File モードでは2つのモードのいずれかを選べます。
Stream API(既定です。このオプションが false のとき)。このモードでは、1 回の送信命令で好きなだけのデータを送れ、ファイルから直接読み込む専用関数を使うこともできます。内部機構が速度と輻輳の制御を引き受けます。受信時も好きなだけのデータを受信でき、取り出されなかったデータは次の呼び出しまで待機します。Stream モードではデータの区切りという境界はありません。
Message API。このモードでは、単一の送信命令が境界を持つちょうど 1 つのデータ片(メッセージ)を渡します。Live モードと異なり、このメッセージは複数の UDP パケットにまたがってもよく、唯一のサイズ制限は送信バッファに全体が収まることだけです。受信側はメッセージを受信するのに必要なだけの大きいバッファを使う必要があり、さもないとメッセージは引き渡されません。メッセージが不完全な場合(すべてのパケットが受信されていないか、パケットロスがあった場合)、引き渡されません。
transtype=live|file
ソケットの送信タイプを設定します。特に、このオプションを設定すると、特定の送信タイプに必要な他の複数のパラメータがそれぞれの既定値に設定されます。
live: ライブ送信向けにオプションを設定します。このモードでは、1 回の送信命令で 1 つの UDP パケットに収まるだけのデータのみを送るべきで、payload_size で最初に定義された値(このモードでは既定 1316)に制限されます。このモードに速度制御はなく、設定されていれば帯域制御のみがあり、オーバーヘッド送信(再送パケットと制御パケット)で帯域を超えないようにします。
file: 非ライブ送信向けにオプションを設定します。詳しい説明は messageapi を参照してください。
linger=seconds
クローズ時にソケットが未送信データを待つ秒数。既定は -1 です。-1 は auto(live モードでは 0 秒でオフ、file モードでは 180 秒でオン)を意味します。このオプションの範囲は 0 から INT_MAX の整数です。
tsbpd=1|0
true にすると、Timestamp-based Packet Delivery モードを使います。既定の挙動は送信タイプに依存し、live モードでは有効、file モードでは無効です。
ipv6only=1|0
IPv6 ワイルドカードアドレスを使う際に IPv4 を受け付けるかどうか。IPv6 ワイルドカードアドレスで待ち受ける場合に設定すべきです。
詳細は https://github.com/Haivision/srt を参照してください。
3.38 srtp
Secure Real-time Transport Protocol。
受け付けるオプションは次のとおりです。
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 バイトを master key として、続く 14 バイトを master salt として使います。
3.39 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
3.40 tee
出力を複数のプロトコルへ書き込みます。個々の出力は | で区切ります。
tee:file://path/to/local/this.avi|file://path/to/local/that.avi
3.41 tcp
Transmission Control Protocol。
TCP url に必要な構文は次のとおりです。
tcp://hostname:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
サポートされるオプションの一覧を次に示します。
listen=2|1|0
着信接続を待ち受けます。0 は listen を無効化、1 はシングルクライアントモードで listen を有効化、2 はマルチクライアントモードで listen を有効化します。既定値は 0 です。
local_addr=addr
tcp ソケット接続に使うネットワークインターフェースのローカル IP アドレス。
local_port=port
tcp ソケット接続に使うローカルポート。
timeout=microseconds
エラー発生タイムアウトをマイクロ秒単位で設定します。
このオプションは読み込みモードでのみ意味を持ちます。この時間間隔を超えてデータが届かなければエラーを発生させます。
listen_timeout=milliseconds
listen タイムアウトをミリ秒単位で設定します。
recv_buffer_size=bytes
受信バッファサイズをバイト単位で設定します。
send_buffer_size=bytes
送信バッファサイズをバイト単位で設定します。
tcp_nodelay=1|0
TCP_NODELAY を設定して Nagle アルゴリズムを無効にします。既定値は 0 です。
補足: ソケットへの書き込みは現状システムコールを最小化するよう最適化されておらず、TCP_NODELAY の効率/効果を低下させます。
tcp_mss=bytes
送信 TCP パケットの最大セグメントサイズをバイト単位で設定します。
次の例は、ffmpeg で待ち受け側の TCP 接続を設定し、それに ffplay でアクセスする方法を示します。
ffmpeg -i input -f format tcp://hostname:port?listen
ffplay tcp://hostname:port
3.42 tls
Transport Layer Security (TLS) / Secure Sockets Layer (SSL)
TLS/SSL url に必要な構文は次のとおりです。
tls://hostname:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
サポートされるオプションの一覧を次に示します。
ca_file, cafile=filename
信頼するものとして扱う認証局 (CA) のルート証明書を含むファイル。リンクした TLS ライブラリに既定が含まれていれば、検証を機能させるのにこれを指定する必要はないかもしれないが、すべてのライブラリや構成に既定が組み込まれているわけではありません。ファイルは OpenSSL PEM 形式でなければなりません。
tls_verify, verify=1|0
有効にすると、通信相手を検証しようとします。OpenSSL を使う場合、これは現状、相手の証明書が CA データベース内のルート証明書のいずれかによって署名されていることを確認するだけで、その証明書が接続しようとしているホスト名に実際に一致するかどうかは検証しない点に注意してください(他のバックエンドではホスト名も検証されます)。
これは既定で有効です。相手の検証には CA データベースが必要で、場合によっては呼び出し側が用意する必要があります。
cert_file, cert=filename
相手とのハンドシェイクで使う証明書を含むファイル。(サーバーとして listen モードで動作する場合、相手からこれを要求されることがより多いが、クライアント証明書が必須となるのは特定の構成に限られます。)
key_file, key=filename
証明書の秘密鍵を含むファイル。
listen=1|0
有効にすると、指定したポートで接続を待ち受け、ハンドシェイクでクライアントではなくサーバーの役割を担います。
http_proxy
トンネルに使う HTTP プロキシ。例: http://example.com:1234。プロキシは CONNECT メソッドをサポートしている必要があります。
コマンドライン例:
入力ストリームを配信する TLS/SSL サーバーを作ります。
ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
TLS/SSL サーバーから ffplay でストリームを再生します。
ffplay tls://hostname:port
3.43 dtls
Datagram Transport Layer Security (DTLS)
DTLS URL に必要な構文は次のとおりです。
dtls://hostname:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
DTLS は TLS と大半のオプションを共有するが、TCP の代わりに UDP 上で動作します。
サポートされるオプションの一覧を次に示します。
ca_file, cafile=filename
信頼するものとして扱う認証局 (CA) のルート証明書を含むファイル。リンクした TLS ライブラリに既定が含まれていれば、検証を機能させるのにこれを指定する必要はないかもしれないが、すべてのライブラリや構成に既定が組み込まれているわけではありません。ファイルは OpenSSL PEM 形式でなければなりません。
tls_verify, verify=1|0
有効にすると、通信相手を検証しようとします。OpenSSL を使う場合、これは現状、相手の証明書が CA データベース内のルート証明書のいずれかによって署名されていることを確認するだけで、その証明書が接続しようとしているホスト名に実際に一致するかどうかは検証しない点に注意してください。
これは既定で有効です。相手の検証には CA データベースが必要で、場合によっては呼び出し側が用意する必要があります。
cert_file, cert=filename
相手とのハンドシェイクで使う証明書を含むファイル。(サーバーとして listen モードで動作する場合、相手からこれを要求されることがより多いが、クライアント証明書が必須となるのは特定の構成に限られます。)
key_file, key=filename
証明書の秘密鍵を含むファイル。
cert_pem=string
証明書の PEM 文字列。
key_pem=string
秘密鍵の PEM 文字列。
listen=1|0
有効にすると、指定したポートで接続を待ち受け、ハンドシェイクでクライアントではなくサーバーの役割を担います。
mtu=size
DTLS パケットの Maximum Transmission Unit (MTU) を設定します。
use_srtp=1|0
use_srtp DTLS 拡張を有効にします。これは WebRTC アプリケーションで、DTLS ハンドシェイクを通じて SRTP の暗号化鍵を確立するのに使われます。既定は無効です。
external_sock=1|0
新しいソケットを作る代わりに外部ソケットを使います。このオプションは API 経由でコードとやり取りする場合にのみ意味があり、CLI から有効にすると直ちに失敗します。既定は無効です。
コマンドライン例:
DTLS サーバーを作ります。
ffmpeg -listen 1 -i dtls://hostname:port output
DTLS クライアントを作りサーバーへデータを送ります。
ffmpeg -i input -f format dtls://hostname:port
3.44 udp
User Datagram Protocol。
UDP URL に必要な構文は次のとおりです。
udp://hostname:port[?options]
options は key=val の形式のオプションを & 区切りで列挙したリストを含みます。キーと値のエスケープには、標準のパーセントエンコーディング(およびスペースにはプラス記号)を使えます。
オプションはコマンドラインオプション(またはコード内では AVOption)でも指定できます。
システムでスレッディングが有効な場合、受信データの格納にリングバッファが使われ、UDP ソケットバッファのオーバーランによるデータ損失を減らせます。fifo_size と overrun_nonfatal オプションはこのバッファに関係します。
サポートされるオプションの一覧を次に示します。
buffer_size=size
UDP ソケットの最大バッファサイズ(バイト単位)を設定します。これは、ソケットの用途に応じて受信または送信のバッファサイズを設定するのに使われます。既定は出力で 32 KB、入力で 384 KB です。fifo_size も参照してください。
bitrate=bitrate
ゼロ以外に設定すると、入力にそれを維持できるだけのパケットがあれば、出力は指定した一定ビットレートになります。
burst_bits=bits
bitrate を使う場合、これはパケットバースト中の最大ビット数を指定します。
localport=port
バインドするローカル UDP ポートを上書きします。
localaddr=addr
パケット送信またはマルチキャストグループへの参加に使うネットワークインターフェースのローカル IP アドレス。
pkt_size=size
UDP パケットのサイズ(バイト単位)を設定します。
reuse=1|0
UDP ソケットの再利用を明示的に許可または禁止します。
ttl=ttl
time to live 値を設定します(マルチキャストのみ)。
dscp=dscp
送信パケットの 6 ビット DSCP フィールドを設定します。
connect=1|0
UDP ソケットを connect() で初期化します。この場合、宛先アドレスを後から ff_udp_set_remote_url で変更できません。開始時に宛先アドレスが分からない場合、このオプションは ff_udp_set_remote_url でも指定できます。これにより getsockname でパケットの送信元アドレスを知ることができ、"destination unreachable" を受け取ると書き込みが AVERROR(ECONNREFUSED) で返るようになります。受信時には、指定した相手のアドレス/ポートからのパケットのみを受信できる利点があります。
sources=address[,address]
指定したアドレスから送られたパケットのみを受信します。マルチキャストの場合、これらのアドレスからのマルチキャストトラフィックのみを購読します。
block=address[,address]
指定したアドレスから送られたパケットを無視します。マルチキャストの場合、マルチキャスト購読からその送信元アドレスを除外します。
fifo_size=units
UDP 受信リングバッファのサイズを、188 バイトのパケット数として設定します。指定しない場合は既定で 7*4096 です。
overrun_nonfatal=1|0
UDP 受信リングバッファのオーバーランが起きても処理を継続します。既定値は 0 です。
timeout=microseconds
エラー発生タイムアウトをマイクロ秒単位で設定します。
このオプションは読み込みモードでのみ意味を持ちます。この時間間隔を超えてデータが届かなければエラーを発生させます。
broadcast=1|0
UDP ブロードキャストを明示的に許可または禁止します。
ブロードキャストストーム保護のあるネットワークでは、ブロードキャストが正しく機能しない場合がある点に注意してください。
3.44.1 例
-
ffmpegを使ってリモートのエンドポイントへ UDP でストリーミングします。ffmpeg -i input -f format udp://hostname:port -
ffmpegを使って、188 サイズの UDP パケットと大きな入力バッファで、mpegts 形式を UDP でストリーミングします。ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535 -
ffmpegを使ってリモートのエンドポイントから UDP で受信します。ffmpeg -i udp://[multicast-address]:port ...
3.45 unix
Unix ローカルソケット
Unix ソケット URL に必要な構文は次のとおりです。
unix://filepath
次のパラメータをコマンドラインオプション(またはコード内では AVOption)で設定できます。
timeout
タイムアウト(ミリ秒単位)。
listen
Unix ソケットを listen モードで作成します。
type
ソケットの種類を選びます。
‘stream SOCK_STREAM に対応(信頼性のあるストリーム指向)’ ‘datagram SOCK_DGRAM に対応(信頼性のないパケット指向)’ ‘seqpacket SOCK_SEQPACKET に対応(信頼性のあるパケット指向)’ pkt_size
パケット指向ソケット(SOCK_DGRAM と SOCK_SEQPACKET)の最大パケットサイズ。ゼロより大きい場合、この値が max_packet_size として使われます。SOCK_STREAM では無視されます。既定は 0です。
3.46 zmq
libzmq ライブラリを使った ZeroMQ 非同期メッセージング。
このライブラリは、外部サーバーに頼らず複数クライアントへのユニキャストストリーミングをサポートします。
ストリーミングまたはストリームへの接続に必要な構文は次のとおりです。
zmq:tcp://ip-address:port
例: ポート 5555 で localhost ストリームを作ります。
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
複数のクライアントは次のコマンドでストリームに接続できます。
ffplay zmq:tcp://127.0.0.1:5555
複数クライアントへのストリーミングは ZeroMQ の Pub-Sub パターンで実装されています。サーバー側はポートにバインドしてデータを publish します。クライアントは(IP アドレス/ポート経由で)サーバーに接続してストリームを subscribe します。サーバーとクライアントを起動する順序は一般に問いません。
このプロトコルをサポートするには、ffmpeg を –enable-libzmq オプションでコンパイルする必要があります。
オプションは ffmpeg/ffplay のコマンドラインで設定できます。次のオプションがサポートされます。
pkt_size
データ送受信の最大パケットサイズを強制します。既定値は 131,072 バイトです。サーバー側では、これは ZeroMQ で送るパケットの最大サイズを設定します。クライアント側では、パケット受信用の内部バッファサイズを設定します。クライアントの pkt_size は、サーバーの pkt_size 以上にすべきである点に注意してください。さもないと受信メッセージが切り詰められ、デコードエラーの原因となります。
4 関連項目
ffmpeg, ffplay, ffprobe, libavformat
5 著者
FFmpeg の開発者たち。
著者の詳細については、プロジェクトの Git 履歴(https://git.ffmpeg.org/ffmpeg)を参照してください。例えば FFmpeg のソースディレクトリで git log コマンドを実行するか、オンラインリポジトリ https://git.ffmpeg.org/ffmpeg を閲覧すればよいでしょう。
特定のコンポーネントのメンテナは、ソースコードツリー内のファイル MAINTAINERS に列挙されています。
ホスティングは telepoint.bg が提供しています。