⚠️ Este é um site de tradução não oficial, sem relação com o projeto FFmpeg. Para informações oficiais, consulte a página original (https://ffmpeg.org/ffmpeg-protocols.html).

Documentação de protocolos do FFmpeg

1 Descrição

Este documento descreve os protocolos de entrada e saída fornecidos pela biblioteca libavformat.

2 Opções de protocolo

A biblioteca libavformat oferece algumas opções globais genéricas, que podem ser definidas em todos os protocolos. Além disso, cada protocolo pode aceitar as chamadas opções privadas, específicas desse componente.

As opções podem ser definidas especificando -option value nas ferramentas do FFmpeg, definindo o valor explicitamente nas opções de AVFormatContext ou usando a API libavutil/opt.h para uso programático.

A lista de opções aceitas é a seguinte:

protocol_whitelist list (input)

Define uma lista de protocolos permitidos separada por ",". "ALL" corresponde a todos os protocolos. Protocolos prefixados por "-" são desabilitados. Por padrão todos os protocolos são permitidos, mas os protocolos usados por outro protocolo (protocolos aninhados) ficam restritos a um subconjunto específico por protocolo.

3 Protocolos

Protocolos são elementos configurados no FFmpeg que permitem o acesso a recursos que exigem protocolos específicos.

Ao configurar sua compilação do FFmpeg, todos os protocolos com suporte são habilitados por padrão. É possível listar todos os disponíveis usando a opção de configuração "–list-protocols".

É possível desabilitar todos os protocolos com a opção de configuração "–disable-protocols" e habilitar seletivamente um protocolo com a opção "–enable-protocol=PROTOCOL", ou desabilitar um protocolo específico com a opção "–disable-protocol=PROTOCOL".

A opção "-protocols" das ferramentas ff* exibirá a lista de protocolos com suporte.

Todos os protocolos aceitam as seguintes opções:

rw_timeout

Tempo máximo de espera para que as operações de leitura/escrita (de rede) sejam concluídas, em microssegundos.

Segue uma descrição dos protocolos atualmente disponíveis.

3.1 amqp

Advanced Message Queueing Protocol (AMQP) versão 0-9-1 é um protocolo de comunicação publish-subscribe baseado em broker.

O FFmpeg deve ser compilado com –enable-librabbitmq para dar suporte a AMQP. Também é necessário executar um broker AMQP separado. Um exemplo de broker AMQP de código aberto é o RabbitMQ.

Depois de iniciar o broker, um cliente FFmpeg pode transmitir dados ao broker usando o comando:

ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]

Onde hostname e port (o padrão é 5672) são o endereço do broker. O cliente também pode definir um usuário/senha para autenticação. O padrão de ambos os campos é "guest". O nome do host virtual no broker pode ser definido com vhost. O valor padrão é "/".

Vários assinantes podem transmitir a partir do broker usando o comando:

ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]

No RabbitMQ, todos os dados publicados no broker fluem através de um exchange específico, e cada cliente assinante tem uma fila/buffer atribuída. Quando um pacote chega a um exchange, ele pode ser copiado para a fila de um cliente dependendo dos campos exchange e routing_key.

As seguintes opções são aceitas:

exchange

Define o exchange a ser usado no broker. O RabbitMQ tem vários exchanges predefinidos: "amq.direct" é o exchange padrão, em que o publicador e o assinante devem ter uma routing_key correspondente; "amq.fanout" equivale a uma operação de broadcast (ou seja, os dados são encaminhados para todas as filas do exchange fanout independentemente da routing_key); e "amq.topic" é semelhante a "amq.direct", mas permite uma correspondência de padrões mais complexa (consulte a documentação do RabbitMQ).

routing_key

Define a chave de roteamento. O padrão é "amqp". A routing key é usada nos exchanges "amq.direct" e "amq.topic" para decidir se os pacotes são gravados na fila de um assinante.

pkt_size

Tamanho máximo de cada pacote enviado/recebido ao broker. O padrão é 131072. O mínimo é 4096 e o máximo é qualquer valor grande (representável por um int). Ao receber pacotes, isso define um tamanho de buffer interno no FFmpeg. Deve ser igual ou maior que o tamanho dos pacotes publicados no broker. Caso contrário, a mensagem recebida pode ser truncada, causando erros de decodificação.

connection_timeout

O tempo limite em segundos durante a conexão inicial com o broker. O valor padrão é rw_timeout, ou 5 segundos se rw_timeout não estiver definido.

delivery_mode mode

Define o modo de entrega de cada mensagem enviada ao broker. Os seguintes valores são aceitos:

‘persistent’

Modo de entrega definido como "persistent" (2). Este é o valor padrão. As mensagens podem ser gravadas no disco do broker dependendo de sua configuração.

‘non-persistent’

Modo de entrega definido como "non-persistent" (1). As mensagens permanecerão na memória do broker, a menos que o broker esteja sob pressão de memória.

3.2 async

Wrapper de preenchimento assíncrono de dados para o fluxo de entrada.

Preenche os dados em uma thread em segundo plano, para desacoplar a operação de E/S da thread de demultiplexação.

async:URL
async:http://host/resource
async:cache:http://host/resource

3.3 bluray

Lê a playlist do BluRay.

As opções aceitas são:

angle

Ângulo do BluRay

chapter

Capítulo inicial (1...N)

playlist

Playlist a ser lida (BDMV/PLAYLIST/?????.mpls)

Exemplos:

Ler a playlist mais longa de um BluRay montado em /mnt/bluray:

bluray:/mnt/bluray

Ler o ângulo 2 da playlist 4 de um BluRay montado em /mnt/bluray, começando pelo capítulo 2:

-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray

3.4 cache

Wrapper de cache para o fluxo de entrada.

Armazena o fluxo de entrada em um arquivo temporário. Isso traz capacidade de busca para os fluxos ao vivo.

As opções aceitas são:

read_ahead_limit

Quantidade em bytes que pode ser lida antecipadamente quando não há suporte à busca. O intervalo é de -1 a INT_MAX. -1 para ilimitado. O padrão é 65536.

A sintaxe da URL é

cache:URL

3.5 concat

Protocolo de concatenação física.

Lê e busca em vários recursos em sequência como se fossem um único recurso.

Uma URL aceita por este protocolo tem a sintaxe:

concat:URL1|URL2|...|URLN

onde URL1, URL2, ..., URLN são as urls dos recursos a serem concatenados, cada uma possivelmente especificando um protocolo distinto.

Por exemplo, para ler uma sequência de arquivos split1.mpeg, split2.mpeg, split3.mpeg com o ffplay, use o comando:

ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg

Observe que talvez seja necessário escapar o caractere "|", que é especial em muitos shells.

3.6 concatf

Protocolo de concatenação física que usa uma lista de recursos delimitada por quebras de linha.

Lê e busca em vários recursos em sequência como se fossem um único recurso.

Uma URL aceita por este protocolo tem a sintaxe:

concatf:URL

onde URL é a url que contém uma lista de recursos delimitada por quebras de linha a serem concatenados, cada um possivelmente especificando um protocolo distinto. Caracteres especiais devem ser escapados com barra invertida ou aspas simples. Consulte (ffmpeg-utils) a seção "Quoting and escaping" do manual ffmpeg-utils(1).

Por exemplo, para ler uma sequência de arquivos split1.mpeg, split2.mpeg, split3.mpeg listados em linhas separadas dentro de um arquivo split.txt com o ffplay, use o comando:

ffplay concatf:split.txt

Onde split.txt contém as linhas:

split1.mpeg
split2.mpeg
split3.mpeg

3.7 crypto

Protocolo de leitura de fluxo criptografado com AES.

As opções aceitas são:

key

Define o bloco binário da chave de descriptografia AES a partir da representação hexadecimal fornecida.

iv

Define o bloco binário do vetor de inicialização de descriptografia AES a partir da representação hexadecimal fornecida.

Formatos de URL aceitos:

crypto:URL
crypto+URL

3.8 data

Dados embutidos na URI. Consulte http://en.wikipedia.org/wiki/Data_URI_scheme.

Por exemplo, para converter um arquivo GIF fornecido embutido com o ffmpeg:

ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png

3.9 fd

Protocolo de acesso por descritor de arquivo.

A sintaxe aceita é:

fd: -fd file_descriptor

Se fd não for especificado, por padrão o descritor de arquivo stdout será usado para escrita, e stdin para leitura. Diferentemente do protocolo pipe, o protocolo fd oferece suporte a busca se corresponder a um arquivo regular. Por motivos de segurança, o protocolo fd não permite passar o descritor de arquivo pela URL.

Este protocolo aceita as seguintes opções:

blocksize

Define o tamanho máximo de bloco da operação de E/S, em bytes. O valor padrão é INT_MAX, o que resulta em não limitar o tamanho de bloco solicitado. Definir esse valor em um nível razoavelmente baixo melhora o tempo de reação a solicitações de encerramento do usuário, o que é valioso se a transmissão de dados for lenta.

fd

Define o descritor de arquivo.

3.10 file

Protocolo de acesso a arquivos.

Lê de um arquivo ou grava nele.

Uma URL de arquivo pode ter a forma:

file:filename

onde filename é o caminho do arquivo a ser lido.

