⚠️ Este es un sitio de traducción no oficial, sin relación con el proyecto FFmpeg. Para información autorizada, consulte la página original (https://ffmpeg.org/ffmpeg-protocols.html).

Documentación de protocolos de FFmpeg

1 Descripción

Este documento describe los protocolos de entrada y salida proporcionados por la biblioteca libavformat.

2 Opciones de protocolo

La biblioteca libavformat ofrece algunas opciones globales genéricas, que pueden establecerse en todos los protocolos. Además, cada protocolo puede admitir las llamadas opciones privadas, específicas de ese componente.

Las opciones pueden establecerse indicando -option value en las herramientas de FFmpeg, definiendo el valor explícitamente en las opciones de AVFormatContext, o mediante la API de libavutil/opt.h para uso programático.

A continuación se muestra la lista de opciones admitidas:

protocol_whitelist list (input)

Establece una lista de protocolos permitidos separada por ",". "ALL" coincide con todos los protocolos. Los protocolos con el prefijo "-" quedan deshabilitados. De forma predeterminada se permiten todos los protocolos, pero los protocolos usados por otro protocolo (protocolos anidados) quedan restringidos a un subconjunto específico por protocolo.

3 Protocolos

Los protocolos son elementos configurados en FFmpeg que permiten el acceso a recursos que requieren protocolos específicos.

Al configurar su compilación de FFmpeg, todos los protocolos admitidos se habilitan de forma predeterminada. Puede listar todos los disponibles con la opción de configuración "–list-protocols".

Puede deshabilitar todos los protocolos con la opción de configuración "–disable-protocols", habilitar selectivamente un protocolo con la opción "–enable-protocol=PROTOCOL", o deshabilitar un protocolo concreto con la opción "–disable-protocol=PROTOCOL".

La opción "-protocols" de las herramientas ff* mostrará la lista de protocolos admitidos.

Todos los protocolos aceptan las siguientes opciones:

rw_timeout

Tiempo máximo de espera para que se completen las operaciones (de red) de lectura/escritura, en microsegundos.

A continuación se describen los protocolos actualmente disponibles.

3.1 amqp

Advanced Message Queueing Protocol (AMQP) versión 0-9-1 es un protocolo de comunicación de publicación-suscripción basado en un broker.

FFmpeg debe compilarse con –enable-librabbitmq para admitir AMQP. Además, debe ejecutarse un broker AMQP independiente. Un ejemplo de broker AMQP de código abierto es RabbitMQ.

Tras iniciar el broker, un cliente de FFmpeg puede transmitir datos al broker con el siguiente comando:

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

Donde hostname y port (5672 de forma predeterminada) son la dirección del broker. El cliente también puede establecer un usuario/contraseña para la autenticación. El valor predeterminado de ambos campos es "guest". El nombre del host virtual en el broker puede establecerse con vhost. El valor predeterminado es "/".

Varios suscriptores pueden recibir el flujo del broker con el comando:

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

En RabbitMQ, todos los datos publicados en el broker fluyen a través de un exchange específico, y cada cliente suscrito tiene asignada una cola/búfer. Cuando un paquete llega a un exchange, puede copiarse a la cola de un cliente en función de los campos exchange y routing_key.

Se admiten las siguientes opciones:

exchange

Establece el exchange que se usará en el broker. RabbitMQ tiene varios exchanges predefinidos: "amq.direct" es el exchange predeterminado, donde el publicador y el suscriptor deben tener una routing_key coincidente; "amq.fanout" equivale a una operación de difusión (es decir, los datos se reenvían a todas las colas del exchange fanout con independencia de la routing_key); y "amq.topic" es similar a "amq.direct", pero permite una coincidencia de patrones más compleja (consulte la documentación de RabbitMQ).

routing_key

Establece la clave de enrutamiento. El valor predeterminado es "amqp". La routing key se usa en los exchanges "amq.direct" y "amq.topic" para decidir si los paquetes se escriben en la cola de un suscriptor.

pkt_size

Tamaño máximo de cada paquete enviado/recibido al broker. El valor predeterminado es 131072. El mínimo es 4096 y el máximo, cualquier valor grande (representable por un int). Al recibir paquetes, esto establece el tamaño de un búfer interno en FFmpeg. Debe ser igual o mayor que el tamaño de los paquetes publicados en el broker; de lo contrario, el mensaje recibido puede truncarse y provocar errores de decodificación.

connection_timeout

El tiempo de espera en segundos durante la conexión inicial con el broker. El valor predeterminado es rw_timeout, o 5 segundos si rw_timeout no está establecido.

delivery_mode mode

Establece el modo de entrega de cada mensaje enviado al broker. Se aceptan los siguientes valores:

‘persistent’

Modo de entrega establecido en "persistent" (2). Este es el valor predeterminado. Los mensajes pueden escribirse en el disco del broker según su configuración.

‘non-persistent’

Modo de entrega establecido en "non-persistent" (1). Los mensajes permanecerán en la memoria del broker, a menos que este sufra presión de memoria.

3.2 async

Wrapper de relleno asíncrono de datos para flujos de entrada.

Rellena los datos en un hilo en segundo plano, para desacoplar la operación de E/S del hilo de demultiplexado.

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

3.3 bluray

Lee listas de reproducción de BluRay.

Las opciones aceptadas son:

angle

Ángulo de BluRay

chapter

Capítulo inicial (1...N)

playlist

Lista de reproducción a leer (BDMV/PLAYLIST/?????.mpls)

Ejemplos:

Leer la lista de reproducción más larga de un BluRay montado en /mnt/bluray:

bluray:/mnt/bluray

Leer el ángulo 2 de la lista de reproducción 4 de un BluRay montado en /mnt/bluray, empezando desde el capítulo 2:

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

3.4 cache

Wrapper de caché para flujos de entrada.

Almacena en caché el flujo de entrada en un archivo temporal. Aporta capacidad de búsqueda a los flujos en directo.

Las opciones aceptadas son:

read_ahead_limit

Cantidad en bytes que puede leerse por anticipado cuando la búsqueda no es compatible. El rango es de -1 a INT_MAX. -1 significa ilimitado. El valor predeterminado es 65536.

La sintaxis de la URL es

cache:URL

3.5 concat

Protocolo de concatenación física.

Lee y busca en varios recursos de forma secuencial como si fueran un único recurso.

Una URL aceptada por este protocolo tiene la siguiente sintaxis:

concat:URL1|URL2|...|URLN

donde URL1, URL2, ..., URLN son las URL de los recursos que se van a concatenar, cada una de las cuales puede especificar un protocolo distinto.

Por ejemplo, para leer una secuencia de archivos split1.mpeg, split2.mpeg, split3.mpeg con ffplay, use el comando:

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

Tenga en cuenta que puede ser necesario escapar el carácter "|", que es especial en muchos shells.

3.6 concatf

Protocolo de concatenación física que usa una lista de recursos delimitada por saltos de línea.

Lee y busca en varios recursos de forma secuencial como si fueran un único recurso.

Una URL aceptada por este protocolo tiene la siguiente sintaxis:

concatf:URL

donde URL es la URL que contiene una lista de recursos delimitada por saltos de línea que se van a concatenar, cada uno de los cuales puede especificar un protocolo distinto. Los caracteres especiales deben escaparse con barra invertida o comillas simples. Véase (ffmpeg-utils)la sección "Quoting and escaping" del manual ffmpeg-utils(1).

Por ejemplo, para leer una secuencia de archivos split1.mpeg, split2.mpeg, split3.mpeg listados en líneas separadas dentro de un archivo split.txt con ffplay, use el comando:

ffplay concatf:split.txt

Donde split.txt contiene las líneas:

split1.mpeg
split2.mpeg
split3.mpeg

3.7 crypto

Protocolo de lectura de flujos cifrados con AES.

Las opciones aceptadas son:

key

Establece el bloque binario de clave de descifrado AES a partir de la representación hexadecimal indicada.

iv

Establece el bloque binario del vector de inicialización de descifrado AES a partir de la representación hexadecimal indicada.

Formatos de URL aceptados:

crypto:URL
crypto+URL

3.8 data

Datos en línea dentro del URI. Véase http://en.wikipedia.org/wiki/Data_URI_scheme.

Por ejemplo, para convertir un archivo GIF proporcionado en línea con ffmpeg:

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

3.9 fd

Protocolo de acceso por descriptor de archivo.

La sintaxis aceptada es:

fd: -fd file_descriptor

Si no se especifica fd, de forma predeterminada se usará el descriptor de archivo stdout para escritura y stdin para lectura. A diferencia del protocolo pipe, el protocolo fd admite búsqueda si corresponde a un archivo regular. Por motivos de seguridad, el protocolo fd no admite pasar el descriptor de archivo a través de la URL.

Este protocolo acepta las siguientes opciones:

blocksize

Establece el tamaño máximo de bloque de la operación de E/S, en bytes. El valor predeterminado es INT_MAX, lo que hace que no se limite el tamaño de bloque solicitado. Establecer este valor en un nivel razonablemente bajo mejora el tiempo de reacción ante solicitudes de terminación del usuario, lo cual es valioso si la transmisión de datos es lenta.

fd

Establece el descriptor de archivo.

3.10 file

Protocolo de acceso a archivos.

Lee de un archivo o escribe en él.

Una URL de archivo puede tener la forma:

file:filename

donde filename es la ruta del archivo a leer.

Se asumirá que una URL sin prefijo de protocolo es una URL de archivo. Según la compilación, una URL que parezca una ruta de Windows con la letra de unidad al principio también se asumirá como una URL de archivo (habitualmente no es el caso en compilaciones para sistemas de tipo unix).

Por ejemplo, para leer desde un archivo input.mpeg con ffmpeg, use el comando:

ffmpeg -i file:input.mpeg output.mpeg

Este protocolo acepta las siguientes opciones:

truncate

Trunca los archivos existentes al escribir, si se establece en 1. Un valor de 0 impide el truncado. El valor predeterminado es 1.

blocksize

Establece el tamaño máximo de bloque de la operación de E/S, en bytes. El valor predeterminado es INT_MAX, lo que hace que no se limite el tamaño de bloque solicitado. Establecer este valor en un nivel razonablemente bajo mejora el tiempo de reacción ante solicitudes de terminación del usuario, lo cual es valioso en el caso de archivos en soportes lentos.

follow

Si se establece en 1, el protocolo reintentará la lectura al final del archivo, lo que permite leer archivos que aún se están escribiendo. Para que esto termine, es necesario usar la opción rw_timeout o usar el callback de interrupción (para usuarios de la API). Establecer esta opción también hace que se ignore el tamaño de archivo informado por el sistema de archivos.

seekable

Controla si se anuncia la capacidad de búsqueda en el archivo. 0 significa no buscable, -1 significa automático (buscable para archivos normales, no buscable para tuberías con nombre).

Muchos demuxers gestionan de forma distinta los recursos buscables y no buscables; anular este valor puede acelerar la apertura de ciertos archivos a costa de perder algunas funciones (por ejemplo, la búsqueda precisa).

pkt_size

Establece el tamaño máximo de paquete usado para la E/S de archivos. Un valor menor puede reducir el uso de memoria. Un valor mayor puede aumentar el rendimiento, especialmente con sistemas de archivos en red.

Para la lectura, si se establece explícitamente, anula el tamaño de búfer interno predeterminado (32 KB) y limita la cantidad máxima de datos leídos por operación.

Para la escritura, esto establece el tamaño de cada operación de escritura. El valor predeterminado es 256 KB para archivos regulares, 32 KB en los demás casos.

3.11 ftp

FTP (File Transfer Protocol).

Lee de recursos remotos o escribe en ellos usando el protocolo FTP.

Se requiere la siguiente sintaxis.

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

Este protocolo acepta las siguientes opciones.

timeout

Establece el tiempo de espera en microsegundos de las operaciones de E/S de socket usadas por la operación de bajo nivel subyacente. De forma predeterminada se establece en -1, lo que significa que el tiempo de espera no está especificado.

ftp-user

Establece un usuario para autenticarse en el servidor FTP. Se sobrescribe con el usuario indicado en la URL FTP.

ftp-password

Establece una contraseña para autenticarse en el servidor FTP. Se sobrescribe con la contraseña indicada en la URL FTP, o con ftp-anonymous-password si no se establece ningún usuario.

ftp-anonymous-password

Contraseña usada al iniciar sesión como usuario anónimo. Normalmente debería usarse una dirección de correo electrónico.

ftp-write-seekable

Controla la capacidad de búsqueda de la conexión durante la codificación. Si se establece en 1, se asume que el recurso es buscable; si se establece en 0, se asume que no lo es. El valor predeterminado es 0.

NOTA: el protocolo puede usarse como salida, pero se recomienda no hacerlo a menos que se tomen precauciones especiales (pruebas, configuración de servidor personalizada, etc.). Distintos servidores FTP se comportan de forma diferente durante la operación de búsqueda. Las herramientas ff* pueden producir contenido incompleto debido a limitaciones del servidor.

3.12 gopher

Protocolo Gopher.

3.13 gophers

Protocolo Gophers.

El protocolo Gopher con encapsulación TLS.

3.14 http

HTTP (Hyper Text Transfer Protocol).

Este protocolo acepta las siguientes opciones:

seekable

Controla la capacidad de búsqueda de la conexión. Si se establece en 1, se asume que el recurso es buscable; si se establece en 0, se asume que no lo es; si se establece en -1, intentará detectarlo automáticamente. El valor predeterminado es -1.

chunked_post

Si se establece en 1, usa Transfer-Encoding fragmentado para las solicitudes POST; el valor predeterminado es 1.

http_proxy

establece el proxy HTTP a través del cual tunelizar, p. ej. http://example.com:1234

headers

Establece cabeceras HTTP personalizadas; puede sobrescribir las cabeceras predeterminadas integradas. El valor debe ser una cadena que codifique las cabeceras.

content_type

Establece un tipo de contenido específico para los mensajes POST o para el modo de escucha.

user_agent

Sobrescribe la cabecera User-Agent. Si no se especifica, el protocolo usará una cadena que describe la compilación de libavformat. ("Lavf/")

referer

Establece la cabecera Referer. Incluye la cabecera ’Referer: URL’ en la solicitud HTTP.

multiple_requests

Usa conexiones persistentes si se establece en 1; el valor predeterminado es 0.

request_size

Limita el tamaño de las solicitudes realizadas. Esto es útil para algunos servidores problemáticos que limitan las solicitudes de rango sin acotar, así como cuando se espera buscar con frecuencia. Deshabilitado (establecido en 0) de forma predeterminada.

Tenga en cuenta que, si habilita esta opción, se recomienda encarecidamente habilitar también la opción multiple_requests, así como establecer short_seek_size con el mismo valor o uno mayor. Hacerlo permite que FFmpeg reutilice una única conexión HTTP siempre que sea posible.

initial_request_size

Limita el tamaño de las solicitudes iniciales. Similar a request_size, pero solo se usa durante el análisis inicial del formato. Útil para formatos como MXF o MOV que requieren búsquedas frecuentes durante el análisis de la cabecera. Se mantiene hasta que el demuxer realiza una solicitud de lectura mayor que este tamaño (sin una búsqueda intermedia), tras lo cual la implementación continuará usando solicitudes normalmente. Deshabilitado (establecido en 0) de forma predeterminada.

Tenga en cuenta que, si habilita esta opción, se recomienda encarecidamente habilitar también la opción multiple_requests, así como establecer short_seek_size con el mismo valor o uno mayor.

post_data

Establece datos POST HTTP personalizados.

mime_type

Exporta el tipo MIME.

http_version

Exporta el número de versión de la respuesta HTTP. Normalmente "1.0" o "1.1".

cookies

Establece las cookies que se enviarán en futuras solicitudes. El formato de cada cookie es el mismo que el valor de un campo de respuesta HTTP Set-Cookie. Varias cookies pueden delimitarse con un carácter de salto de línea.

icy

Si se establece en 1, solicita metadatos ICY (SHOUTcast) al servidor. Si el servidor lo admite, la aplicación debe recuperar los metadatos leyendo las opciones icy_metadata_headers e icy_metadata_packet. El valor predeterminado es 1.

icy_metadata_headers

Si el servidor admite metadatos ICY, esto contiene las cabeceras de respuesta HTTP específicas de ICY, separadas por caracteres de salto de línea.

icy_metadata_packet

Si el servidor admite metadatos ICY, y icy se estableció en 1, esto contiene el último paquete de metadatos no vacío enviado por el servidor. Las aplicaciones interesadas en actualizaciones de metadatos a mitad de flujo deberían consultarlo a intervalos regulares.

metadata

Establece un diccionario exportado que contiene metadatos de Icecast del bitstream, si están presentes. Solo es útil con la API en C.

auth_type

Establece el tipo de autenticación HTTP. No hay opción para Digest, ya que este método requiere obtener antes parámetros nonce del servidor y no puede usarse directamente como Basic.

none

Elige el tipo de autenticación HTTP automáticamente. Este es el valor predeterminado.

basic

Elige la autenticación básica HTTP.

La autenticación básica envía una cadena codificada en Base64 que contiene el nombre de usuario y la contraseña del cliente. Base64 no es una forma de cifrado y debe considerarse equivalente a enviar el nombre de usuario y la contraseña en texto claro (Base64 es una codificación reversible). Si es necesario proteger un recurso, considere firmemente usar un esquema de autenticación distinto de la autenticación básica. Debe usarse HTTPS/TLS junto con la autenticación básica. Sin estas mejoras de seguridad adicionales, la autenticación básica no debería usarse para proteger información sensible o valiosa.

send_expect_100

Envía una cabecera Expect: 100-continue para POST. Si se establece en 1, se enviará; si se establece en 0, no se enviará; si se establece en -1, intentará enviarla si es aplicable. El valor predeterminado es -1.

location

Un diccionario exportado que contiene la ubicación del contenido. Solo es útil con la API en C.

offset

Establece el desplazamiento de byte inicial.

end_offset

Intenta limitar la solicitud a los bytes anteriores a este desplazamiento.

method

Cuando se usa como opción de cliente, establece el método HTTP de la solicitud.

Cuando se usa como opción de servidor, establece el método HTTP que se espera del cliente(s). Si el método HTTP esperado y el recibido no coinciden, el cliente recibirá una respuesta Bad Request. Si no se establece, el método HTTP no se comprueba por ahora; esto será reemplazado por detección automática en el futuro.

reconnect

Reconecta automáticamente si se pierde la conexión antes de llegar al EOF.

reconnect_at_eof

Si se establece, el EOF se trata como un error y provoca la reconexión; esto es útil para flujos en directo o interminables.

reconnect_on_network_error

Reconecta automáticamente en caso de errores TCP/TLS durante la conexión.

reconnect_on_http_error

Una lista separada por comas de códigos de estado HTTP en los que reconectar. La lista puede incluir códigos de estado específicos (p. ej. ’503’) o las cadenas ’4xx’ / ’5xx’.

reconnect_streamed

Si se establece, incluso los flujos en streaming/no buscables se reconectarán ante errores.

reconnect_delay_max

Establece el retardo máximo en segundos tras el cual se abandona el intento de reconexión.

reconnect_max_retries

Establece el número máximo de veces que se reintenta una conexión. Sin valor predeterminado.

reconnect_delay_total_max

Establece el retardo total máximo en segundos tras el cual se abandona el intento de reconexión.

respect_retry_after

Si se habilita, y se encuentra una cabecera Retry-After, se respetará el retardo de reconexión solicitado en lugar de usar un retroceso exponencial. Útil para errores 429 y 503. Habilitado de forma predeterminada.

listen

Si se establece en 1, habilita el servidor HTTP experimental. Esto puede usarse para enviar datos cuando se emplea como opción de salida, o para leer datos de un cliente mediante HTTP POST cuando se usa como opción de entrada. Si se establece en 2, habilita el servidor HTTP experimental multicliente. Esto aún no está implementado en ffmpeg.c y, por tanto, no debe usarse como opción de línea de comandos.

# 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

El recurso solicitado por un cliente, cuando se usa el servidor HTTP experimental.

reply_code

El código HTTP devuelto al cliente, cuando se usa el servidor HTTP experimental.

short_seek_size

Establece el umbral, en bytes, a partir del cual debe preferirse una lectura anticipada (readahead) frente a una búsqueda y una nueva solicitud HTTP. Esto resulta útil, por ejemplo, para garantizar que se usa la misma conexión al leer paquetes de vídeo grandes intercalados con paquetes de audio pequeños.

3.14.1 Cookies HTTP

Algunas solicitudes HTTP se rechazarán a menos que se incluyan valores de cookies en la solicitud. La opción cookies permite especificar estas cookies. Como mínimo, cada cookie debe especificar un valor junto con una ruta y un dominio. Las solicitudes HTTP que coincidan tanto con el dominio como con la ruta incluirán automáticamente el valor de la cookie en el campo de cabecera HTTP Cookie. Varias cookies pueden delimitarse con un salto de línea.

La sintaxis necesaria para reproducir un flujo especificando una cookie es:

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

3.15 Icecast

Protocolo Icecast (transmisión a servidores Icecast)

Este protocolo acepta las siguientes opciones:

ice_genre

Establece el género del flujo.

ice_name

Establece el nombre del flujo.

ice_description

Establece la descripción del flujo.

ice_url

Establece la URL del sitio web del flujo.

ice_public

Establece si el flujo debe ser público. El valor predeterminado es 0 (no público).

user_agent

Sobrescribe la cabecera User-Agent. Si no se especifica, se usará una cadena de la forma "Lavf/".

password

Establece la contraseña del punto de montaje de Icecast.

content_type

Establece el tipo de contenido del flujo. Debe establecerse si es distinto de audio/mpeg.

legacy_icecast

Esto habilita la compatibilidad con versiones de Icecast < 2.4.0, que no admiten el método HTTP PUT sino el método SOURCE.

tls

Establece una conexión TLS (HTTPS) con Icecast.

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

3.16 ipfs

Compatibilidad con el protocolo InterPlanetary File System (IPFS). Se puede acceder a archivos almacenados en la red IPFS a través de las llamadas puertas de enlace (gateways), que son endpoints http(s). Este protocolo envuelve los protocolos nativos de IPFS (ipfs:// e ipns://) para enviarlos a dicha puerta de enlace. Los usuarios pueden (y deberían) alojar su propio nodo, lo que significa que este protocolo usará la puerta de enlace local para acceder a los archivos en la red IPFS.

Este protocolo acepta las siguientes opciones:

gateway

Define la puerta de enlace a usar. Si no se establece, el protocolo intentará primero localizar la puerta de enlace local buscando en $IPFS_GATEWAY, $IPFS_PATH y $HOME/.ipfs/, en ese orden.

Este protocolo puede usarse de 2 formas. Usando IPFS:

ffplay ipfs://<hash>

O el protocolo IPNS (IPNS es IPFS mutable):

ffplay ipns://<hash>

3.17 mmst

Protocolo MMS (Microsoft Media Server) sobre TCP.

3.18 mmsh

Protocolo MMS (Microsoft Media Server) sobre HTTP.

La sintaxis requerida es:

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

3.19 md5

Protocolo de salida MD5.

Calcula el hash MD5 de los datos que se van a escribir y, al cerrar, lo escribe en la salida designada o en stdout si no se especifica ninguna. Puede usarse para probar muxers sin escribir un archivo real.

A continuación se muestran algunos ejemplos.

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

Tenga en cuenta que algunos formatos (típicamente MOV) requieren que el protocolo de salida sea buscable, por lo que fallarán con el protocolo de salida MD5.

3.20 pipe

Protocolo de acceso a tuberías (pipes) de UNIX.

Lee y escribe desde tuberías UNIX.

La sintaxis aceptada es:

pipe:[number]

Si no se especifica fd, number es el número correspondiente al descriptor de archivo de la tubería (p. ej. 0 para stdin, 1 para stdout, 2 para stderr). Si no se especifica number, de forma predeterminada se usará el descriptor de archivo stdout para escritura y stdin para lectura.

Por ejemplo, para leer desde stdin con ffmpeg:

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

Para escribir en stdout con 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 acepta las siguientes opciones:

blocksize

Establece el tamaño máximo de bloque de la operación de E/S, en bytes. El valor predeterminado es INT_MAX, lo que hace que no se limite el tamaño de bloque solicitado. Establecer este valor en un nivel razonablemente bajo mejora el tiempo de reacción ante solicitudes de terminación del usuario, lo cual es valioso si la transmisión de datos es lenta.

fd

Establece el descriptor de archivo.

Tenga en cuenta que algunos formatos (típicamente MOV) requieren que el protocolo de salida sea buscable, por lo que fallarán con el protocolo de salida pipe.

3.21 prompeg

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

El FEC Pro-MPEG CoP#3 es un mecanismo de corrección de errores hacia adelante (FEC) de comprobación de paridad 2D para flujos de transporte MPEG-2 enviados sobre RTP.

Este protocolo debe usarse junto con el muxer rtp_mpegts y el protocolo rtp.

La sintaxis requerida es:

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

Los puertos UDP de destino son port + 2 para el flujo FEC de columnas y port + 4 para el flujo FEC de filas.

Este protocolo acepta las siguientes opciones:

l=n

El número de columnas (4-20, LxD <= 100)

d=n

El número de filas (4-20, LxD <= 100)

Ejemplo de uso:

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

3.22 rist

Protocolo Reliable Internet Streaming Transport (transporte de streaming fiable por Internet)

Las opciones aceptadas son:

rist_profile

Valores admitidos:

‘simple’ ‘main’

Este es el valor predeterminado.

‘advanced’ buffer_size

Establece el tamaño del búfer interno de RIST en milisegundos para la retransmisión de datos. El valor predeterminado es 0, lo que significa el valor predeterminado de librist (1 s). El valor máximo es 30 segundos.

fifo_size

Tamaño del fifo de salida del receptor de librist en número de paquetes. Debe ser una potencia de 2. El valor predeterminado es 8192 (frente al valor predeterminado de librist de 1024).

overrun_nonfatal=1|0

Sobrevive en caso de desbordamiento del búfer fifo de librist. El valor predeterminado es 0.

pkt_size

Establece el tamaño máximo de paquete para el envío de datos. 1316 de forma predeterminada.

log_level

Establece el loglevel para los mensajes de registro de RIST. Solo es necesario establecer esto si desea habilitar explícitamente mensajes de nivel de depuración o la simulación de pérdida de paquetes; en caso contrario, se respeta el loglevel habitual.

secret

Establece la anulación del secreto de cifrado; de forma predeterminada no está establecido.

encryption

Establece el tipo de cifrado; de forma predeterminada está deshabilitado. Los valores aceptables son 128 y 256.

3.23 rtmp

Real-Time Messaging Protocol.

El Real-Time Messaging Protocol (RTMP) se usa para transmitir contenido multimedia a través de una red TCP/IP.

La sintaxis requerida es:

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

Los parámetros aceptados son:

username

Un nombre de usuario opcional (principalmente para publicar).

password

Una contraseña opcional (principalmente para publicar).

server

La dirección del servidor RTMP.

port

El número de puerto TCP a usar (1935 de forma predeterminada).

app

Es el nombre de la aplicación a la que se accede. Normalmente corresponde a la ruta donde está instalada la aplicación en el servidor RTMP (p. ej. /ondemand/, /flash/live/, etc.). También puede sobrescribir el valor extraído de la URI mediante la opción rtmp_app.

playpath

Es la ruta o el nombre del recurso a reproducir con referencia a la aplicación especificada en app; puede llevar el prefijo "mp4:". También puede sobrescribir el valor extraído de la URI mediante la opción rtmp_playpath.

listen

Actúa como servidor, esperando una conexión entrante.

timeout

Tiempo máximo de espera de la conexión entrante. Implica listen.

Además, los siguientes parámetros pueden establecerse mediante opciones de línea de comandos (o en código mediante AVOptions):

rtmp_app

Nombre de la aplicación a la que conectarse en el servidor RTMP. Esta opción sobrescribe el parámetro especificado en la URI.

rtmp_buffer

Establece el tiempo de búfer del cliente en milisegundos. El valor predeterminado es 3000.

rtmp_conn

Parámetros de conexión AMF arbitrarios adicionales, analizados a partir de una cadena, p. ej. como B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. Cada valor va prefijado por un único carácter que indica el tipo: B para booleano, N para número, S para cadena, O para objeto, o Z para nulo, seguido de dos puntos. Para los booleanos, el dato debe ser 0 o 1 para FALSE o TRUE, respectivamente. Del mismo modo, para los objetos el dato debe ser 0 o 1 para terminar o comenzar un objeto, respectivamente. Los elementos de datos en subobjetos pueden nombrarse, prefijando el tipo con ’N’ y especificando el nombre antes del valor (es decir, NB:myFlag:1). Esta opción puede usarse varias veces para construir secuencias AMF arbitrarias.

rtmp_enhanced_codecs

Especifica la lista de codecs que el cliente anuncia admitir en un flujo RTMP mejorado. Esta opción debe establecerse con una lista separada por comas de valores fourcc, como hvc1,av01,vp09 para varios codecs o hvc1 para uno solo. La lista especificada se presentará en la propiedad "fourCcLive" del mensaje Connect Command.

rtmp_flashver

Versión del plugin Flash usada para ejecutar el reproductor SWF. El valor predeterminado es LNX 9,0,124,2. (Al publicar, el valor predeterminado es FMLE/3.0 (compatible; ).)

rtmp_flush_interval

Número de paquetes vaciados en la misma solicitud (solo RTMPT). El valor predeterminado es 10.

rtmp_live

Especifica que el medio es un flujo en directo. No es posible reanudar ni buscar en flujos en directo. El valor predeterminado es any, lo que significa que el suscriptor primero intenta reproducir el flujo en directo especificado en playpath. Si no se encuentra un flujo en directo con ese nombre, reproduce el flujo grabado. Los otros valores posibles son live y recorded.

rtmp_pageurl

URL de la página web en la que se incrustó el medio. De forma predeterminada no se enviará ningún valor.

rtmp_playpath

Identificador del flujo a reproducir o publicar. Esta opción sobrescribe el parámetro especificado en la URI.

rtmp_subscribe

Nombre del flujo en directo al que suscribirse. De forma predeterminada no se enviará ningún valor. Solo se envía si la opción se especifica o si rtmp_live se establece en live.

rtmp_swfhash

Hash SHA256 del archivo SWF descomprimido (32 bytes).

rtmp_swfsize

Tamaño del archivo SWF descomprimido, necesario para SWFVerification.

rtmp_swfurl

URL del reproductor SWF para el medio. De forma predeterminada no se enviará ningún valor.

rtmp_swfverify

URL al archivo swf del reproductor; calcula el hash/tamaño automáticamente.

rtmp_tcurl

URL del flujo de destino. El valor predeterminado es proto://host[:port]/app.

tcp_nodelay=1|0

Establece TCP_NODELAY para deshabilitar el algoritmo de Nagle. El valor predeterminado es 0.

Nota: la escritura en el socket actualmente no está optimizada para minimizar las llamadas al sistema, lo que reduce la eficacia/efecto de TCP_NODELAY.

tcp_keepalive=1|0

Habilita el mecanismo TCP keepalive para detectar peers muertos y ayudar a mantener conexiones inactivas de larga duración. El valor predeterminado es 0.

Solo puede habilitarse o deshabilitarse la opción básica de keepalive (SO_KEEPALIVE). Los parámetros de ajuste específicos de la plataforma, como TCP_KEEPIDLE, TCP_KEEPINTVL o TCP_KEEPCNT, no son configurables y usarán los valores predeterminados del sistema operativo.

Por ejemplo, para leer con ffplay un recurso multimedia llamado "sample" de la aplicación "vod" desde un servidor RTMP "myserver":

ffplay rtmp://myserver/vod/sample

Para publicar en un servidor protegido con contraseña, pasando el playpath y el nombre de la app por separado:

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.

El Encrypted Real-Time Messaging Protocol (RTMPE) se utiliza para transmitir contenido multimedia dentro de primitivas criptográficas estándar, compuestas por el intercambio de claves Diffie-Hellman y HMACSHA256, que genera un par de claves RC4.

3.25 rtmps

Real-Time Messaging Protocol sobre una conexión SSL segura.

El Real-Time Messaging Protocol (RTMPS) se utiliza para transmitir contenido multimedia a través de una conexión cifrada.

3.26 rtmpt

Real-Time Messaging Protocol tunelizado a través de HTTP.

El Real-Time Messaging Protocol tunelizado a través de HTTP (RTMPT) se utiliza para transmitir contenido multimedia dentro de solicitudes HTTP con el fin de atravesar cortafuegos.

3.27 rtmpte

Encrypted Real-Time Messaging Protocol tunelizado a través de HTTP.

El Encrypted Real-Time Messaging Protocol tunelizado a través de HTTP (RTMPTE) se utiliza para transmitir contenido multimedia dentro de solicitudes HTTP con el fin de atravesar cortafuegos.

3.28 rtmpts

Real-Time Messaging Protocol tunelizado a través de HTTPS.

El Real-Time Messaging Protocol tunelizado a través de HTTPS (RTMPTS) se utiliza para transmitir contenido multimedia dentro de solicitudes HTTPS con el fin de atravesar cortafuegos.

3.29 libsmbclient

libsmbclient permite manipular recursos de red CIFS/SMB.

Se requiere la siguiente sintaxis.

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

Este protocolo acepta las siguientes opciones.

timeout

Establece el tiempo de espera, en milisegundos, de las operaciones de E/S del socket usadas por la operación subyacente de bajo nivel. De forma predeterminada se establece en -1, lo que significa que no se especifica ningún tiempo de espera.

truncate

Trunca los archivos existentes al escribir si se establece en 1. Un valor de 0 evita el truncado. El valor predeterminado es 1.

workgroup

Establece el grupo de trabajo usado para realizar las conexiones. De forma predeterminada no se especifica ningún grupo de trabajo.

Para más información, consulte: http://www.samba.org/.

3.30 libssh

Secure File Transfer Protocol a través de libssh

Lee de recursos remotos o escribe en ellos usando el protocolo SFTP.

Se requiere la siguiente sintaxis.

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

Este protocolo acepta las siguientes opciones.

timeout

Establece el tiempo de espera de las operaciones de E/S del socket usadas por la operación subyacente de bajo nivel. De forma predeterminada se establece en -1, lo que significa que no se especifica ningún tiempo de espera.

truncate

Trunca los archivos existentes al escribir si se establece en 1. Un valor de 0 evita el truncado. El valor predeterminado es 1.

private_key

Especifica la ruta del archivo que contiene la clave privada que se usará durante la autorización. De forma predeterminada, libssh busca las claves en el directorio ~/.ssh/.

Ejemplo: reproducir un archivo almacenado en un 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 y sus variantes, compatible con librtmp.

Requiere la presencia de las cabeceras y la biblioteca de librtmp durante la configuración. Es necesario configurar explícitamente la compilación con "–enable-librtmp". Si se habilita, esto sustituirá al protocolo RTMP nativo.

Este protocolo ofrece la mayoría de las funciones de cliente y algunas funciones de servidor necesarias para admitir RTMP, RTMP tunelizado en HTTP (RTMPT), RTMP cifrado (RTMPE), RTMP sobre SSL/TLS (RTMPS) y las variantes tunelizadas de estos tipos cifrados (RTMPTE, RTMPTS).

La sintaxis requerida es:

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

donde rtmp_proto es una de las cadenas "rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts" correspondiente a cada variante de RTMP, y server, port, app y playpath tienen el mismo significado especificado para el protocolo RTMP nativo. options contiene una lista de opciones separadas por espacios con la forma key=val.

Consulte la página de manual de librtmp (man 3 librtmp) para más información.

Por ejemplo, para transmitir un archivo en tiempo real a un servidor RTMP usando ffmpeg:

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

Para reproducir el mismo flujo usando ffplay:

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

3.32 rtp

Real-time Transport Protocol.

La sintaxis requerida para una URL RTP es:

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

port especifica el puerto RTP que se debe usar.

options contiene una lista de opciones separadas por & con la forma key=val. Para escapar claves y valores puede usarse la codificación porcentual estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de la línea de comandos (o en el código mediante AVOptions).

A continuación se muestra la lista de opciones admitidas.

ttl=n

Establece el valor TTL (Time-To-Live) (solo para multidifusión).

rtcpport=n

Establece el puerto RTCP remoto en n.

localport, local_rtpport, localrtpport=n

Establece el puerto RTP local en n.

El uso del nombre de opción localport está obsoleto y no debería usarse.

local_rtcpport, localrtcpport=n'

Establece el puerto RTCP local en n.

pkt_size=n

Establece el tamaño máximo de paquete (en bytes) en n.

buffer_size=size

Establece el tamaño máximo del búfer del socket UDP, en bytes.

connect=0|1

Realiza un connect() en el socket UDP (si se establece en 1) o no lo realiza (si se establece en 0).

sources=ip[,ip]

Enumera las direcciones IP de origen permitidas.

block=ip[,ip]

Enumera las direcciones IP de origen no permitidas (bloqueadas).

write_to_source=0|1

Envía los paquetes a la dirección de origen del último paquete recibido (si se establece en 1) o a una dirección remota predeterminada (si se establece en 0).

localaddr=addr

Dirección IP local de una interfaz de red usada para enviar paquetes o unirse a grupos de multidifusión.

timeout=n

Establece el tiempo de espera (en microsegundos) de las operaciones de E/S del socket en n.

Notas importantes:

  1. Si no se establece rtcpport, el puerto RTCP se establecerá en el valor del puerto RTP más 1.
  2. Si no se establece localrtpport (el puerto RTP local), se usará cualquier puerto disponible para los puertos RTP y RTCP locales.
  3. Si no se establece localrtcpport (el puerto RTCP local), se establecerá en el valor del puerto RTP local más 1.

3.33 rtsp

Real-Time Streaming Protocol.

RTSP no es técnicamente un manejador de protocolo en libavformat, sino un demuxer y un muxer. El demuxer admite tanto el RTSP normal (con los datos transferidos sobre RTP; usado, por ejemplo, por Apple y Microsoft) como el Real-RTSP (con los datos transferidos sobre RDT).

El muxer puede usarse para enviar un flujo mediante RTSP ANNOUNCE a un servidor que lo admita (actualmente Darwin Streaming Server y el servidor RTSP de Mischa Spiegelmock).

La sintaxis requerida para una URL RTSP es:

rtsp://hostname[:port]/path

Las opciones pueden establecerse en la línea de comandos de ffmpeg/ffplay, o en el código mediante AVOptions o en avformat_open_input.

3.33.1 Muxer

Se admiten las siguientes opciones.

rtsp_transport

Establece los protocolos de transporte de RTSP.

Acepta los siguientes valores:

‘udp’

Usa UDP como protocolo de transporte de nivel inferior.

‘tcp’

Usa TCP (con intercalado dentro del canal de control de RTSP) como protocolo de transporte de nivel inferior.

El valor predeterminado es ‘0’.

rtsp_flags

Establece flags de RTSP.

Se aceptan los siguientes valores:

‘latm’

Usa el empaquetado MP4A-LATM en lugar de MPEG4-GENERIC para AAC.

‘rfc2190’

Usa el empaquetado RFC 2190 en lugar de RFC 4629 para H.263.

‘skip_rtcp’

No envía informes de emisor (sender reports) de RTCP.

‘h264_mode0’

Usa el modo 0 para H.264 en RTP.

‘send_bye’

Envía paquetes RTCP BYE al finalizar.

El valor predeterminado es ‘0’.

min_port

Establece el puerto UDP local mínimo. El valor predeterminado es 5000.

max_port

Establece el puerto UDP local máximo. El valor predeterminado es 65000.

buffer_size

Establece el tamaño máximo del búfer del socket, en bytes.

pkt_size

Establece el tamaño máximo de paquete de envío (en bytes). El valor predeterminado es 1472.

3.33.2 Demuxer

Se admiten las siguientes opciones.

initial_pause

Si se establece en 1, no comienza a reproducir el flujo inmediatamente. El valor predeterminado es 0.

rtsp_transport

Establece los protocolos de transporte de RTSP.

Acepta los siguientes valores:

‘udp’

Usa UDP como protocolo de transporte de nivel inferior.

‘tcp’

Usa TCP (con intercalado dentro del canal de control de RTSP) como protocolo de transporte de nivel inferior.

‘udp_multicast’

Usa multidifusión UDP como protocolo de transporte de nivel inferior.

‘http’

Usa tunelización HTTP como protocolo de transporte de nivel inferior, útil para atravesar proxies.

‘https’

Usa tunelización HTTPS como protocolo de transporte de nivel inferior, útil para atravesar proxies y ampliamente usado por motivos de seguridad.

Pueden especificarse varios protocolos de transporte de nivel inferior; en ese caso se prueban uno por uno (si la configuración de uno falla, se prueba el siguiente). Para el muxer solo se admiten las opciones ‘tcp’ y ‘udp’.

rtsp_flags

Establece flags de RTSP.

Se aceptan los siguientes valores:

‘filter_src’

Acepta paquetes solo desde la dirección y el puerto del par negociados.

‘listen’

Actúa como servidor, escuchando una conexión entrante.

‘prefer_tcp’

Prueba primero TCP para el transporte RTP, si TCP está disponible como transporte RTP de RTSP.

‘satip_raw’

Exporta el flujo MPEG-TS en bruto en lugar de desmultiplexarlo. Este flag simplemente escribe el flujo en bruto, manteniendo intactos los PAT/PMT/PID originales.

El valor predeterminado es ‘none’.

allowed_media_types

Establece los tipos de medios que se aceptan del servidor.

Se aceptan los siguientes flags:

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

De forma predeterminada se aceptan todos los tipos de medios.

min_port

Establece el puerto UDP local mínimo. El valor predeterminado es 5000.

max_port

Establece el puerto UDP local máximo. El valor predeterminado es 65000.

listen_timeout

Establece el tiempo de espera máximo (en segundos) para establecer una conexión inicial. Establecer listen_timeout > 0 fija rtsp_flags en ‘listen’. El valor predeterminado es -1, lo que significa un tiempo de espera infinito cuando se establece el modo ‘listen’.

reorder_queue_size

Establece el número de paquetes que se almacenan en búfer para gestionar los paquetes reordenados.

timeout

Establece el tiempo de espera de E/S TCP del socket, en microsegundos.

user_agent

Sobrescribe la cabecera User-Agent. Si no se especifica, se usa de forma predeterminada la cadena identificadora de libavformat.

buffer_size

Establece el tamaño máximo del búfer del socket, en bytes.

Al recibir datos por UDP, el demuxer intenta reordenar los paquetes recibidos (ya que pueden llegar desordenados o perderse por completo). Esto puede desactivarse estableciendo el retardo máximo de desmultiplexado en cero (mediante el campo max_delay de AVFormatContext).

Al ver flujos Real-RTSP de múltiples tasas de bits con ffplay, los flujos que se muestran pueden elegirse con -vst n y -ast n para vídeo y audio respectivamente, y pueden cambiarse sobre la marcha pulsando v y a.

3.33.3 Ejemplos

Todos los siguientes ejemplos hacen uso de las herramientas ffplay y ffmpeg.

  • Ver un flujo por UDP, con un retardo máximo de reordenación de 0,5 segundos:

    ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
    
  • Ver un flujo tunelizado por HTTP:

    ffplay -rtsp_transport http rtsp://server/video.mp4
    
  • Enviar un flujo en tiempo real a un servidor RTSP, para que otros lo vean:

    ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • Recibir un flujo en tiempo real:

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

3.34 sap

Session Announcement Protocol (RFC 2974). Esto no es técnicamente un manejador de protocolo en libavformat, sino un muxer y un demuxer. Se usa para la señalización de flujos RTP, anunciando periódicamente el SDP de los flujos en un puerto independiente.

3.34.1 Muxer

La sintaxis de una URL SAP proporcionada al muxer es:

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

Los paquetes RTP se envían a destination por el puerto port, o al puerto 5004 si no se especifica ninguno. options es una lista separada por &. Se admiten las siguientes opciones:

announce_addr=address

Especifica la dirección IP de destino a la que se envían los anuncios. Si se omite, los anuncios se envían a la dirección de multidifusión de anuncios SAP habitual 224.2.127.254 (sap.mcast.net), o a ff0e::2:7ffe si destination es una dirección IPv6.

announce_port=port

Especifica el puerto por el que se envían los anuncios; de forma predeterminada es 9875 si no se especifica.

ttl=ttl

Especifica el valor de tiempo de vida (TTL) para los anuncios y los paquetes RTP; de forma predeterminada es 255.

same_port=0|1

Si se establece en 1, envía todos los flujos RTP por el mismo par de puertos. Si es cero (el valor predeterminado), cada flujo se envía por un puerto único, siendo el puerto de cada flujo 2 números mayor que el del anterior. VLC/Live555 requiere que esto se establezca en 1 para poder recibir el flujo. La pila RTP de libavformat para la recepción requiere que todos los flujos se envíen por puertos únicos.

A continuación se muestran ejemplos de líneas de comandos.

Para difundir un flujo en la subred local, para verlo en VLC:

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

De forma similar, para verlo en ffplay:

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

Y para verlo en ffplay, sobre IPv6:

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

3.34.2 Demuxer

La sintaxis de una URL SAP proporcionada al demuxer es:

sap://[address][:port]

address es la dirección de multidifusión en la que se escuchan los anuncios; si se omite, se usa de forma predeterminada 224.2.127.254 (sap.mcast.net). port es el puerto en el que se escucha, 9875 si se omite.

El demuxer escucha los anuncios en la dirección y el puerto dados. Una vez recibido un anuncio, intenta recibir ese flujo en particular.

A continuación se muestran ejemplos de líneas de comandos.

Para reproducir el primer flujo anunciado en la dirección de multidifusión SAP habitual:

ffplay sap://

Para reproducir el primer flujo anunciado en una de las direcciones de multidifusión SAP IPv6 predeterminadas:

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

3.35 sctp

Stream Control Transmission Protocol.

La sintaxis de URL aceptada es:

sctp://host:port[?options]

options contiene una lista de opciones separadas por & con la forma key=val. Para escapar claves y valores puede usarse la codificación porcentual estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de la línea de comandos (o en el código mediante AVOptions).

A continuación se muestra la lista de opciones admitidas.

listen

Si se establece en cualquier valor, escucha una conexión entrante. De forma predeterminada se realiza una conexión saliente.

max_streams

Establece el número máximo de flujos. De forma predeterminada no se establece ningún límite.

3.36 shared

Envoltorio de caché seguro para hilos, persistente y entre procesos, para flujos de entrada. Almacena en caché el flujo de entrada en un archivo dentro del directorio especificado. Es similar a cache, pero con una caché persistente en disco que puede compartirse entre varios procesos o demuxers, incluso de forma concurrente.

El nombre del archivo de caché se obtiene aplicando un hash a la URL de entrada, por lo que existe cierto riesgo de colisión si se usa la misma URL para contenido diferente (por ejemplo, como resultado de usar datos POST adicionales para seleccionar el ID de flujo). Para evitarlo, use este protocolo únicamente con URLs que identifiquen el contenido de forma unívoca; de lo contrario podría obtener una mezcla confusa de fuentes.

Las opciones aceptadas son:

cache_dir

Ruta al directorio donde se almacenan los archivos de caché. Esta opción es obligatoria.

block_shift

Factor de desplazamiento (log2) del tamaño de bloque usado internamente para las lecturas/escrituras. De forma predeterminada es 15, es decir, bloques de 32KB. Si no coincide con el valor especificado al crear un archivo de caché existente, se usará en su lugar el valor especificado previamente.

read_only

Si es true, usa la caché compartida para las lecturas pero no escribe en ella ningún bloque nuevo. De forma predeterminada es false. Tenga en cuenta que, incluso con esta opción habilitada, el archivo de caché se inicializará si aún no existe.

cache_verify

Si es true, verifica los datos leídos de la caché contra el flujo de entrada subyacente e informa de cualquier discrepancia. Tenga en cuenta que esto hace que la capa de caché resulte prácticamente inútil. Es una opción puramente de depuración.

cache_timeout

Si se establece en un valor distinto de cero, especifica el tiempo máximo (en microsegundos) que se espera a que los datos estén disponibles, cuando otro proceso está intentando obtener y cachear el mismo bloque al mismo tiempo. Si transcurre este tiempo de espera, se asume que el otro proceso puede haberse quedado bloqueado o haber finalizado mientras tanto.

Si se establece en cero, no se espera y todos los procesos compiten de inmediato por obtener ellos mismos los mismos bloques faltantes. El valor predeterminado es 10000 (10 ms).

retry_errors

Si es true (el valor predeterminado), los errores de lectura transitorios del flujo de entrada subyacente se ignoran y se reintentan. Si es false, los bloques que previamente fallaron al leerse se tratarán como inaccesibles de forma permanente.

La sintaxis de URL es

shared:URL

3.37 srt

Haivision Secure Reliable Transport Protocol a través de libsrt.

La sintaxis admitida para una URL SRT es:

srt://hostname:port[?options]

options contiene una lista de opciones separadas por & con la forma key=val. Para escapar claves y valores puede usarse la codificación porcentual estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de la línea de comandos (o en el código mediante AVOptions).

A continuación se muestra la lista de opciones admitidas.

connect_timeout=milliseconds

Tiempo de espera de conexión; SRT no puede conectar con un RTT > 1500 ms (2 intercambios de negociación) usando el tiempo de espera de conexión predeterminado de 3 segundos. Esta opción se aplica a los modos de conexión caller y rendezvous. El tiempo de espera de conexión es 10 veces el valor establecido para el modo rendezvous (lo que puede usarse como solución alternativa a este problema de conexión en versiones anteriores).

ffs=bytes

Flight Flag Size (tamaño de ventana), en bytes. FFS es en realidad un parámetro interno y debería establecerse en un valor no menor que recv_buffer_size y mss. El valor predeterminado es relativamente grande, por lo que, salvo que establezca un búfer de recepción muy grande, no es necesario cambiar esta opción. El valor predeterminado es 25600.

inputbw=bytes/seconds

Tasa de entrada nominal del emisor, en bytes por segundo. Se usa junto con oheadbw, cuando maxbw se establece en relativo (0), para calcular la tasa máxima de envío cuando se envían paquetes de recuperación junto con el flujo multimedia principal: inputbw * (100 + oheadbw) / 100. Si no se establece inputbw mientras maxbw está en relativo (0), la tasa de entrada real se evalúa dentro de la biblioteca. El valor predeterminado es 0.

iptos=tos

IP Type of Service. Se aplica solo al emisor. El valor predeterminado es 0xB8.

ipttl=ttl

IP Time To Live. Se aplica solo al emisor. El valor predeterminado es 64.

latency=microseconds

Retardo de entrega de paquetes basado en marca de tiempo. Se usa para absorber ráfagas de retransmisiones de paquetes perdidos. Este flag establece tanto rcvlatency como peerlatency en el mismo valor. Tenga en cuenta que antes de la versión 1.3.0 este era el único flag para establecer la latencia; sin embargo, esto equivale en la práctica a establecer peerlatency cuando el lado es el emisor y rcvlatency cuando el lado es el receptor, y no se admite el envío bidireccional de flujos.

listen_timeout=microseconds

Establece el tiempo de espera de escucha del socket.

maxbw=bytes/seconds

Ancho de banda máximo de envío, en bytes por segundo. -1 infinito (el límite de CSRTCC es 30mbps); 0 relativo a la tasa de entrada (véase inputbw); >0 valor de límite absoluto. El valor predeterminado es 0 (relativo)

mode=caller|listener|rendezvous

Modo de conexión. caller abre una conexión de cliente. listener inicia un servidor que escucha conexiones entrantes. rendezvous usa el modo de conexión Rendez-Vous. El valor predeterminado es caller.

mss=bytes

Maximum Segment Size, en bytes. Se usa para la asignación de búfer y el cálculo de la tasa mediante un contador de paquetes que asume paquetes completamente llenos. Se usa el MSS más pequeño entre los pares. En Internet en general es 1500 de forma predeterminada. Es el tamaño máximo del paquete UDP y solo puede reducirse, salvo que disponga de una configuración de red dedicada poco habitual. El valor predeterminado es 1500.

nakreport=1|0

Si se establece en 1, el receptor enviará periódicamente mensajes ‘UMSG_LOSSREPORT‘ hasta que un paquete perdido sea retransmitido o descartado intencionadamente. El valor predeterminado es 1.

oheadbw=percents

Sobrecarga de ancho de banda de recuperación por encima de la tasa de entrada, en porcentaje. Véase inputbw. El valor predeterminado es 25%.

passphrase=string

Cadena de frase de contraseña de cifrado/descifrado de HaiCrypt, con una longitud de 10 a 79 caracteres. La frase de contraseña es el secreto compartido entre el emisor y el receptor. Se usa para generar la Key Encrypting Key mediante PBKDF2 (Password-Based Key Derivation Function). Solo se usa si pbkeylen no es cero. En el receptor solo se usa si los datos recibidos están cifrados. La frase de contraseña configurada no puede recuperarse (solo escritura).

enforced_encryption=1|0

Si es true, ambas partes de la conexión deben tener establecida la misma contraseña (incluido el caso vacío, es decir, sin cifrado). Si la contraseña no coincide o solo un lado está sin cifrar, la conexión se rechaza. El valor predeterminado es true.

kmrefreshrate=packets

El número de paquetes que se transmiten antes de cambiar la clave de cifrado por una nueva. El valor predeterminado es -1. -1 significa auto (0x1000000 en la biblioteca srt). El rango de esta opción son números enteros entre 0 y INT_MAX.

kmpreannounce=packets

El intervalo entre el momento en que se envía una nueva clave de cifrado y el momento en que ocurre el cambio. Este valor también se aplica al intervalo posterior entre el momento del cambio y el momento en que la clave de cifrado antigua se retira. El valor predeterminado es -1. -1 significa auto (0x1000 en la biblioteca srt). El rango de esta opción son números enteros entre 0 y INT_MAX.

snddropdelay=microseconds

El retardo adicional del emisor antes de descartar paquetes. Este retardo se añade al valor del intervalo de tiempo de descarte predeterminado.

Valor especial -1: no descartar paquetes en el emisor en absoluto.

payload_size=bytes

Establece el tamaño máximo declarado de un paquete transferido durante la llamada única a la función de envío en modo Live. Use 0 si este valor no se utiliza (lo cual es el valor predeterminado en modo file). El valor predeterminado es -1 (automático), lo que normalmente significa MPEG-TS; si va a usar SRT para enviar algún otro tipo de carga útil, como por ejemplo empaquetar un flujo en vivo en tramas muy pequeñas, puede usar un tamaño máximo de trama mayor, aunque no superior a 1456 bytes.

pkt_size=bytes

Alias de ‘payload_size’.

peerlatency=microseconds

El valor de latencia (según se describe en rcvlatency) que establece el lado emisor como valor mínimo para el receptor.

pbkeylen=bytes

Longitud de la clave de cifrado del emisor, en bytes. Solo puede establecerse en 0, 16, 24 o 32. Habilita el cifrado del emisor si no es 0. No es necesaria en el receptor (se establece en 0); el tamaño de la clave se obtiene del emisor en la negociación de HaiCrypt. El valor predeterminado es 0.

rcvlatency=microseconds

El tiempo que debe transcurrir entre el momento en que se envió el paquete y el momento en que se entrega a la aplicación receptora en la función de recepción. Este tiempo debe ser un margen suficientemente amplio para cubrir el tiempo empleado en el envío, un RTT inesperadamente prolongado y el tiempo necesario para retransmitir el paquete UDP perdido. El valor de latencia efectivo será el máximo entre el valor de esta opción y el valor de peerlatency establecido por el lado par. Antes de la versión 1.3.0 esta opción solo está disponible como latency.

recv_buffer_size=bytes

Establece el tamaño del búfer de recepción UDP, expresado en bytes.

send_buffer_size=bytes

Establece el tamaño del búfer de envío UDP, expresado en bytes.

timeout=microseconds

Establece los tiempos de espera para generar error en las operaciones de lectura, escritura y conexión. Tenga en cuenta que la biblioteca SRT tiene tiempos de espera internos que pueden controlarse por separado; el valor establecido aquí es solo un tope para ellos.

tlpktdrop=1|0

Too-late Packet Drop. Cuando se habilita en el receptor, omite los paquetes faltantes que no se han entregado a tiempo y entrega los paquetes siguientes a la aplicación cuando llega su momento de reproducción. También envía un ACK falso al emisor. Cuando se habilita en el emisor y en el par receptor, el emisor descarta los paquetes más antiguos que no tienen posibilidad de entregarse a tiempo. Se habilitaba automáticamente en el emisor si el receptor lo admite.

sndbuf=bytes

Establece el tamaño del búfer de envío, expresado en bytes.

rcvbuf=bytes

Establece el tamaño del búfer de recepción, expresado en bytes.

El búfer de recepción no debe ser mayor que ffs.

lossmaxttl=packets

El valor hasta el cual puede crecer la Reorder Tolerance. Cuando Reorder Tolerance es > 0, el informe de pérdida de paquetes se retrasa hasta que llega ese número de paquetes. La Reorder Tolerance aumenta cada vez que llega un paquete "retrasado" que no se debe a una retransmisión (es decir, cuando los paquetes UDP tienden a llegar desordenados), en función de la diferencia entre la secuencia más reciente y la secuencia de ese paquete, sin superar el valor de esta opción. De forma predeterminada es 0, lo que significa que este mecanismo está desactivado y el informe de pérdida se envía siempre de inmediato al detectarse un "hueco" en las secuencias.

minversion

La versión mínima de SRT que se requiere del par. Se rechazará la conexión a un par que no satisfaga el requisito de versión mínima.

El formato de versión en hexadecimal es 0xXXYYZZ para x.y.z en forma legible por humanos.

streamid=string

Una cadena limitada a 512 caracteres que puede establecerse en el socket antes de conectar. Este ID de flujo podrá recuperarse desde el lado listener a partir del socket devuelto por srt_accept y que fue conectado por un socket con ese ID de flujo establecido. SRT no impone ninguna interpretación especial del contenido de esta cadena. Esta opción no tiene sentido en una conexión Rendezvous; el resultado podría ser que simplemente un lado sobrescriba el valor del otro, y sería cuestión de suerte cuál prevalece

srt_streamid=string

Alias de ‘streamid’ para evitar conflictos con la opción de línea de comandos de ffmpeg.

smoother=live|file

El tipo de Smoother usado para la transmisión de ese socket, responsable del control de transmisión y congestión. El tipo de Smoother debe ser exactamente el mismo en ambas partes que se conectan; de lo contrario, la conexión se rechaza.

messageapi=1|0

Cuando se establece, este socket usa la Message API; de lo contrario usa la Buffer API. Tenga en cuenta que en modo live (véase transtype) solo está disponible la Message API. En modo File puede elegir usar uno de estos dos modos:

Stream API (predeterminado, cuando esta opción es false). En este modo puede enviar tantos datos como desee con una sola instrucción de envío, o incluso usar funciones dedicadas que leen directamente de un archivo. El mecanismo interno se encarga del control de velocidad y congestión. Al recibir, también puede recibir tantos datos como desee; los datos no extraídos quedarán a la espera de la siguiente llamada. En el modo Stream no hay límite entre porciones de datos.

Message API. En este modo, una única instrucción de envío transmite exactamente una porción de datos con límites definidos (un mensaje). A diferencia del modo Live, este mensaje puede abarcar varios paquetes UDP, y la única limitación de tamaño es que debe caber en su totalidad en el búfer de envío. El receptor debe usar un búfer tan grande como sea necesario para recibir el mensaje; de lo contrario, el mensaje no se entregará. Cuando el mensaje no está completo (no se han recibido todos los paquetes o hubo pérdida de paquetes), no se entregará.

transtype=live|file

Establece el tipo de transmisión del socket; en particular, al establecer esta opción se fijan varios otros parámetros en sus valores predeterminados según lo requiera un tipo de transmisión concreto.

live: establece las opciones para transmisión en vivo. En este modo, cada instrucción de envío debería enviar solo los datos que caben en un paquete UDP, limitados al valor definido primero en payload_size (1316 es el valor predeterminado en este modo). En este modo no hay control de velocidad, solo control de ancho de banda, si está configurado, para no superar el ancho de banda con la transmisión adicional (paquetes retransmitidos y de control).

file: establece las opciones para transmisión no en vivo. Véase messageapi para más explicaciones

linger=seconds

El número de segundos que el socket espera por datos no enviados al cerrarse. El valor predeterminado es -1. -1 significa auto (desactivado con 0 segundos en modo live, activado con 180 segundos en modo file). El rango de esta opción son números enteros entre 0 y INT_MAX.

tsbpd=1|0

Cuando es true, usa el modo Timestamp-based Packet Delivery. El comportamiento predeterminado depende del tipo de transmisión: habilitado en modo live, deshabilitado en modo file.

ipv6only=1|0

Acepta o no IPv4 mientras se usa la dirección comodín IPv6. Esto debería establecerse al escuchar en una dirección comodín IPv6.

Para más información, consulte: https://github.com/Haivision/srt.

3.38 srtp

Secure Real-time Transport Protocol.

Las opciones aceptadas son:

srtp_in_suite srtp_out_suite

Selecciona las suites de codificación de entrada y salida.

Valores admitidos:

‘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

Establece los parámetros de codificación de entrada y salida, expresados mediante una representación en base64 de un bloque binario. Los primeros 16 bytes de este bloque binario se usan como master key, y los 14 bytes siguientes se usan como master salt.

3.39 subfile

Extrae virtualmente un segmento de un archivo u otro flujo. El flujo subyacente debe admitir desplazamiento (seek).

Opciones aceptadas:

start

Desplazamiento inicial del segmento extraído, en bytes.

end

Desplazamiento final del segmento extraído, en bytes. Si se establece en 0, extrae hasta el final del archivo.

Ejemplos:

Extraer un capítulo de un archivo VOB de DVD (sectores de inicio y fin obtenidos externamente y multiplicados por 2048):

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

Reproducir un archivo AVI directamente desde un archivo TAR:

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

Reproducir un archivo MPEG-TS desde el desplazamiento inicial hasta el final:

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

3.40 tee

Escribe la salida en múltiples protocolos. Las salidas individuales se separan con |

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

3.41 tcp

Transmission Control Protocol.

La sintaxis requerida para una URL TCP es:

tcp://hostname:port[?options]

options contiene una lista de opciones separadas por & con la forma key=val. Para escapar claves y valores puede usarse la codificación porcentual estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de la línea de comandos (o en el código mediante AVOptions).

A continuación se muestra la lista de opciones admitidas.

listen=2|1|0

Escucha una conexión entrante. 0 desactiva listen, 1 activa listen en modo de cliente único, 2 activa listen en modo multicliente. El valor predeterminado es 0.

local_addr=addr

Dirección IP local de una interfaz de red usada para la conexión del socket tcp.

local_port=port

Puerto local usado para la conexión del socket tcp.

timeout=microseconds

Establece el tiempo de espera para generar error, expresado en microsegundos.

Esta opción solo es relevante en modo lectura: si no llegan datos durante más de este intervalo de tiempo, genera un error.

listen_timeout=milliseconds

Establece el tiempo de espera de listen, expresado en milisegundos.

recv_buffer_size=bytes

Establece el tamaño del búfer de recepción, expresado en bytes.

send_buffer_size=bytes

Establece el tamaño del búfer de envío, expresado en bytes.

tcp_nodelay=1|0

Establece TCP_NODELAY para desactivar el algoritmo de Nagle. El valor predeterminado es 0.

Nota: actualmente, la escritura en el socket no está optimizada para minimizar las llamadas al sistema, lo que reduce la eficiencia o el efecto de TCP_NODELAY.

tcp_mss=bytes

Establece el tamaño máximo de segmento para los paquetes TCP salientes, expresado en bytes.

El siguiente ejemplo muestra cómo configurar una conexión TCP en escucha con ffmpeg, a la que luego se accede con 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)

La sintaxis necesaria para una URL de TLS/SSL es:

tls://hostname:port[?options]

options contiene una lista de opciones separadas por &, con la forma clave=valor. Para escapar claves y valores puede usarse la codificación de porcentaje estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de línea de comandos (o en el código, mediante AVOptions).

A continuación, la lista de opciones admitidas.

ca_file, cafile=filename

Un archivo con certificados raíz de autoridades de certificación (CA) que se tratarán como de confianza. Si la biblioteca TLS enlazada incluye un valor predeterminado, puede que no sea necesario especificar esta opción para que la verificación funcione, pero no todas las bibliotecas ni configuraciones traen valores predeterminados incorporados. El archivo debe estar en formato OpenSSL PEM.

tls_verify, verify=1|0

Si se habilita, se intenta verificar el extremo remoto con el que se está comunicando. Tenga en cuenta que, al usar OpenSSL, esto actualmente solo comprueba que el certificado del extremo remoto esté firmado por uno de los certificados raíz de la base de datos de CA, pero no valida que el certificado coincida realmente con el nombre de host al que se intenta conectar. (Con otros backends, el nombre de host también se valida.)

Esto está habilitado de forma predeterminada. Verificar el extremo remoto requiere una base de datos de CA, que en algunos casos debe proporcionar quien realiza la llamada.

cert_file, cert=filename

Un archivo con un certificado para usar en el saludo (handshake) con el extremo remoto. (Al operar como servidor, en modo listen, el extremo remoto suele exigirlo con más frecuencia, mientras que los certificados de cliente solo son obligatorios en determinadas configuraciones.)

key_file, key=filename

Un archivo con la clave privada del certificado.

listen=1|0

Si se habilita, se escuchan conexiones en el puerto indicado y se asume el rol de servidor en el saludo, en lugar del rol de cliente.

http_proxy

El proxy HTTP a través del cual tunelizar, p. ej. http://example.com:1234. El proxy debe admitir el método CONNECT.

Ejemplos de líneas de comandos:

Para crear un servidor TLS/SSL que sirva un flujo de entrada.

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

Para reproducir un flujo desde el servidor TLS/SSL usando ffplay:

ffplay tls://hostname:port

3.43 dtls

Datagram Transport Layer Security (DTLS)

La sintaxis necesaria para una URL DTLS es:

dtls://hostname:port[?options]

options contiene una lista de opciones separadas por &, con la forma clave=valor. Para escapar claves y valores puede usarse la codificación de porcentaje estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de línea de comandos (o en el código, mediante AVOptions).

DTLS comparte la mayoría de las opciones con TLS, pero opera sobre UDP en lugar de TCP.

A continuación, la lista de opciones admitidas.

ca_file, cafile=filename

Un archivo con certificados raíz de autoridades de certificación (CA) que se tratarán como de confianza. Si la biblioteca TLS enlazada incluye un valor predeterminado, puede que no sea necesario especificar esta opción para que la verificación funcione, pero no todas las bibliotecas ni configuraciones traen valores predeterminados incorporados. El archivo debe estar en formato OpenSSL PEM.

tls_verify, verify=1|0

Si se habilita, se intenta verificar el extremo remoto con el que se está comunicando. Tenga en cuenta que, al usar OpenSSL, esto actualmente solo comprueba que el certificado del extremo remoto esté firmado por uno de los certificados raíz de la base de datos de CA, pero no valida que el certificado coincida realmente con el nombre de host al que se intenta conectar.

Esto está habilitado de forma predeterminada. Verificar el extremo remoto requiere una base de datos de CA, que en algunos casos debe proporcionar quien realiza la llamada.

cert_file, cert=filename

Un archivo con un certificado para usar en el saludo (handshake) con el extremo remoto. (Al operar como servidor, en modo listen, el extremo remoto suele exigirlo con más frecuencia, mientras que los certificados de cliente solo son obligatorios en determinadas configuraciones.)

key_file, key=filename

Un archivo con la clave privada del certificado.

cert_pem=string

Cadena PEM del certificado

key_pem=string

Cadena PEM de la clave privada

listen=1|0

Si se habilita, se escuchan conexiones en el puerto indicado y se asume el rol de servidor en el saludo, en lugar del rol de cliente.

mtu=size

Establece la Unidad Máxima de Transmisión (MTU) para los paquetes DTLS.

use_srtp=1|0

Habilita la extensión DTLS use_srtp. Se usa en aplicaciones WebRTC para establecer claves de cifrado SRTP a través del saludo DTLS. Está deshabilitada de forma predeterminada.

external_sock=1|0

Usa un socket externo en lugar de crear uno nuevo. Esta opción solo tiene sentido al interactuar con el código mediante la API; habilitarla desde la CLI provocará un fallo inmediato. Está deshabilitada de forma predeterminada.

Ejemplos de líneas de comandos:

Para crear un servidor DTLS:

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

Para crear un cliente DTLS y enviar datos al servidor:

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

3.44 udp

User Datagram Protocol.

La sintaxis necesaria para una URL UDP es:

udp://hostname:port[?options]

options contiene una lista de opciones separadas por &, con la forma clave=valor. Para escapar claves y valores puede usarse la codificación de porcentaje estándar (y el signo más para representar el espacio).

Las opciones también pueden especificarse mediante opciones de línea de comandos (o en el código, mediante AVOptions).

Si el uso de hilos está habilitado en el sistema, se emplea un búfer circular para almacenar los datos entrantes, lo que permite reducir la pérdida de datos por desbordamientos del búfer del socket UDP. Las opciones fifo_size y overrun_nonfatal están relacionadas con este búfer.

A continuación, la lista de opciones admitidas.

buffer_size=size

Establece el tamaño máximo del búfer del socket UDP en bytes. Se usa para fijar el tamaño del búfer de recepción o de envío, según el uso que se le dé al socket. El valor predeterminado es 32 KB para la salida y 384 KB para la entrada. Véase también fifo_size.

bitrate=bitrate

Si se establece en un valor distinto de cero, la salida tendrá la tasa de bits constante especificada, siempre que la entrada tenga paquetes suficientes para sostenerla.

burst_bits=bits

Al usar bitrate, esto especifica el número máximo de bits en las ráfagas de paquetes.

localport=port

Sobrescribe el puerto UDP local con el que se enlaza.

localaddr=addr

Dirección IP local de una interfaz de red usada para enviar paquetes o unirse a grupos multicast.

pkt_size=size

Establece el tamaño en bytes de los paquetes UDP.

reuse=1|0

Permite o prohíbe explícitamente la reutilización de sockets UDP.

ttl=ttl

Establece el valor de tiempo de vida (time to live), solo para multicast.

dscp=dscp

Establece el campo DSCP de 6 bits para los paquetes salientes.

connect=1|0

Inicializa el socket UDP con connect(). En este caso, la dirección de destino no podrá cambiarse después con ff_udp_set_remote_url. Si la dirección de destino no se conoce al inicio, esta opción también puede especificarse en ff_udp_set_remote_url. Esto permite averiguar la dirección de origen de los paquetes con getsockname, y hace que las escrituras devuelvan AVERROR(ECONNREFUSED) si se recibe "destination unreachable". Al recibir, esto aporta la ventaja de recibir únicamente paquetes de la dirección/puerto del extremo remoto especificado.

sources=address[,address]

Recibe únicamente los paquetes enviados desde las direcciones especificadas. En el caso de multicast, también se suscribe solo al tráfico multicast procedente de esas direcciones.

block=address[,address]

Ignora los paquetes enviados desde las direcciones especificadas. En el caso de multicast, también excluye esas direcciones de origen en la suscripción multicast.

fifo_size=units

Establece el tamaño del búfer circular de recepción UDP, expresado como un número de paquetes de 188 bytes. Si no se especifica, el valor predeterminado es 7*4096.

overrun_nonfatal=1|0

Sobrevive en caso de desbordamiento del búfer circular de recepción UDP. El valor predeterminado es 0.

timeout=microseconds

Establece el tiempo de espera para generar un error, expresado en microsegundos.

Esta opción solo es relevante en modo lectura: si no llegan datos durante un intervalo mayor que este, se genera un error.

broadcast=1|0

Permite o prohíbe explícitamente la difusión (broadcast) UDP.

Tenga en cuenta que la difusión puede no funcionar correctamente en redes con protección contra tormentas de difusión (broadcast storm).

3.44.1 Ejemplos

  • Usar ffmpeg para transmitir por UDP hacia un extremo remoto:

    ffmpeg -i input -f format udp://hostname:port
    
  • Usar ffmpeg para transmitir en formato mpegts por UDP con paquetes UDP de 188 bytes, empleando un búfer de entrada grande:

    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    
  • Usar ffmpeg para recibir por UDP desde un extremo remoto:

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

3.45 unix

Socket local de Unix

La sintaxis necesaria para una URL de socket Unix es:

unix://filepath

Los siguientes parámetros pueden establecerse mediante opciones de línea de comandos (o en el código, mediante AVOptions):

timeout

Tiempo de espera en ms.

listen

Crea el socket Unix en modo de escucha.

type

Selecciona el tipo de socket.

‘stream Corresponde a SOCK_STREAM (orientado a flujo, fiable)’ ‘datagram Corresponde a SOCK_DGRAM (orientado a paquetes, no fiable)’ ‘seqpacket Corresponde a SOCK_SEQPACKET (orientado a paquetes, fiable)’ pkt_size

Tamaño máximo de paquete para sockets orientados a paquetes (SOCK_DGRAM y SOCK_SEQPACKET). Si es mayor que cero, este valor se usa como max_packet_size. Se ignora para SOCK_STREAM. El valor predeterminado es 0.

3.46 zmq

Mensajería asíncrona ZeroMQ mediante la biblioteca libzmq.

Esta biblioteca admite la transmisión unicast a varios clientes sin depender de un servidor externo.

La sintaxis necesaria para transmitir o conectarse a un flujo es:

zmq:tcp://ip-address:port

Ejemplo: crear un flujo en localhost por el puerto 5555:

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

Varios clientes pueden conectarse al flujo usando:

ffplay zmq:tcp://127.0.0.1:5555

La transmisión a varios clientes se implementa mediante un patrón ZeroMQ Pub-Sub. El lado del servidor se enlaza a un puerto y publica datos. Los clientes se conectan al servidor (mediante dirección IP/puerto) y se suscriben al flujo. Por lo general, el orden en que se inician el servidor y el cliente no importa.

Para admitir este protocolo, ffmpeg debe compilarse con la opción –enable-libzmq.

Las opciones pueden establecerse en la línea de comandos de ffmpeg/ffplay. Se admiten las siguientes opciones:

pkt_size

Fuerza el tamaño máximo de paquete para el envío/recepción de datos. El valor predeterminado es 131.072 bytes. En el lado del servidor, establece el tamaño máximo de los paquetes enviados mediante ZeroMQ. En los clientes, establece el tamaño del búfer interno para la recepción de paquetes. Tenga en cuenta que el pkt_size de los clientes debe ser igual o mayor que el pkt_size del servidor; de lo contrario, el mensaje recibido puede truncarse y provocar errores de decodificación.

4 Véase también

ffmpeg, ffplay, ffprobe, libavformat

5 Autores

Los desarrolladores de FFmpeg.

Para más detalles sobre la autoría, consulte el historial de Git del proyecto (https://git.ffmpeg.org/ffmpeg), por ejemplo escribiendo el comando git log en el directorio de fuentes de FFmpeg, o navegando por el repositorio en línea en https://git.ffmpeg.org/ffmpeg.

Los responsables de mantenimiento de cada componente específico figuran en el archivo MAINTAINERS del árbol de código fuente.

Alojamiento proporcionado por telepoint.bg