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:
- Se rtcpport não estiver definida, a porta RTCP será definida como o valor da porta RTP mais 1.
- Se localrtpport (a porta RTP local) não estiver definida, qualquer porta disponível será usada para as portas RTP e RTCP locais.
- 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
ffmpegpara transmitir via UDP para um endpoint remoto:ffmpeg -i input -f format udp://hostname:port -
Usar o
ffmpegpara 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
ffmpegpara 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