Uma URL sem prefixo de protocolo será considerada uma URL de arquivo. Dependendo da compilação, uma URL que se pareça com um caminho do Windows com a letra da unidade no início também será considerada uma URL de arquivo (geralmente não é o caso em compilações para sistemas do tipo unix).

Por exemplo, para ler de um arquivo input.mpeg com o ffmpeg, use o comando:

ffmpeg -i file:input.mpeg output.mpeg

Este protocolo aceita as seguintes opções:

truncate

Trunca arquivos existentes na gravação, se definido como 1. Um valor de 0 impede o truncamento. O valor padrão é 1.

blocksize

Define o tamanho máximo de bloco da operação de E/S, em bytes. O valor padrão é INT_MAX, o que resulta em não limitar o tamanho de bloco solicitado. Definir esse valor em um nível razoavelmente baixo melhora o tempo de reação a solicitações de encerramento do usuário, o que é valioso para arquivos em mídia lenta.

follow

Se definido como 1, o protocolo tentará novamente a leitura no fim do arquivo, permitindo ler arquivos que ainda estão sendo gravados. Para que isso termine, é necessário usar a opção rw_timeout ou usar o callback de interrupção (para usuários da API). Definir essa opção também ignora o tamanho de arquivo relatado pelo sistema de arquivos.

seekable

Controla se a capacidade de busca é anunciada para o arquivo. 0 significa não buscável, -1 significa automático (buscável para arquivos normais, não buscável para pipes nomeados).

Muitos demuxers tratam recursos buscáveis e não buscáveis de forma diferente; substituir esse comportamento pode acelerar a abertura de determinados arquivos ao custo de perder alguns recursos (por exemplo, busca precisa).

pkt_size

Define o tamanho máximo de pacote usado para E/S de arquivo. Um valor menor pode reduzir o uso de memória. Um valor maior pode aumentar a taxa de transferência, especialmente com sistemas de arquivos em rede.

Para leitura, se definido explicitamente, substitui o tamanho de buffer interno padrão (32 KB) e limita a quantidade máxima de dados lidos por operação.

Para gravação, isso define o tamanho de cada operação de gravação. O padrão é 256 KB para arquivos regulares, 32 KB nos demais casos.

3.11 ftp

FTP (File Transfer Protocol).

Lê de recursos remotos ou grava neles usando o protocolo FTP.

A seguinte sintaxe é necessária.

ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

Este protocolo aceita as seguintes opções.

timeout

Define o tempo limite em microssegundos das operações de E/S de socket usadas pela operação de baixo nível subjacente. Por padrão é definido como -1, o que significa que o tempo limite não é especificado.

ftp-user

Define um usuário a ser usado para autenticação no servidor FTP. Isso é substituído pelo usuário na URL FTP.

ftp-password

Define uma senha a ser usada para autenticação no servidor FTP. Isso é substituído pela senha na URL FTP, ou por ftp-anonymous-password se nenhum usuário estiver definido.

ftp-anonymous-password

Senha usada ao fazer login como usuário anônimo. Normalmente deve-se usar um endereço de e-mail.

ftp-write-seekable

Controla a capacidade de busca da conexão durante a codificação. Se definido como 1, presume-se que o recurso seja buscável; se definido como 0, presume-se que não seja. O valor padrão é 0.

NOTA: o protocolo pode ser usado como saída, mas recomenda-se não fazer isso, a menos que sejam tomados cuidados especiais (testes, configuração personalizada de servidor etc.). Diferentes servidores FTP se comportam de forma diferente durante a operação de busca. As ferramentas ff* podem produzir conteúdo incompleto devido a limitações do servidor.

3.12 gopher

Protocolo Gopher.

3.13 gophers

Protocolo Gophers.

O protocolo Gopher com encapsulamento TLS.

3.14 http

HTTP (Hyper Text Transfer Protocol).

Este protocolo aceita as seguintes opções:

seekable

Controla a capacidade de busca da conexão. Se definido como 1, presume-se que o recurso seja buscável; se definido como 0, presume-se que não seja; se definido como -1, tentará detectar automaticamente se é buscável. O valor padrão é -1.

chunked_post

Se definido como 1, usa Transfer-Encoding em blocos (chunked) para posts; o padrão é 1.

http_proxy

define o proxy HTTP pelo qual fazer o túnel, por exemplo http://example.com:1234

headers

Define cabeçalhos HTTP personalizados; pode substituir os cabeçalhos padrão embutidos. O valor deve ser uma string que codifique os cabeçalhos.

content_type

Define um content type específico para as mensagens POST ou para o modo listen.

user_agent

Substitui o cabeçalho User-Agent. Se não for especificado, o protocolo usará uma string que descreve a compilação do libavformat. ("Lavf/")

referer

Define o cabeçalho Referer. Inclui o cabeçalho ’Referer: URL’ na requisição HTTP.

multiple_requests

Usa conexões persistentes se definido como 1; o padrão é 0.

request_size

Limita o tamanho das requisições feitas. Isso é útil para alguns servidores problemáticos que restringem requisições de range sem limite, bem como quando se espera buscar com frequência. Desabilitado (definido como 0) por padrão.

Observe que, se essa opção for habilitada, é altamente recomendável também habilitar a opção multiple_requests, além de definir short_seek_size com o mesmo valor ou um valor maior. Fazer isso permite que o FFmpeg reutilize uma única conexão HTTP sempre que possível.

initial_request_size

Limita o tamanho das requisições iniciais. Semelhante a request_size, mas usado apenas durante a análise inicial do formato. Útil para formatos como MXF ou MOV que exigem buscas frequentes durante a análise do cabeçalho. Permanece até que o demuxer faça uma requisição de leitura maior que esse tamanho (sem uma busca intermediária), após o que a implementação continuará usando requisições normalmente. Desabilitado (definido como 0) por padrão.

Observe que, se essa opção for habilitada, é altamente recomendável também habilitar a opção multiple_requests, além de definir short_seek_size com o mesmo valor ou um valor maior.

post_data

Define dados POST HTTP personalizados.

mime_type

Exporta o tipo MIME.

http_version

Exporta o número de versão da resposta HTTP. Geralmente "1.0" ou "1.1".

cookies

Define os cookies a serem enviados em requisições futuras. O formato de cada cookie é o mesmo do valor de um campo de resposta HTTP Set-Cookie. Vários cookies podem ser delimitados por um caractere de quebra de linha.

icy

Se definido como 1, solicita metadados ICY (SHOUTcast) ao servidor. Se o servidor der suporte a isso, os metadados precisam ser obtidos pelo aplicativo lendo as opções icy_metadata_headers e icy_metadata_packet. O padrão é 1.

icy_metadata_headers

Se o servidor der suporte a metadados ICY, isso contém os cabeçalhos de resposta HTTP específicos do ICY, separados por caracteres de quebra de linha.

icy_metadata_packet

Se o servidor der suporte a metadados ICY, e icy estiver definido como 1, isso contém o último pacote de metadados não vazio enviado pelo servidor. Aplicativos interessados em atualizações de metadados durante o fluxo devem consultá-lo em intervalos regulares.

metadata

Define um dicionário exportado contendo metadados do Icecast presentes no bitstream, se houver. Útil apenas com a API em C.

auth_type

Define o tipo de autenticação HTTP. Não há opção para Digest, já que esse método exige obter primeiro parâmetros nonce do servidor e não pode ser usado diretamente como o Basic.

none

Escolhe o tipo de autenticação HTTP automaticamente. Este é o padrão.

basic

Escolhe a autenticação HTTP basic.

A autenticação basic envia uma string codificada em Base64 que contém o nome de usuário e a senha do cliente. Base64 não é uma forma de criptografia e deve ser considerado equivalente a enviar o nome de usuário e a senha em texto claro (Base64 é uma codificação reversível). Se um recurso precisar ser protegido, considere fortemente usar um esquema de autenticação diferente do basic. HTTPS/TLS deve ser usado com a autenticação basic. Sem esses reforços de segurança adicionais, a autenticação basic não deve ser usada para proteger informações sensíveis ou valiosas.

send_expect_100

Envia um cabeçalho Expect: 100-continue para POST. Se definido como 1, ele será enviado; se definido como 0, não será; se definido como -1, tentará enviá-lo se aplicável. O valor padrão é -1.

location

Um dicionário exportado contendo a localização do conteúdo. Útil apenas com a API em C.

offset

Define o deslocamento inicial em bytes.

end_offset

Tenta limitar a requisição aos bytes anteriores a esse deslocamento.

method

Quando usado como opção de cliente, define o método HTTP da requisição.

Quando usado como opção de servidor, define o método HTTP que se espera do(s) cliente(s). Se o método HTTP esperado e o recebido não corresponderem, o cliente receberá uma resposta Bad Request. Quando não definido, o método HTTP não é verificado por enquanto. Isso será substituído por detecção automática no futuro.

reconnect

Reconecta automaticamente quando desconectado antes de o EOF ser atingido.

reconnect_at_eof

Se definido, o eof é tratado como um erro e provoca reconexão; isso é útil para fluxos ao vivo/infinitos.

reconnect_on_network_error

Reconecta automaticamente em caso de erros de TCP/TLS durante a conexão.

reconnect_on_http_error

Uma lista de códigos de status HTTP separada por vírgulas para reconectar. A lista pode incluir códigos de status específicos (por exemplo, ’503’) ou as strings ’4xx’ / ’5xx’.

reconnect_streamed

Se definido, mesmo fluxos em streaming/não buscáveis serão reconectados em caso de erros.

reconnect_delay_max

Define o atraso máximo em segundos após o qual se desiste de reconectar.

reconnect_max_retries

Define o número máximo de vezes que uma conexão é repetida. Padrão não definido.

reconnect_delay_total_max

Define o atraso total máximo em segundos após o qual se desiste de reconectar.

respect_retry_after

Se habilitado, e um cabeçalho Retry-After for encontrado, o atraso de reconexão solicitado por ele será respeitado, em vez de usar backoff exponencial. Útil para erros 429 e 503. Habilitado por padrão.

listen

Se definido como 1, habilita o servidor HTTP experimental. Pode ser usado para enviar dados quando usado como opção de saída, ou para ler dados de um cliente com HTTP POST quando usado como opção de entrada. Se definido como 2, habilita o servidor HTTP experimental multicliente. Isso ainda não está implementado em ffmpeg.c e, portanto, não deve ser usado como opção de linha de comando.

# 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

O recurso solicitado por um cliente, quando o servidor HTTP experimental está em uso.

reply_code

O código HTTP retornado ao cliente, quando o servidor HTTP experimental está em uso.

short_seek_size

Define o limite, em bytes, a partir do qual uma leitura antecipada (readahead) deve ser preferida em vez de uma busca e uma nova requisição HTTP. Isso é útil, por exemplo, para garantir que a mesma conexão seja usada ao ler pacotes de vídeo grandes intercalados com pacotes de áudio pequenos.

3.14.1 Cookies HTTP

Algumas requisições HTTP serão negadas a menos que valores de cookie sejam passados junto com a requisição. A opção cookies permite especificar esses cookies. No mínimo, cada cookie deve especificar um valor junto com um path e um domain. Requisições HTTP que corresponderem tanto ao domain quanto ao path incluirão automaticamente o valor do cookie no campo de cabeçalho HTTP Cookie. Vários cookies podem ser delimitados por uma quebra de linha.

A sintaxe necessária para reproduzir um fluxo especificando um cookie é:

ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8

3.15 Icecast

Protocolo Icecast (transmissão para servidores Icecast)

Este protocolo aceita as seguintes opções:

ice_genre

Define o gênero do fluxo.

ice_name

Define o nome do fluxo.

ice_description

Define a descrição do fluxo.

ice_url

Define a URL do site do fluxo.

ice_public

Define se o fluxo deve ser público. O padrão é 0 (não público).

user_agent

Substitui o cabeçalho User-Agent. Se não for especificado, será usada uma string no formato "Lavf/".

password

Define a senha do ponto de montagem do Icecast.

content_type

Define o content type do fluxo. Isso deve ser definido se for diferente de audio/mpeg.

legacy_icecast

Isso habilita suporte a versões do Icecast < 2.4.0, que não aceitam o método HTTP PUT, mas sim o método SOURCE.

tls

Estabelece uma conexão TLS (HTTPS) com o Icecast.

icecast://[username[:password]@]server:port/mountpoint

3.16 ipfs

Suporte ao protocolo InterPlanetary File System (IPFS). É possível acessar arquivos armazenados na rede IPFS por meio dos chamados gateways. Esses são endpoints http(s). Este protocolo encapsula os protocolos nativos do IPFS (ipfs:// e ipns://) para envio a esse gateway. Os usuários podem (e devem) hospedar seu próprio nó, o que significa que este protocolo usará o gateway local para acessar arquivos na rede IPFS.

Este protocolo aceita as seguintes opções:

gateway

Define o gateway a ser usado. Quando não definido, o protocolo primeiro tentará localizar o gateway local procurando em $IPFS_GATEWAY, $IPFS_PATH e $HOME/.ipfs/, nessa ordem.

É possível usar este protocolo de 2 formas. Usando IPFS:

ffplay ipfs://<hash>

Ou o protocolo IPNS (IPNS é o IPFS mutável):

ffplay ipns://<hash>

3.17 mmst

Protocolo MMS (Microsoft Media Server) sobre TCP.

3.18 mmsh

Protocolo MMS (Microsoft Media Server) sobre HTTP.

A sintaxe necessária é:

mmsh://server[:port][/app][/playpath]

3.19 md5

Protocolo de saída MD5.

Calcula o hash MD5 dos dados a serem gravados e, ao fechar, grava-o no destino designado ou no stdout, se nenhum for especificado. Pode ser usado para testar muxers sem gravar um arquivo real.

Seguem alguns exemplos.

# 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:

Observe que alguns formatos (tipicamente MOV) exigem que o protocolo de saída seja buscável, portanto falharão com o protocolo de saída MD5.

3.20 pipe

Protocolo de acesso a pipes UNIX.

Lê e grava em pipes UNIX.

A sintaxe aceita é:

pipe:[number]

Se fd não for especificado, number é o número correspondente ao descritor de arquivo do pipe (por exemplo, 0 para stdin, 1 para stdout, 2 para stderr). Se number não for especificado, por padrão o descritor de arquivo stdout será usado para escrita, e stdin para leitura.

Por exemplo, para ler do stdin com o ffmpeg:

cat test.wav | ffmpeg -i pipe:0
# ...this is the same as...
cat test.wav | ffmpeg -i pipe:

Para gravar no stdout com o ffmpeg:

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

Este protocolo aceita as seguintes opções:

blocksize

Define o tamanho máximo de bloco da operação de E/S, em bytes. O valor padrão é INT_MAX, o que resulta em não limitar o tamanho de bloco solicitado. Definir esse valor em um nível razoavelmente baixo melhora o tempo de reação a solicitações de encerramento do usuário, o que é valioso se a transmissão de dados for lenta.

fd

Define o descritor de arquivo.

Observe que alguns formatos (tipicamente MOV), exigem que o protocolo de saída seja buscável, portanto falharão com o protocolo de saída pipe.

3.21 prompeg

Protocolo FEC Pro-MPEG Code of Practice #3 Release 2.

O FEC Pro-MPEG CoP#3 é um mecanismo de correção de erro para frente (FEC) com verificação de paridade 2D para fluxos de transporte MPEG-2 enviados sobre RTP.

Este protocolo deve ser usado em conjunto com o muxer rtp_mpegts e o protocolo rtp.

A sintaxe necessária é:

-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port

As portas UDP de destino são port + 2 para o fluxo FEC de colunas e port + 4 para o fluxo FEC de linhas.

Este protocolo aceita as seguintes opções:

l=n

O número de colunas (4-20, LxD <= 100)

d=n

O número de linhas (4-20, LxD <= 100)

Exemplo de uso:

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://hostname:port

3.22 rist

Protocolo Reliable Internet Streaming Transport

As opções aceitas são:

rist_profile

Valores compatíveis:

‘simple’ ‘main’

Este é o padrão.

‘advanced’ buffer_size

Define o tamanho do buffer interno do RIST em milissegundos para retransmissão de dados. O valor padrão é 0, o que significa o padrão do librist (1 s). O valor máximo é 30 segundos.

fifo_size

Tamanho do fifo de saída do receptor librist em número de pacotes. Deve ser uma potência de 2. O padrão é 8192 (contra o padrão do librist de 1024).

overrun_nonfatal=1|0

Sobrevive em caso de estouro do buffer fifo do librist. O valor padrão é 0.

pkt_size

Define o tamanho máximo de pacote para envio de dados. 1316 por padrão.

log_level

Define o loglevel para as mensagens de log do RIST. Só é necessário definir isso se você quiser habilitar explicitamente mensagens de nível de depuração ou a simulação de perda de pacotes; caso contrário, o loglevel normal é respeitado.

secret

Define a substituição do segredo de criptografia; por padrão não é definido.

encryption

Define o tipo de criptografia; por padrão é desabilitado. Os valores aceitáveis são 128 e 256.

3.23 rtmp

Real-Time Messaging Protocol.

O Real-Time Messaging Protocol (RTMP) é usado para transmitir conteúdo multimídia por uma rede TCP/IP.

A sintaxe necessária é:

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

Os parâmetros aceitos são:

username

Um nome de usuário opcional (principalmente para publicação).

password

Uma senha opcional (principalmente para publicação).

server

O endereço do servidor RTMP.

port

O número da porta TCP a ser usada (o padrão é 1935).

app

É o nome do aplicativo a ser acessado. Geralmente corresponde ao caminho em que o aplicativo está instalado no servidor RTMP (por exemplo, /ondemand/, /flash/live/, etc.). Você também pode substituir o valor extraído da URI pela opção rtmp_app.

playpath

É o caminho ou nome do recurso a ser reproduzido em referência ao aplicativo especificado em app, podendo ser prefixado por "mp4:". Você também pode substituir o valor extraído da URI pela opção rtmp_playpath.

listen

Atua como servidor, aguardando uma conexão de entrada.

timeout

Tempo máximo de espera pela conexão de entrada. Implica listen.

Além disso, os seguintes parâmetros podem ser definidos por opções de linha de comando (ou em código por AVOptions):

rtmp_app

Nome do aplicativo a ser conectado no servidor RTMP. Esta opção substitui o parâmetro especificado na URI.

rtmp_buffer

Define o tempo de buffer do cliente em milissegundos. O padrão é 3000.

rtmp_conn

Parâmetros de conexão AMF arbitrários adicionais, analisados a partir de uma string, por exemplo como B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. Cada valor é prefixado por um único caractere que indica o tipo, B para Boolean, N para number, S para string, O para object, ou Z para null, seguido de dois-pontos. Para Booleans, o dado deve ser 0 ou 1 para FALSE ou TRUE, respectivamente. Da mesma forma, para Objects o dado deve ser 0 ou 1 para encerrar ou iniciar um objeto, respectivamente. Itens de dados em subobjetos podem ser nomeados, prefixando o tipo com ’N’ e especificando o nome antes do valor (ou seja, NB:myFlag:1). Esta opção pode ser usada várias vezes para construir sequências AMF arbitrárias.

rtmp_enhanced_codecs

Especifica a lista de codecs para os quais o cliente anuncia suporte em um fluxo RTMP aprimorado. Esta opção deve ser definida como uma lista separada por vírgulas de valores fourcc, como hvc1,av01,vp09 para vários codecs ou hvc1 para apenas um codec. A lista especificada será apresentada na propriedade "fourCcLive" da Connect Command Message.

rtmp_flashver

Versão do plugin Flash usada para executar o player SWF. O padrão é LNX 9,0,124,2. (Ao publicar, o padrão é FMLE/3.0 (compatible; ).)

rtmp_flush_interval

Número de pacotes descarregados na mesma requisição (somente RTMPT). O padrão é 10.

rtmp_live

Especifica que a mídia é um fluxo ao vivo. Não é possível retomar ou buscar em fluxos ao vivo. O valor padrão é any, o que significa que o assinante primeiro tenta reproduzir o fluxo ao vivo especificado em playpath. Se um fluxo ao vivo com esse nome não for encontrado, ele reproduz o fluxo gravado. Os outros valores possíveis são live e recorded.

rtmp_pageurl

URL da página web em que a mídia foi incorporada. Por padrão nenhum valor será enviado.

rtmp_playpath

Identificador do fluxo a ser reproduzido ou publicado. Esta opção substitui o parâmetro especificado na URI.

rtmp_subscribe

Nome do fluxo ao vivo ao qual se inscrever. Por padrão nenhum valor será enviado. Só é enviado se a opção for especificada ou se rtmp_live estiver definido como live.

rtmp_swfhash

Hash SHA256 do arquivo SWF descompactado (32 bytes).

rtmp_swfsize

Tamanho do arquivo SWF descompactado, necessário para SWFVerification.

rtmp_swfurl

URL do player SWF para a mídia. Por padrão nenhum valor será enviado.

rtmp_swfverify

URL para o arquivo swf do player; calcula o hash/tamanho automaticamente.

rtmp_tcurl

URL do fluxo de destino. O padrão é proto://host[:port]/app.

tcp_nodelay=1|0

Define TCP_NODELAY para desabilitar o algoritmo de Nagle. O valor padrão é 0.

Observação: no momento, a gravação no socket não é otimizada para minimizar chamadas de sistema, o que reduz a eficiência/efeito do TCP_NODELAY.

tcp_keepalive=1|0

Habilita o mecanismo TCP keepalive para detectar pares inativos e ajudar a manter conexões ociosas de longa duração. O valor padrão é 0.

Apenas a opção básica de keepalive (SO_KEEPALIVE) pode ser habilitada ou desabilitada. Parâmetros de ajuste específicos da plataforma, como TCP_KEEPIDLE, TCP_KEEPINTVL ou TCP_KEEPCNT, não são configuráveis e usarão os valores padrão do sistema operacional.

Por exemplo, para ler com o ffplay um recurso multimídia chamado "sample" do aplicativo "vod" em um servidor RTMP "myserver":

ffplay rtmp://myserver/vod/sample

Para publicar em um servidor protegido por senha, passando o playpath e os nomes de app separadamente:

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.

O Encrypted Real-Time Messaging Protocol (RTMPE) é usado para streaming de conteúdo multimídia dentro de primitivas criptográficas padrão, compostas por troca de chaves Diffie-Hellman e HMACSHA256, gerando um par de chaves RC4.

3.25 rtmps

Real-Time Messaging Protocol sobre uma conexão SSL segura.

O Real-Time Messaging Protocol (RTMPS) é usado para streaming de conteúdo multimídia por uma conexão criptografada.

3.26 rtmpt

Real-Time Messaging Protocol tunelado por HTTP.

O Real-Time Messaging Protocol tunelado por HTTP (RTMPT) é usado para streaming de conteúdo multimídia dentro de requisições HTTP para atravessar firewalls.

3.27 rtmpte

Encrypted Real-Time Messaging Protocol tunelado por HTTP.

O Encrypted Real-Time Messaging Protocol tunelado por HTTP (RTMPTE) é usado para streaming de conteúdo multimídia dentro de requisições HTTP para atravessar firewalls.

3.28 rtmpts

Real-Time Messaging Protocol tunelado por HTTPS.

O Real-Time Messaging Protocol tunelado por HTTPS (RTMPTS) é usado para streaming de conteúdo multimídia dentro de requisições HTTPS para atravessar firewalls.

3.29 libsmbclient

libsmbclient permite manipular recursos de rede CIFS/SMB.

É necessária a seguinte sintaxe.

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

Este protocolo aceita as seguintes opções.

timeout

Define o tempo limite, em milissegundos, das operações de E/S do socket usadas pela operação de baixo nível subjacente. Por padrão, é definido como -1, o que significa que o tempo limite não é especificado.

truncate

Trunca os arquivos existentes ao gravar, se definido como 1. Um valor de 0 evita o truncamento. O valor padrão é 1.

workgroup

Define o grupo de trabalho usado para estabelecer conexões. Por padrão, nenhum grupo de trabalho é especificado.

Para mais informações, consulte: http://www.samba.org/.

3.30 libssh

Secure File Transfer Protocol via libssh

É possível ler ou gravar em recursos remotos usando o protocolo SFTP.

É necessária a seguinte sintaxe.

sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

Este protocolo aceita as seguintes opções.

timeout

Define o tempo limite das operações de E/S do socket usadas pela operação de baixo nível subjacente. Por padrão, é definido como -1, o que significa que o tempo limite não é especificado.

truncate

Trunca os arquivos existentes ao gravar, se definido como 1. Um valor de 0 evita o truncamento. O valor padrão é 1.

private_key

Especifica o caminho do arquivo que contém a chave privada a ser usada durante a autorização. Por padrão, o libssh procura chaves no diretório ~/.ssh/.

Exemplo: reproduzir um arquivo armazenado em um servidor remoto.

ffplay sftp://user:password@server_address:22/home/user/resource.mpeg

3.31 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

Real-Time Messaging Protocol e suas variantes, com suporte via librtmp.

Requer a presença dos cabeçalhos e da biblioteca da librtmp durante a configuração. É necessário configurar explicitamente a compilação com "–enable-librtmp". Se habilitado, isso substituirá o protocolo RTMP nativo.

Este protocolo fornece a maioria das funções de cliente e algumas funções de servidor necessárias para oferecer suporte a RTMP, RTMP tunelado em HTTP (RTMPT), RTMP criptografado (RTMPE), RTMP sobre SSL/TLS (RTMPS) e variantes tuneladas desses tipos criptografados (RTMPTE, RTMPTS).

A sintaxe necessária é:

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

em que rtmp_proto é uma das strings "rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts" correspondentes a cada variante de RTMP, e server, port, app e playpath têm o mesmo significado especificado para o protocolo RTMP nativo. options contém uma lista de opções separadas por espaço no formato key=val.

Consulte a página de manual da librtmp (man 3 librtmp) para mais informações.

Por exemplo, para fazer streaming de um arquivo em tempo real para um servidor RTMP usando ffmpeg:

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

Para reproduzir o mesmo fluxo usando ffplay:

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

3.32 rtp

Real-time Transport Protocol.

A sintaxe necessária para uma URL RTP é:

rtp://hostname[:port][?options]

port especifica a porta RTP a ser usada.

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

Segue a lista de opções compatíveis.

ttl=n

Define o valor de TTL (Time-To-Live) (somente para multicast).

rtcpport=n

Define a porta RTCP remota como n.

localport, local_rtpport, localrtpport=n

Define a porta RTP local como n.

O uso do nome de opção localport está obsoleto e não deve ser usado.

local_rtcpport, localrtcpport=n'

Define a porta RTCP local como n.

pkt_size=n

Define o tamanho máximo de pacote (em bytes) como n.

buffer_size=size

Define o tamanho máximo do buffer do socket UDP, em bytes.

connect=0|1

Executa um connect() no socket UDP (se definido como 1) ou não (se definido como 0).

sources=ip[,ip]

Lista os endereços IP de origem permitidos.

block=ip[,ip]

Lista os endereços IP de origem não permitidos (bloqueados).

write_to_source=0|1

Envia pacotes para o endereço de origem do último pacote recebido (se definido como 1) ou para um endereço remoto padrão (se definido como 0).

localaddr=addr

Endereço IP local de uma interface de rede usada para enviar pacotes ou entrar em grupos multicast.

timeout=n

Define o tempo limite (em microssegundos) das operações de E/S do socket como n.

Notas importantes:

  1. Se rtcpport não estiver definida, a porta RTCP será definida como o valor da porta RTP mais 1.
  2. Se localrtpport (a porta RTP local) não estiver definida, qualquer porta disponível será usada para as portas RTP e RTCP locais.
  3. Se localrtcpport (a porta RTCP local) não estiver definida, ela será definida como o valor da porta RTP local mais 1.

3.33 rtsp

Real-Time Streaming Protocol.

Tecnicamente, o RTSP não é um manipulador de protocolo no libavformat, mas sim um demuxer e um muxer. O demuxer é compatível tanto com o RTSP normal (com dados transferidos por RTP; usado, por exemplo, pela Apple e pela Microsoft) quanto com o Real-RTSP (com dados transferidos por RDT).

O muxer pode ser usado para enviar um fluxo usando RTSP ANNOUNCE a um servidor compatível com esse recurso (atualmente o Darwin Streaming Server e o servidor RTSP de Mischa Spiegelmock).

A sintaxe necessária para uma URL RTSP é:

rtsp://hostname[:port]/path

As opções podem ser definidas na linha de comando do ffmpeg/ffplay, ou definidas no código por meio de AVOptions ou em avformat_open_input.

3.33.1 Muxer

As seguintes opções são compatíveis.

rtsp_transport

Define os protocolos de transporte do RTSP.

Aceita os seguintes valores:

‘udp’

Usa UDP como protocolo de transporte de nível inferior.

‘tcp’

Usa TCP (com intercalação dentro do canal de controle do RTSP) como protocolo de transporte de nível inferior.

O valor padrão é ‘0’.

rtsp_flags

Define as flags do RTSP.

Os seguintes valores são aceitos:

‘latm’

Usa empacotamento MP4A-LATM em vez de MPEG4-GENERIC para AAC.

‘rfc2190’

Usa empacotamento RFC 2190 em vez de RFC 4629 para H.263.

‘skip_rtcp’

Não envia relatórios de emissor (sender reports) do RTCP.

‘h264_mode0’

Usa o modo 0 para H.264 no RTP.

‘send_bye’

Envia pacotes RTCP BYE ao finalizar.

O valor padrão é ‘0’.

min_port

Define a porta UDP local mínima. O valor padrão é 5000.

max_port

Define a porta UDP local máxima. O valor padrão é 65000.

buffer_size

Define o tamanho máximo do buffer do socket, em bytes.

pkt_size

Define o tamanho máximo de pacote de envio (em bytes). O valor padrão é 1472.

3.33.2 Demuxer

As seguintes opções são compatíveis.

initial_pause

Não inicia a reprodução do fluxo imediatamente se definido como 1. O valor padrão é 0.

rtsp_transport

Define os protocolos de transporte do RTSP.

Aceita os seguintes valores:

‘udp’

Usa UDP como protocolo de transporte de nível inferior.

‘tcp’

Usa TCP (com intercalação dentro do canal de controle do RTSP) como protocolo de transporte de nível inferior.

‘udp_multicast’

Usa multicast UDP como protocolo de transporte de nível inferior.

‘http’

Usa tunelamento HTTP como protocolo de transporte de nível inferior, útil para atravessar proxies.

‘https’

Usa tunelamento HTTPS como protocolo de transporte de nível inferior, útil para atravessar proxies e amplamente usado por motivos de segurança.

É possível especificar vários protocolos de transporte de nível inferior; nesse caso, eles são testados um de cada vez (se a configuração de um falhar, o próximo é testado). Para o muxer, apenas as opções ‘tcp’ e ‘udp’ são compatíveis.

rtsp_flags

Define as flags do RTSP.

Os seguintes valores são aceitos:

‘filter_src’

Aceita pacotes somente do endereço e da porta negociados com o par.

‘listen’

Atua como servidor, aguardando uma conexão de entrada.

‘prefer_tcp’

Tenta TCP primeiro para o transporte RTP, se o TCP estiver disponível como transporte RTP do RTSP.

‘satip_raw’

Exporta o fluxo MPEG-TS raw em vez de demultiplexá-lo. A flag simplesmente grava o fluxo raw, mantendo os PAT/PMT/PIDs originais intactos.

O valor padrão é ‘none’.

allowed_media_types

Define os tipos de mídia aceitos do servidor.

As seguintes flags são aceitas:

‘video’ ‘audio’ ‘data’ ‘subtitle’

Por padrão, aceita todos os tipos de mídia.

min_port

Define a porta UDP local mínima. O valor padrão é 5000.

max_port

Define a porta UDP local máxima. O valor padrão é 65000.

listen_timeout

Define o tempo limite máximo (em segundos) para estabelecer uma conexão inicial. Definir listen_timeout > 0 configura rtsp_flags como ‘listen’. O padrão é -1, o que significa um tempo limite infinito quando o modo ‘listen’ está definido.

reorder_queue_size

Define o número de pacotes a armazenar em buffer para lidar com pacotes reordenados.

timeout

Define o tempo limite de E/S TCP do socket, em microssegundos.

user_agent

Substitui o cabeçalho User-Agent. Se não for especificado, o padrão é a string identificadora do libavformat.

buffer_size

Define o tamanho máximo do buffer do socket, em bytes.

Ao receber dados por UDP, o demuxer tenta reordenar os pacotes recebidos (já que podem chegar fora de ordem ou se perder completamente). Isso pode ser desativado definindo o atraso máximo de demultiplexação como zero (por meio do campo max_delay de AVFormatContext).

Ao assistir a fluxos Real-RTSP de múltiplas taxas de bits com ffplay, os fluxos exibidos podem ser escolhidos com -vst n e -ast n para vídeo e áudio, respectivamente, e podem ser trocados dinamicamente pressionando v e a.

3.33.3 Exemplos

Todos os exemplos a seguir usam as ferramentas ffplay e ffmpeg.

  • Assista a um fluxo por UDP, com um atraso máximo de reordenação de 0.5 segundos:

    ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
    
  • Assista a um fluxo tunelado por HTTP:

    ffplay -rtsp_transport http rtsp://server/video.mp4
    
  • Envie um fluxo em tempo real a um servidor RTSP, para que outras pessoas assistam:

    ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • Receba um fluxo em tempo real:

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

3.34 sap

Session Announcement Protocol (RFC 2974). Tecnicamente, isso não é um manipulador de protocolo no libavformat, mas sim um muxer e um demuxer. É usado para sinalização de fluxos RTP, anunciando periodicamente o SDP dos fluxos em uma porta separada.

3.34.1 Muxer

A sintaxe de uma URL SAP fornecida ao muxer é:

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

Os pacotes RTP são enviados a destination na porta port, ou à porta 5004 se nenhuma porta for especificada. options é uma lista separada por &. As seguintes opções são compatíveis:

announce_addr=address

Especifica o endereço IP de destino para o envio dos anúncios. Se omitido, os anúncios são enviados ao endereço de multicast de anúncio SAP comumente usado 224.2.127.254 (sap.mcast.net), ou a ff0e::2:7ffe se destination for um endereço IPv6.

announce_port=port

Especifica a porta pela qual enviar os anúncios; o padrão é 9875 se não for especificado.

ttl=ttl

Especifica o valor de time to live para os anúncios e os pacotes RTP; o padrão é 255.

same_port=0|1

Se definido como 1, envia todos os fluxos RTP pelo mesmo par de portas. Se zero (o padrão), cada fluxo é enviado por uma porta exclusiva, com cada fluxo em uma porta 2 números maior que a anterior. O VLC/Live555 exige que isso seja definido como 1 para conseguir receber o fluxo. A pilha RTP do libavformat para recepção exige que todos os fluxos sejam enviados por portas exclusivas.

A seguir, exemplos de linhas de comando.

Para transmitir um fluxo na sub-rede local, para assistir no VLC:

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

Da mesma forma, para assistir no ffplay:

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

E para assistir no ffplay, por IPv6:

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

3.34.2 Demuxer

A sintaxe de uma URL SAP fornecida ao demuxer é:

sap://[address][:port]

address é o endereço de multicast no qual escutar os anúncios; se omitido, é usado o padrão 224.2.127.254 (sap.mcast.net). port é a porta na qual se escuta, 9875 se omitida.

O demuxer escuta anúncios no endereço e na porta fornecidos. Ao receber um anúncio, tenta receber esse fluxo específico.

A seguir, exemplos de linhas de comando.

Para reproduzir o primeiro fluxo anunciado no endereço de multicast SAP normal:

ffplay sap://

Para reproduzir o primeiro fluxo anunciado em um dos endereços de multicast SAP IPv6 padrão:

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

3.35 sctp

Stream Control Transmission Protocol.

A sintaxe de URL aceita é:

sctp://host:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

Segue a lista de opções compatíveis.

listen

Se definido como qualquer valor, aguarda uma conexão de entrada. Por padrão, é feita uma conexão de saída.

max_streams

Define o número máximo de fluxos. Por padrão, nenhum limite é definido.

3.36 shared

Wrapper de cache thread-safe, persistente e entre processos para fluxos de entrada. Armazena em cache o fluxo de entrada em um arquivo no diretório especificado. É semelhante ao cache, mas com um cache persistente em disco que pode ser compartilhado entre vários processos ou demuxers, até mesmo de forma concorrente.

O nome do arquivo de cache é obtido aplicando hash à URL de entrada; portanto, há algum risco de colisão se a mesma URL for usada para conteúdos diferentes (por exemplo, como resultado do uso de dados POST extras para selecionar o ID do fluxo). Para evitar isso, use este protocolo apenas com URLs que identifiquem o conteúdo de forma unívoca; caso contrário, você pode obter uma mistura confusa de fontes.

As opções aceitas são:

cache_dir

Caminho para o diretório onde os arquivos de cache são armazenados. Esta opção é obrigatória.

block_shift

Fator de deslocamento (log2) do tamanho de bloco usado internamente para leituras/gravações. O padrão é 15, ou seja, blocos de 32KB. Se isso não corresponder ao valor especificado quando um arquivo de cache existente foi criado, o valor especificado anteriormente será usado.

read_only

Se true, usa o cache compartilhado para leituras, mas não grava novos blocos nele. O padrão é false. Observe que, mesmo com esta opção habilitada, o arquivo de cache será inicializado se ainda não existir.

cache_verify

Se true, verifica todos os dados lidos do cache em relação ao fluxo de entrada subjacente e relata quaisquer incompatibilidades. Observe que isso tornará a camada de cache praticamente inútil. Esta é uma opção puramente de depuração.

cache_timeout

Se definido como um valor diferente de zero, especifica o tempo máximo (em microssegundos) de espera até que os dados fiquem disponíveis, caso outro processo esteja tentando buscar e armazenar em cache o mesmo bloco ao mesmo tempo. Se esse tempo limite decorrer, presume-se que o outro processo pode ter travado ou terminado nesse meio-tempo.

Se definido como zero, nenhuma espera é feita e todos os processos competem imediatamente para tentar buscar os mesmos blocos ausentes por conta própria. O padrão é 10000 (10 ms).

retry_errors

Se true (o padrão), erros de leitura transitórios do fluxo de entrada subjacente são ignorados e a leitura é repetida. Se false, quaisquer blocos cuja leitura tenha falhado anteriormente serão tratados como permanentemente inacessíveis.

A sintaxe de URL é

shared:URL

3.37 srt

Haivision Secure Reliable Transport Protocol via libsrt.

A sintaxe compatível para uma URL SRT é:

srt://hostname:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

Segue a lista de opções compatíveis.

connect_timeout=milliseconds

Tempo limite de conexão; o SRT não consegue se conectar para RTT > 1500 ms (2 trocas de handshake) com o tempo limite de conexão padrão de 3 segundos. Esta opção se aplica aos modos de conexão caller e rendezvous. O tempo limite de conexão é 10 vezes o valor definido para o modo rendezvous (o que pode ser usado como solução alternativa para esse problema de conexão em versões anteriores).

ffs=bytes

Flight Flag Size (tamanho da janela), em bytes. O FFS é, na verdade, um parâmetro interno e deve ser definido com um valor não menor que recv_buffer_size e mss. O valor padrão é relativamente grande; portanto, a menos que você defina um buffer de recepção muito grande, não é necessário alterar esta opção. O valor padrão é 25600.

inputbw=bytes/seconds

Taxa de entrada nominal do emissor, em bytes por segundo. Usada junto com oheadbw, quando maxbw é definido como relativo (0), para calcular a taxa máxima de envio quando pacotes de recuperação são enviados junto com o fluxo de mídia principal: inputbw * (100 + oheadbw) / 100. Se inputbw não estiver definido enquanto maxbw está definido como relativo (0), a taxa de entrada real é avaliada internamente pela biblioteca. O valor padrão é 0.

iptos=tos

IP Type of Service. Aplica-se somente ao emissor. O valor padrão é 0xB8.

ipttl=ttl

IP Time To Live. Aplica-se somente ao emissor. O valor padrão é 64.

latency=microseconds

Atraso de entrega de pacotes baseado em marca de tempo. Usado para absorver rajadas de retransmissões de pacotes perdidos. Esta flag define rcvlatency e peerlatency com o mesmo valor. Observe que, antes da versão 1.3.0, esta era a única flag para definir a latência; no entanto, isso equivale, na prática, a definir peerlatency quando o lado é o emissor e rcvlatency quando o lado é o receptor, e o envio bidirecional de fluxo não é compatível.

listen_timeout=microseconds

Define o tempo limite de escuta do socket.

maxbw=bytes/seconds

Largura de banda máxima de envio, em bytes por segundo. -1 infinito (o limite do CSRTCC é 30mbps); 0 relativo à taxa de entrada (veja inputbw); >0 valor de limite absoluto. O valor padrão é 0 (relativo)

mode=caller|listener|rendezvous

Modo de conexão. caller abre uma conexão de cliente. listener inicia um servidor para escutar conexões de entrada. rendezvous usa o modo de conexão Rendez-Vous. O valor padrão é caller.

mss=bytes

Maximum Segment Size, em bytes. Usado para a alocação de buffer e o cálculo de taxa por meio de um contador de pacotes que presume pacotes totalmente preenchidos. É usado o menor MSS entre os pares. Isso é 1500 por padrão na internet em geral. Este é o tamanho máximo do pacote UDP e só pode ser reduzido, a menos que você tenha alguma configuração de rede dedicada incomum. O valor padrão é 1500.

nakreport=1|0

Se definido como 1, o receptor enviará mensagens ‘UMSG_LOSSREPORT‘ periodicamente até que um pacote perdido seja retransmitido ou descartado intencionalmente. O valor padrão é 1.

oheadbw=percents

Sobrecarga de largura de banda de recuperação acima da taxa de entrada, em porcentagem. Veja inputbw. O valor padrão é 25%.

passphrase=string

String de frase secreta de criptografia/descriptografia do HaiCrypt, com comprimento de 10 a 79 caracteres. A frase secreta é o segredo compartilhado entre o emissor e o receptor. É usada para gerar a Key Encrypting Key por meio de PBKDF2 (Password-Based Key Derivation Function). É usada somente se pbkeylen for diferente de zero. No receptor, é usada somente se os dados recebidos estiverem criptografados. A frase secreta configurada não pode ser recuperada (somente gravação).

enforced_encryption=1|0

Se true, ambas as partes da conexão devem ter a mesma senha definida (incluindo vazia, ou seja, sem criptografia). Se a senha não corresponder ou apenas um lado estiver sem criptografia, a conexão é rejeitada. O padrão é true.

kmrefreshrate=packets

O número de pacotes a serem transmitidos após o qual a chave de criptografia é trocada por uma nova chave. O padrão é -1. -1 significa automático (0x1000000 na biblioteca srt). O intervalo desta opção é de números inteiros entre 0 e INT_MAX.

kmpreannounce=packets

O intervalo entre o momento em que uma nova chave de criptografia é enviada e o momento em que ocorre a troca. Este valor também se aplica ao intervalo subsequente entre o momento em que ocorre a troca e o momento em que a chave de criptografia antiga é desativada. O padrão é -1. -1 significa automático (0x1000 na biblioteca srt). O intervalo desta opção é de números inteiros entre 0 e INT_MAX.

snddropdelay=microseconds

O atraso extra do emissor antes de descartar pacotes. Esse atraso é adicionado ao valor de intervalo de tempo de descarte padrão.

Valor especial -1: não descarta pacotes no emissor de forma alguma.

payload_size=bytes

Define o tamanho máximo declarado de um pacote transferido durante a chamada única à função de envio no modo Live. Use 0 se este valor não for usado (o que é o padrão no modo file). O padrão é -1 (automático), o que geralmente significa MPEG-TS; se você for usar o SRT para enviar algum outro tipo de payload, como, por exemplo, encapsular um fluxo ao vivo em quadros muito pequenos, poderá usar um tamanho máximo de quadro maior, embora não superior a 1456 bytes.

pkt_size=bytes

Alias de ‘payload_size’.

peerlatency=microseconds

O valor de latência (conforme descrito em rcvlatency) definido pelo lado emissor como valor mínimo para o receptor.

pbkeylen=bytes

Comprimento da chave de criptografia do emissor, em bytes. Só pode ser definido como 0, 16, 24 ou 32. Habilita a criptografia do emissor se diferente de 0. Não é necessário no receptor (definido como 0); o tamanho da chave é obtido do emissor no handshake do HaiCrypt. O valor padrão é 0.

rcvlatency=microseconds

O tempo que deve decorrer entre o momento em que o pacote foi enviado e o momento em que é entregue ao aplicativo receptor na função de recepção. Esse tempo deve ser uma margem grande o suficiente para cobrir o tempo gasto no envio, um RTT inesperadamente estendido e o tempo necessário para retransmitir o pacote UDP perdido. O valor de latência efetivo será o máximo entre o valor desta opção e o valor de peerlatency definido pelo lado par. Antes da versão 1.3.0, esta opção só está disponível como latency.

recv_buffer_size=bytes

Define o tamanho do buffer de recepção UDP, expresso em bytes.

send_buffer_size=bytes

Define o tamanho do buffer de envio UDP, expresso em bytes.

timeout=microseconds

Define os tempos limite para gerar erro nas operações de leitura, gravação e conexão. Observe que a biblioteca SRT possui tempos limite internos que podem ser controlados separadamente; o valor definido aqui é apenas um limite superior para eles.

tlpktdrop=1|0

Too-late Packet Drop. Quando habilitado no receptor, ignora os pacotes ausentes que não foram entregues a tempo e entrega os pacotes seguintes ao aplicativo quando chega o momento de reprodução deles. Também envia um ACK falso ao emissor. Quando habilitado no emissor e no par receptor, o emissor descarta os pacotes mais antigos que não têm chance de ser entregues a tempo. Era habilitado automaticamente no emissor se o receptor fosse compatível com esse recurso.

sndbuf=bytes

Define o tamanho do buffer de envio, expresso em bytes.

rcvbuf=bytes

Define o tamanho do buffer de recepção, expresso em bytes.

O buffer de recepção não deve ser maior que ffs.

lossmaxttl=packets

O valor até o qual a Reorder Tolerance pode crescer. Quando Reorder Tolerance é > 0, o relatório de perda de pacotes é adiado até que esse número de pacotes chegue. A Reorder Tolerance aumenta cada vez que chega um pacote "atrasado" que não se deve a uma retransmissão (ou seja, quando os pacotes UDP tendem a chegar fora de ordem), pela diferença entre a sequência mais recente e a sequência desse pacote, sem ultrapassar o valor desta opção. Por padrão, é 0, o que significa que esse mecanismo está desativado, e o relatório de perda é sempre enviado imediatamente ao ocorrer uma "lacuna" nas sequências.

minversion

A versão mínima do SRT exigida do par. Uma conexão com um par que não atenda ao requisito de versão mínima será rejeitada.

O formato de versão em hexadecimal é 0xXXYYZZ para x.y.z em forma legível por humanos.

streamid=string

Uma string limitada a 512 caracteres que pode ser definida no socket antes de conectar. Esse stream ID poderá ser recuperado pelo lado listener a partir do socket retornado por srt_accept e que foi conectado por um socket com esse stream ID definido. O SRT não impõe nenhuma interpretação especial ao conteúdo dessa string. Esta opção não faz sentido em uma conexão Rendezvous; o resultado pode ser que um lado simplesmente sobrescreva o valor do outro, sendo uma questão de sorte qual deles prevalece

srt_streamid=string

Alias de ‘streamid’ para evitar conflito com a opção de linha de comando do ffmpeg.

smoother=live|file

O tipo de Smoother usado para a transmissão desse socket, responsável pelo controle de transmissão e congestionamento. O tipo de Smoother deve ser exatamente o mesmo nas duas partes que se conectam; caso contrário, a conexão é rejeitada.

messageapi=1|0

Quando definido, esse socket usa a Message API; caso contrário, usa a Buffer API. Observe que, no modo live (veja transtype), apenas a message API está disponível. No modo File, você pode optar por usar um dos dois modos:

Stream API (padrão, quando esta opção é false). Neste modo, você pode enviar quantos dados desejar com uma única instrução de envio, ou até mesmo usar funções dedicadas que leem diretamente de um arquivo. O mecanismo interno cuida de todo o controle de velocidade e congestionamento. Ao receber, você também pode receber quantos dados desejar; os dados não extraídos ficarão aguardando a próxima chamada. Não há limite entre porções de dados no modo Stream.

Message API. Neste modo, sua única instrução de envio transmite exatamente uma porção de dados com limites definidos (uma mensagem). Ao contrário do modo Live, essa mensagem pode se estender por vários pacotes UDP, e a única limitação de tamanho é que ela caiba por inteiro no buffer de envio. O receptor deve usar um buffer tão grande quanto necessário para receber a mensagem; caso contrário, ela não será entregue. Quando a mensagem não está completa (nem todos os pacotes foram recebidos ou houve perda de pacote), ela não será entregue.

transtype=live|file

Define o tipo de transmissão do socket; em particular, definir esta opção configura vários outros parâmetros com seus valores padrão, conforme exigido para um tipo de transmissão específico.

live: define as opções para transmissão ao vivo. Neste modo, cada instrução de envio deve enviar apenas os dados que caibam em um pacote UDP, limitados ao valor definido primeiro em payload_size (1316 é o padrão neste modo). Não há controle de velocidade neste modo, apenas controle de largura de banda, se configurado, para não exceder a largura de banda com a transmissão adicional (pacotes retransmitidos e de controle).

file: define as opções para transmissão não ao vivo. Veja messageapi para mais explicações

linger=seconds

O número de segundos que o socket aguarda por dados não enviados ao fechar. O padrão é -1. -1 significa automático (desativado com 0 segundos no modo live, ativado com 180 segundos no modo file). O intervalo desta opção é de números inteiros entre 0 e INT_MAX.

tsbpd=1|0

Quando true, usa o modo Timestamp-based Packet Delivery. O comportamento padrão depende do tipo de transmissão: habilitado no modo live, desabilitado no modo file.

ipv6only=1|0

Aceita ou não IPv4 ao usar o endereço curinga IPv6. Isso deve ser definido ao escutar em um endereço curinga IPv6.

Para mais informações, consulte: https://github.com/Haivision/srt.

3.38 srtp

Secure Real-time Transport Protocol.

As opções aceitas são:

srtp_in_suite srtp_out_suite

Seleciona as suítes de codificação de entrada e saída.

Valores compatíveis:

‘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

Define os parâmetros de codificação de entrada e saída, expressos por uma representação em base64 de um bloco binário. Os primeiros 16 bytes desse bloco binário são usados como master key, e os 14 bytes seguintes são usados como master salt.

3.39 subfile

Extrai virtualmente um segmento de um arquivo ou outro fluxo. O fluxo subjacente precisa admitir busca (seek).

Opções aceitas:

start

Deslocamento inicial do segmento extraído, em bytes.

end

Deslocamento final do segmento extraído, em bytes. Se definido como 0, extrai até o final do arquivo.

Exemplos:

Extrai um capítulo de um arquivo VOB de DVD (setores inicial e final obtidos externamente e multiplicados por 2048):

subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB

Reproduz um arquivo AVI diretamente de um arquivo TAR:

subfile,,start,183241728,end,366490624,,:archive.tar

Reproduz um arquivo MPEG-TS do deslocamento inicial até o final:

subfile,,start,32815239,end,0,,:video.ts

3.40 tee

Grava a saída em múltiplos protocolos. As saídas individuais são separadas por |

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

3.41 tcp

Transmission Control Protocol.

A sintaxe necessária para uma URL TCP é:

tcp://hostname:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

Segue a lista de opções compatíveis.

listen=2|1|0

Aguarda uma conexão de entrada. 0 desativa listen, 1 ativa listen no modo de cliente único, 2 ativa listen no modo multicliente. O valor padrão é 0.

local_addr=addr

Endereço IP local de uma interface de rede usada para a conexão do socket tcp.

local_port=port

Porta local usada para a conexão do socket tcp.

timeout=microseconds

Define o tempo limite para gerar erro, expresso em microssegundos.

Esta opção só é relevante no modo de leitura: se nenhum dado chegar durante mais do que esse intervalo de tempo, gera um erro.

listen_timeout=milliseconds

Define o tempo limite de escuta, expresso em milissegundos.

recv_buffer_size=bytes

Define o tamanho do buffer de recepção, expresso em bytes.

send_buffer_size=bytes

Define o tamanho do buffer de envio, expresso em bytes.

tcp_nodelay=1|0

Define TCP_NODELAY para desativar o algoritmo de Nagle. O valor padrão é 0.

Observação: no momento, a gravação no socket não está otimizada para minimizar chamadas de sistema, o que reduz a eficiência/o efeito de TCP_NODELAY.

tcp_mss=bytes

Define o tamanho máximo de segmento para pacotes TCP de saída, expresso em bytes.

O exemplo a seguir mostra como configurar uma conexão TCP em escuta com ffmpeg, que é então acessada com 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)

A sintaxe necessária para uma URL TLS/SSL é:

tls://hostname:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

A seguir, a lista de opções compatíveis.

ca_file, cafile=filename

Um arquivo contendo certificados raiz de autoridades certificadoras (CA) a serem tratados como confiáveis. Se a biblioteca TLS vinculada incluir um padrão, pode não ser necessário especificar isso para que a verificação funcione, mas nem todas as bibliotecas e configurações têm padrões embutidos. O arquivo deve estar no formato OpenSSL PEM.

tls_verify, verify=1|0

Se habilitado, tenta verificar o par com o qual está se comunicando. Observe que, ao usar o OpenSSL, isso atualmente garante apenas que o certificado do par esteja assinado por um dos certificados raiz no banco de dados de CA, mas não valida se o certificado realmente corresponde ao nome do host ao qual está tentando se conectar. (Com outros backends, o nome do host também é validado.)

Isso é habilitado por padrão. A verificação do par requer um banco de dados de CA que, em alguns casos, deve ser fornecido por quem faz a chamada.

cert_file, cert=filename

Um arquivo contendo um certificado para usar no handshake com o par. (Ao operar como servidor, no modo listen, isso costuma ser exigido com mais frequência pelo par, enquanto os certificados de cliente só são obrigatórios em determinadas configurações.)

key_file, key=filename

Um arquivo contendo a chave privada do certificado.

listen=1|0

Se habilitado, escuta conexões na porta fornecida e assume o papel de servidor no handshake em vez do papel de cliente.

http_proxy

O proxy HTTP através do qual fazer o tunelamento, por exemplo, http://example.com:1234. O proxy deve ter suporte ao método CONNECT.

Exemplos de linhas de comando:

Para criar um servidor TLS/SSL que sirva um fluxo de entrada.

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

Para reproduzir um fluxo do servidor TLS/SSL usando ffplay:

ffplay tls://hostname:port

3.43 dtls

Datagram Transport Layer Security (DTLS)

A sintaxe necessária para uma URL DTLS é:

dtls://hostname:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

O DTLS compartilha a maioria das opções com o TLS, mas opera sobre UDP em vez de TCP.

A seguir, a lista de opções compatíveis.

ca_file, cafile=filename

Um arquivo contendo certificados raiz de autoridades certificadoras (CA) a serem tratados como confiáveis. Se a biblioteca TLS vinculada incluir um padrão, pode não ser necessário especificar isso para que a verificação funcione, mas nem todas as bibliotecas e configurações têm padrões embutidos. O arquivo deve estar no formato OpenSSL PEM.

tls_verify, verify=1|0

Se habilitado, tenta verificar o par com o qual está se comunicando. Observe que, ao usar o OpenSSL, isso atualmente garante apenas que o certificado do par esteja assinado por um dos certificados raiz no banco de dados de CA, mas não valida se o certificado realmente corresponde ao nome do host ao qual está tentando se conectar.

Isso é habilitado por padrão. A verificação do par requer um banco de dados de CA que, em alguns casos, deve ser fornecido por quem faz a chamada.

cert_file, cert=filename

Um arquivo contendo um certificado para usar no handshake com o par. (Ao operar como servidor, no modo listen, isso costuma ser exigido com mais frequência pelo par, enquanto os certificados de cliente só são obrigatórios em determinadas configurações.)

key_file, key=filename

Um arquivo contendo a chave privada do certificado.

cert_pem=string

String PEM do certificado

key_pem=string

String PEM da chave privada

listen=1|0

Se habilitado, escuta conexões na porta fornecida e assume o papel de servidor no handshake em vez do papel de cliente.

mtu=size

Define a Unidade Máxima de Transmissão (MTU) para pacotes DTLS.

use_srtp=1|0

Habilita a extensão DTLS use_srtp. Isso é usado em aplicativos WebRTC para estabelecer chaves de criptografia SRTP por meio do handshake DTLS. O padrão é desabilitado.

external_sock=1|0

Usa um socket externo em vez de criar um novo. Essa opção só faz sentido ao interagir com o código pela API; habilitá-la a partir da CLI causará falha imediata. O padrão é desabilitado.

Exemplos de linhas de comando:

Para criar um servidor DTLS:

ffmpeg -listen 1 -i dtls://hostname:port output

Para criar um cliente DTLS e enviar dados ao servidor:

ffmpeg -i input -f format dtls://hostname:port

3.44 udp

User Datagram Protocol.

A sintaxe necessária para uma URL UDP é:

udp://hostname:port[?options]

options contém uma lista de opções separadas por &, no formato key=val. A codificação percentual padrão (e o uso do sinal de mais para representar espaço) pode ser usada para fazer escape de chaves e valores.

As opções também podem ser especificadas por meio de opções de linha de comando (ou, no código, por meio de AVOptions).

Caso o uso de threads esteja habilitado no sistema, um buffer circular é usado para armazenar os dados recebidos, o que permite reduzir a perda de dados causada por estouros do buffer do socket UDP. As opções fifo_size e overrun_nonfatal estão relacionadas a esse buffer.

A seguir, a lista de opções compatíveis.

buffer_size=size

Define o tamanho máximo do buffer do socket UDP em bytes. Isso é usado para definir o tamanho do buffer de recepção ou de envio, dependendo do uso do socket. O padrão é 32 KB para saída e 384 KB para entrada. Veja também fifo_size.

bitrate=bitrate

Se definido como diferente de zero, a saída terá a taxa de bits constante especificada, desde que a entrada tenha pacotes suficientes para sustentá-la.

burst_bits=bits

Ao usar bitrate, isso especifica o número máximo de bits nas rajadas de pacotes.

localport=port

Substitui a porta UDP local usada para vincular.

localaddr=addr

Endereço IP local de uma interface de rede usada para enviar pacotes ou ingressar em grupos multicast.

pkt_size=size

Define o tamanho em bytes dos pacotes UDP.

reuse=1|0

Permite ou proíbe explicitamente a reutilização de sockets UDP.

ttl=ttl

Define o valor de time to live (somente para multicast).

dscp=dscp

Define o campo DSCP de 6 bits para pacotes de saída.

connect=1|0

Inicializa o socket UDP com connect(). Nesse caso, o endereço de destino não pode ser alterado posteriormente com ff_udp_set_remote_url. Se o endereço de destino não for conhecido no início, essa opção também pode ser especificada em ff_udp_set_remote_url. Isso permite descobrir o endereço de origem dos pacotes com getsockname, e faz com que as gravações retornem AVERROR(ECONNREFUSED) caso "destination unreachable" seja recebido. Para recepção, isso traz o benefício de receber pacotes apenas do endereço/porta do par especificado.

sources=address[,address]

Recebe somente pacotes enviados a partir dos endereços especificados. No caso de multicast, também assina somente o tráfego multicast proveniente desses endereços.

block=address[,address]

Ignora pacotes enviados a partir dos endereços especificados. No caso de multicast, também exclui esses endereços de origem da assinatura multicast.

fifo_size=units

Define o tamanho do buffer circular de recepção UDP, expresso como um número de pacotes com tamanho de 188 bytes. Se não for especificado, o padrão é 7*4096.

overrun_nonfatal=1|0

Sobrevive em caso de estouro do buffer circular de recepção UDP. O valor padrão é 0.

timeout=microseconds

Define o tempo limite para gerar erro, expresso em microssegundos.

Essa opção só é relevante no modo de leitura: se nenhum dado chegar em um intervalo maior que esse, um erro é gerado.

broadcast=1|0

Permite ou proíbe explicitamente o broadcast UDP.

Observe que o broadcast pode não funcionar corretamente em redes com proteção contra tempestade de broadcast.

3.44.1 Exemplos

  • Usar o ffmpeg para transmitir via UDP para um endpoint remoto:

    ffmpeg -i input -f format udp://hostname:port
    
  • Usar o ffmpeg para transmitir no formato mpegts via UDP usando pacotes UDP de tamanho 188, com um buffer de entrada grande:

    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    
  • Usar o ffmpeg para receber via UDP de um endpoint remoto:

    ffmpeg -i udp://[multicast-address]:port ...
    

3.45 unix

Socket Unix local

A sintaxe necessária para uma URL de socket Unix é:

unix://filepath

Os seguintes parâmetros podem ser definidos por meio de opções de linha de comando (ou, no código, por meio de AVOptions):

timeout

Tempo limite em ms.

listen

Cria o socket Unix no modo de escuta.

type

Seleciona o tipo de socket.

‘stream Corresponde a SOCK_STREAM (orientado a fluxo, confiável)’ ‘datagram Corresponde a SOCK_DGRAM (orientado a pacote, não confiável)’ ‘seqpacket Corresponde a SOCK_SEQPACKET (orientado a pacote, confiável)’ pkt_size

Tamanho máximo de pacote para sockets orientados a pacote (SOCK_DGRAM e SOCK_SEQPACKET). Se maior que zero, esse valor é usado como max_packet_size. Ignorado para SOCK_STREAM. O padrão é 0.

3.46 zmq

Mensagens assíncronas ZeroMQ usando a biblioteca libzmq.

Essa biblioteca oferece suporte à transmissão unicast para múltiplos clientes sem depender de um servidor externo.

A sintaxe necessária para transmitir ou se conectar a um fluxo é:

zmq:tcp://ip-address:port

Exemplo: criar um fluxo localhost na porta 5555:

ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555

Vários clientes podem se conectar ao fluxo usando:

ffplay zmq:tcp://127.0.0.1:5555

A transmissão para múltiplos clientes é implementada usando um padrão ZeroMQ Pub-Sub. O lado do servidor se vincula a uma porta e publica os dados. Os clientes se conectam ao servidor (via endereço IP/porta) e assinam o fluxo. A ordem em que o servidor e o cliente são iniciados geralmente não importa.

Para ter suporte a esse protocolo, o ffmpeg deve ser compilado com a opção –enable-libzmq.

As opções podem ser definidas na linha de comando do ffmpeg/ffplay. As seguintes opções são compatíveis:

pkt_size

Força o tamanho máximo de pacote para envio/recepção de dados. O valor padrão é 131,072 bytes. No lado do servidor, isso define o tamanho máximo dos pacotes enviados via ZeroMQ. Nos clientes, define o tamanho de um buffer interno para a recepção de pacotes. Observe que o pkt_size nos clientes deve ser igual ou maior que o pkt_size no servidor. Caso contrário, a mensagem recebida pode ser truncada, causando erros de decodificação.

4 Veja também

ffmpeg, ffplay, ffprobe, libavformat

5 Autores

Os desenvolvedores do FFmpeg.

Para mais detalhes sobre a autoria, consulte o histórico do Git do projeto (https://git.ffmpeg.org/ffmpeg), por exemplo, digitando o comando git log no diretório de fontes do FFmpeg, ou navegando pelo repositório on-line em https://git.ffmpeg.org/ffmpeg.

Os mantenedores dos componentes específicos estão listados no arquivo MAINTAINERS na árvore de código-fonte.

Hospedagem fornecida por telepoint.bg