⚠️ Ceci est un site de traduction non officiel, sans lien avec le projet FFmpeg. Pour des informations faisant autorité, consultez la page originale (https://ffmpeg.org/ffmpeg-protocols.html).

Documentation des protocoles FFmpeg

1 Description

Ce document décrit les protocoles d'entrée et de sortie fournis par la bibliothèque libavformat.

2 Options des protocoles

La bibliothèque libavformat fournit quelques options globales génériques, qui peuvent être définies sur tous les protocoles. De plus, chaque protocole peut prendre en charge des options dites privées, propres à ce composant.

Les options peuvent être définies en indiquant -option valeur dans les outils FFmpeg, ou en définissant explicitement la valeur dans les options d'AVFormatContext, ou via l'API libavutil/opt.h pour un usage programmatique.

La liste des options prises en charge suit :

protocol_whitelist list (input)

Définit une liste de protocoles autorisés séparés par des ",". "ALL" correspond à tous les protocoles. Les protocoles préfixés par "-" sont désactivés. Par défaut, tous les protocoles sont autorisés, mais les protocoles utilisés par un autre protocole (protocoles imbriqués) sont restreints à un sous-ensemble propre à chaque protocole.

3 Protocoles

Les protocoles sont des éléments configurés dans FFmpeg qui permettent d'accéder à des ressources nécessitant des protocoles spécifiques.

Lorsque vous configurez votre build FFmpeg, tous les protocoles pris en charge sont activés par défaut. Vous pouvez lister tous ceux qui sont disponibles avec l'option de configuration "–list-protocols".

Vous pouvez désactiver tous les protocoles avec l'option de configuration "–disable-protocols", et activer sélectivement un protocole avec l'option "–enable-protocol=PROTOCOL", ou désactiver un protocole particulier avec l'option "–disable-protocol=PROTOCOL".

L'option "-protocols" des outils ff* affiche la liste des protocoles pris en charge.

Tous les protocoles acceptent les options suivantes :

rw_timeout

Temps maximal à attendre pour que les opérations de lecture/écriture (réseau) se terminent, en microsecondes.

Une description des protocoles disponibles à l'heure actuelle suit.

3.1 amqp

Advanced Message Queueing Protocol (AMQP) version 0-9-1 est un protocole de communication de type publish-subscribe basé sur un courtier.

FFmpeg doit être compilé avec –enable-librabbitmq pour prendre en charge AMQP. Un courtier AMQP distinct doit également être lancé. RabbitMQ est un exemple de courtier AMQP open source.

Après le démarrage du courtier, un client FFmpeg peut diffuser des données vers celui-ci avec la commande :

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

Où hostname et port (5672 par défaut) sont l'adresse du courtier. Le client peut également définir un utilisateur/mot de passe pour l'authentification. La valeur par défaut des deux champs est "guest". Le nom de l'hôte virtuel sur le courtier peut être défini avec vhost. La valeur par défaut est "/".

Plusieurs abonnés peuvent recevoir le flux du courtier avec la commande :

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

Dans RabbitMQ, toutes les données publiées vers le courtier transitent par un exchange spécifique, et chaque client abonné dispose d'une file/tampon qui lui est associée. Lorsqu'un paquet arrive sur un exchange, il peut être copié dans la file d'un client selon les champs exchange et routing_key.

Les options suivantes sont prises en charge :

exchange

Définit l'exchange à utiliser sur le courtier. RabbitMQ propose plusieurs exchanges prédéfinis : "amq.direct" est l'exchange par défaut, où l'éditeur et l'abonné doivent avoir une routing_key correspondante ; "amq.fanout" équivaut à une opération de diffusion (c'est-à-dire que les données sont transmises à toutes les files de l'exchange fanout indépendamment de la routing_key) ; et "amq.topic" est similaire à "amq.direct", mais permet une correspondance de motifs plus complexe (voir la documentation de RabbitMQ).

routing_key

Définit la clé de routage. La valeur par défaut est "amqp". La clé de routage est utilisée sur les exchanges "amq.direct" et "amq.topic" pour déterminer si les paquets sont écrits dans la file d'un abonné.

pkt_size

Taille maximale de chaque paquet envoyé/reçu vers le courtier. La valeur par défaut est 131072. Le minimum est 4096 et le maximum peut être n'importe quelle grande valeur (représentable par un int). Lors de la réception de paquets, cela définit une taille de tampon interne dans FFmpeg. Elle doit être supérieure ou égale à la taille des paquets publiés vers le courtier. Sinon, le message reçu peut être tronqué, provoquant des erreurs de décodage.

connection_timeout

Le délai en secondes lors de la connexion initiale au courtier. La valeur par défaut est rw_timeout, ou 5 secondes si rw_timeout n'est pas défini.

delivery_mode mode

Définit le mode de remise de chaque message envoyé au courtier. Les valeurs suivantes sont acceptées :

‘persistent’

Mode de remise défini sur "persistent" (2). C'est la valeur par défaut. Les messages peuvent être écrits sur le disque du courtier selon sa configuration.

‘non-persistent’

Mode de remise défini sur "non-persistent" (1). Les messages restent en mémoire du courtier, sauf en cas de pression mémoire sur celui-ci.

3.2 async

Enveloppe de remplissage asynchrone des données pour le flux d'entrée.

Remplit les données dans un thread en arrière-plan, afin de découpler l'opération d'E/S du thread de démultiplexage.

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

3.3 bluray

Lit une playlist BluRay.

Les options acceptées sont :

angle

Angle BluRay

chapter

Chapitre de départ (1...N)

playlist

Playlist à lire (BDMV/PLAYLIST/?????.mpls)

Exemples :

Lire la playlist la plus longue depuis un BluRay monté sur /mnt/bluray :

bluray:/mnt/bluray

Lire l'angle 2 de la playlist 4 depuis un BluRay monté sur /mnt/bluray, en démarrant au chapitre 2 :

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

3.4 cache

Enveloppe de mise en cache pour le flux d'entrée.

Met en cache le flux d'entrée dans un fichier temporaire. Cela apporte la capacité de positionnement aux flux en direct.

Les options acceptées sont :

read_ahead_limit

Quantité en octets pouvant être lue à l'avance lorsque le positionnement n'est pas pris en charge. La plage va de -1 à INT_MAX. -1 pour illimité. La valeur par défaut est 65536.

La syntaxe de l'URL est

cache:URL

3.5 concat

Protocole de concaténation physique.

Lit et se positionne dans plusieurs ressources en séquence comme s'il s'agissait d'une ressource unique.

Une URL acceptée par ce protocole a la syntaxe suivante :

concat:URL1|URL2|...|URLN

où URL1, URL2, ..., URLN sont les urls des ressources à concaténer, chacune pouvant éventuellement spécifier un protocole distinct.

Par exemple, pour lire une séquence de fichiers split1.mpeg, split2.mpeg, split3.mpeg avec ffplay, utilisez la commande :

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

Notez que vous devrez peut-être échapper le caractère "|", qui est spécial pour de nombreux shells.

3.6 concatf

Protocole de concaténation physique utilisant une liste de ressources délimitées par des sauts de ligne.

Lit et se positionne dans plusieurs ressources en séquence comme s'il s'agissait d'une ressource unique.

Une URL acceptée par ce protocole a la syntaxe suivante :

concatf:URL

où URL est l'url contenant une liste de ressources à concaténer délimitées par des sauts de ligne, chacune pouvant éventuellement spécifier un protocole distinct. Les caractères spéciaux doivent être échappés avec une barre oblique inverse ou des guillemets simples. Voir (ffmpeg-utils) la section "Quoting and escaping" du manuel ffmpeg-utils(1).

Par exemple, pour lire une séquence de fichiers split1.mpeg, split2.mpeg, split3.mpeg listés sur des lignes séparées dans un fichier split.txt avec ffplay, utilisez la commande :

ffplay concatf:split.txt

Où split.txt contient les lignes :

split1.mpeg
split2.mpeg
split3.mpeg

3.7 crypto

Protocole de lecture de flux chiffré en AES.

Les options acceptées sont :

key

Définit le bloc binaire de clé de déchiffrement AES à partir de la représentation hexadécimale donnée.

iv

Définit le bloc binaire de vecteur d'initialisation de déchiffrement AES à partir de la représentation hexadécimale donnée.

Formats d'URL acceptés :

crypto:URL
crypto+URL

3.8 data

Données incluses directement dans l'URI. Voir http://en.wikipedia.org/wiki/Data_URI_scheme.

Par exemple, pour convertir un fichier GIF fourni en ligne avec ffmpeg :

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

3.9 fd

Protocole d'accès par descripteur de fichier.

La syntaxe acceptée est :

fd: -fd file_descriptor

Si fd n'est pas spécifié, le descripteur de fichier stdout est utilisé par défaut pour l'écriture, et stdin pour la lecture. Contrairement au protocole pipe, le protocole fd prend en charge le positionnement s'il correspond à un fichier normal. Le protocole fd ne prend pas en charge le passage du descripteur de fichier via l'URL pour des raisons de sécurité.

Ce protocole accepte les options suivantes :

blocksize

Définit la taille de bloc maximale des opérations d'E/S, en octets. La valeur par défaut est INT_MAX, ce qui revient à ne pas limiter la taille de bloc demandée. Définir cette valeur à un niveau raisonnablement bas améliore le temps de réaction aux demandes d'arrêt de l'utilisateur, ce qui est utile si la transmission des données est lente.

fd

Définit le descripteur de fichier.

3.10 file

Protocole d'accès aux fichiers.

Lit ou écrit dans un fichier.

Une URL de fichier peut avoir la forme :

file:filename

où filename est le chemin du fichier à lire.

Une URL sans préfixe de protocole est supposée être une URL de fichier. Selon le build, une URL ressemblant à un chemin Windows avec la lettre de lecteur au début sera également supposée être une URL de fichier (généralement pas le cas dans les builds pour systèmes de type unix).

Par exemple, pour lire depuis un fichier input.mpeg avec ffmpeg, utilisez la commande :

ffmpeg -i file:input.mpeg output.mpeg

Ce protocole accepte les options suivantes :

truncate

Tronque les fichiers existants à l'écriture, si défini à 1. Une valeur de 0 empêche la troncature. La valeur par défaut est 1.

blocksize

Définit la taille maximale des opérations d'E/S, en octets. La valeur par défaut est INT_MAX, ce qui revient à ne pas limiter la taille de bloc demandée. Définir cette valeur à un niveau raisonnablement bas améliore le temps de réaction aux demandes d'arrêt de l'utilisateur, ce qui est utile pour les fichiers sur un support lent.

follow

Si défini à 1, le protocole retente la lecture à la fin du fichier, permettant de lire des fichiers encore en cours d'écriture. Pour que cela se termine, vous devez soit utiliser l'option rw_timeout, soit utiliser le rappel d'interruption (pour les utilisateurs de l'API). Activer cette option ignore également la taille de fichier signalée par le système de fichiers.

seekable

Contrôle si la possibilité de positionnement est annoncée sur le fichier. 0 signifie non positionnable, -1 signifie automatique (positionnable pour les fichiers normaux, non positionnable pour les tubes nommés).

De nombreux demuxers traitent différemment les ressources positionnables et non positionnables, et modifier ce réglage peut accélérer l'ouverture de certains fichiers au prix de la perte de certaines fonctionnalités (par exemple le positionnement précis).

pkt_size

Définit la taille maximale de paquet utilisée pour les E/S de fichier. Une valeur plus petite peut réduire l'utilisation mémoire. Une valeur plus élevée peut augmenter le débit, en particulier avec les systèmes de fichiers en réseau.

En lecture, si explicitement définie, elle remplace la taille de tampon interne par défaut (32 Ko) et limite la quantité maximale de données lues par opération.

En écriture, cela définit la taille de chaque opération d'écriture. La valeur par défaut est 256 Ko pour les fichiers normaux, 32 Ko sinon.

3.11 ftp

FTP (File Transfer Protocol).

Lit ou écrit des ressources distantes via le protocole FTP.

La syntaxe suivante est requise.

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

Ce protocole accepte les options suivantes.

timeout

Définit le délai en microsecondes des opérations d'E/S de socket utilisées par l'opération de bas niveau sous-jacente. Par défaut, il est défini à -1, ce qui signifie que le délai n'est pas spécifié.

ftp-user

Définit un utilisateur à utiliser pour l'authentification auprès du serveur FTP. Ceci est remplacé par l'utilisateur indiqué dans l'URL FTP.

ftp-password

Définit un mot de passe à utiliser pour l'authentification auprès du serveur FTP. Ceci est remplacé par le mot de passe indiqué dans l'URL FTP, ou par ftp-anonymous-password si aucun utilisateur n'est défini.

ftp-anonymous-password

Mot de passe utilisé lors de la connexion en tant qu'utilisateur anonyme. Une adresse e-mail doit typiquement être utilisée.

ftp-write-seekable

Contrôle la possibilité de positionnement de la connexion pendant l'encodage. Si défini à 1, la ressource est supposée positionnable, si défini à 0 elle est supposée ne pas l'être. La valeur par défaut est 0.

NOTE : le protocole peut être utilisé en sortie, mais il est recommandé de ne pas le faire, sauf précautions particulières (tests, configuration serveur personnalisée, etc.). Les différents serveurs FTP se comportent différemment lors des opérations de positionnement. Les outils ff* peuvent produire un contenu incomplet en raison des limitations du serveur.

3.12 gopher

Protocole Gopher.

3.13 gophers

Protocole Gophers.

Le protocole Gopher avec encapsulation TLS.

3.14 http

HTTP (Hyper Text Transfer Protocol).

Ce protocole accepte les options suivantes :

seekable

Contrôle la possibilité de positionnement de la connexion. Si défini à 1, la ressource est supposée positionnable, si défini à 0 elle est supposée ne pas l'être, si défini à -1 le protocole tente de le détecter automatiquement. La valeur par défaut est -1.

chunked_post

Si défini à 1, utilise le Transfer-Encoding chunked pour les envois POST ; la valeur par défaut est 1.

http_proxy

Définit le proxy HTTP à travers lequel transiter, par exemple http://example.com:1234

headers

Définit des en-têtes HTTP personnalisés, pouvant remplacer les en-têtes par défaut intégrés. La valeur doit être une chaîne encodant les en-têtes.

content_type

Définit un type de contenu spécifique pour les messages POST ou pour le mode d'écoute.

user_agent

Remplace l'en-tête User-Agent. Si non spécifié, le protocole utilise une chaîne décrivant le build de libavformat. ("Lavf/")

referer

Définit l'en-tête Referer. Inclut l'en-tête ’Referer: URL’ dans la requête HTTP.

multiple_requests

Utilise des connexions persistantes si défini à 1 ; la valeur par défaut est 0.

request_size

Limite la taille des requêtes effectuées. Ceci est utile pour certains serveurs pathologiques qui limitent les requêtes de plage non bornée, ainsi que lorsqu'un positionnement fréquent est prévu. Désactivé (défini à 0) par défaut.

Notez que si vous activez cette option, il est fortement recommandé d'activer également l'option multiple_requests, ainsi que de définir short_seek_size à la même valeur ou plus. Cela permet à FFmpeg de réutiliser une seule connexion HTTP dans la mesure du possible.

initial_request_size

Limite la taille des requêtes initiales. Similaire à request_size, mais utilisé uniquement lors de l'analyse initiale du format. Utile pour les formats comme MXF ou MOV qui nécessitent des positionnements fréquents pendant l'analyse de l'en-tête. Dure jusqu'à ce que le demuxer effectue une requête de lecture plus grande que cette taille (sans positionnement entre-temps), après quoi l'implémentation continue d'utiliser les requêtes normalement. Désactivé (défini à 0) par défaut.

Notez que si vous activez cette option, il est fortement recommandé d'activer également l'option multiple_requests, ainsi que de définir short_seek_size à la même valeur ou plus.

post_data

Définit les données POST HTTP personnalisées.

mime_type

Exporte le type MIME.

http_version

Exporte le numéro de version de la réponse HTTP. Généralement "1.0" ou "1.1".

cookies

Définit les cookies à envoyer dans les futures requêtes. Le format de chaque cookie est le même que la valeur d'un champ de réponse HTTP Set-Cookie. Plusieurs cookies peuvent être délimités par un saut de ligne.

icy

Si défini à 1, demande les métadonnées ICY (SHOUTcast) au serveur. Si le serveur les prend en charge, les métadonnées doivent être récupérées par l'application en lisant les options icy_metadata_headers et icy_metadata_packet. La valeur par défaut est 1.

icy_metadata_headers

Si le serveur prend en charge les métadonnées ICY, contient les en-têtes de réponse HTTP spécifiques à ICY, séparés par des sauts de ligne.

icy_metadata_packet

Si le serveur prend en charge les métadonnées ICY et que icy est défini à 1, contient le dernier paquet de métadonnées non vide envoyé par le serveur. Il doit être interrogé à intervalles réguliers par les applications intéressées par les mises à jour de métadonnées en cours de flux.

metadata

Définit un dictionnaire exporté contenant les métadonnées Icecast du bitstream, si présentes. Utile uniquement avec l'API C.

auth_type

Définit le type d'authentification HTTP. Aucune option pour Digest, car cette méthode nécessite d'obtenir d'abord des paramètres nonce du serveur et ne peut pas être utilisée directement comme Basic.

none

Choisit automatiquement le type d'authentification HTTP. C'est la valeur par défaut.

basic

Choisit l'authentification HTTP basique.

L'authentification basique envoie une chaîne encodée en Base64 contenant un nom d'utilisateur et un mot de passe pour le client. Base64 n'est pas une forme de chiffrement et doit être considéré comme équivalent à l'envoi du nom d'utilisateur et du mot de passe en clair (Base64 est un encodage réversible). Si une ressource doit être protégée, envisagez fortement d'utiliser un schéma d'authentification autre que l'authentification basique. HTTPS/TLS doit être utilisé avec l'authentification basique. Sans ces renforcements de sécurité supplémentaires, l'authentification basique ne doit pas être utilisée pour protéger des informations sensibles ou de valeur.

send_expect_100

Envoie un en-tête Expect: 100-continue pour POST. Si défini à 1, il sera envoyé ; si défini à 0, il ne le sera pas ; si défini à -1, l'envoi sera tenté si applicable. La valeur par défaut est -1.

location

Dictionnaire exporté contenant l'emplacement du contenu. Utile uniquement avec l'API C.

offset

Définit le décalage d'octet initial.

end_offset

Tente de limiter la requête aux octets précédant ce décalage.

method

Lorsqu'utilisé comme option client, définit la méthode HTTP de la requête.

Lorsqu'utilisé comme option serveur, définit la méthode HTTP attendue du ou des clients. Si la méthode HTTP attendue et celle reçue ne correspondent pas, le client reçoit une réponse Bad Request. Lorsque non défini, la méthode HTTP n'est pas vérifiée pour l'instant. Ceci sera remplacé par une détection automatique à l'avenir.

reconnect

Se reconnecte automatiquement en cas de déconnexion avant d'atteindre EOF.

reconnect_at_eof

Si défini, eof est traité comme une erreur et provoque une reconnexion ; utile pour les flux en direct/sans fin.

reconnect_on_network_error

Se reconnecte automatiquement en cas d'erreurs TCP/TLS lors de la connexion.

reconnect_on_http_error

Liste de codes de statut HTTP séparés par des virgules sur lesquels se reconnecter. La liste peut inclure des codes de statut spécifiques (par exemple ’503’) ou les chaînes ’4xx’ / ’5xx’.

reconnect_streamed

Si défini, même les flux en streaming/non positionnables seront reconnectés en cas d'erreur.

reconnect_delay_max

Définit le délai maximal en secondes après lequel abandonner la reconnexion.

reconnect_max_retries

Définit le nombre maximal de tentatives de reconnexion. Non défini par défaut.

reconnect_delay_total_max

Définit le délai total maximal en secondes après lequel abandonner la reconnexion.

respect_retry_after

Si activé, et qu'un en-tête Retry-After est rencontré, le délai de reconnexion demandé est respecté, plutôt que d'utiliser un backoff exponentiel. Utile pour les erreurs 429 et 503. Activé par défaut.

listen

Si défini à 1, active le serveur HTTP expérimental. Peut être utilisé pour envoyer des données en option de sortie, ou pour lire des données d'un client via HTTP POST en option d'entrée. Si défini à 2, active le serveur HTTP expérimental multi-client. Ceci n'est pas encore implémenté dans ffmpeg.c et ne doit donc pas être utilisé comme option de ligne de commande.

# 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

Ressource demandée par un client, lorsque le serveur HTTP expérimental est utilisé.

reply_code

Code HTTP renvoyé au client, lorsque le serveur HTTP expérimental est utilisé.

short_seek_size

Définit le seuil, en octets, à partir duquel une lecture anticipée doit être préférée à un positionnement et une nouvelle requête HTTP. Ceci est utile, par exemple, pour garantir que la même connexion est utilisée pour lire de gros paquets vidéo entrecoupés de petits paquets audio.

3.14.1 Cookies HTTP

Certaines requêtes HTTP seront refusées à moins que des valeurs de cookie ne soient transmises avec la requête. L'option cookies permet de spécifier ces cookies. Au minimum, chaque cookie doit spécifier une valeur ainsi qu'un chemin et un domaine. Les requêtes HTTP correspondant à la fois au domaine et au chemin incluent automatiquement la valeur du cookie dans le champ d'en-tête HTTP Cookie. Plusieurs cookies peuvent être délimités par un saut de ligne.

La syntaxe requise pour lire un flux en spécifiant un cookie est :

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

3.15 Icecast

Protocole Icecast (diffusion vers des serveurs Icecast)

Ce protocole accepte les options suivantes :

ice_genre

Définit le genre du flux.

ice_name

Définit le nom du flux.

ice_description

Définit la description du flux.

ice_url

Définit l'URL du site web du flux.

ice_public

Définit si le flux doit être public. La valeur par défaut est 0 (non public).

user_agent

Remplace l'en-tête User-Agent. Si non spécifié, une chaîne de la forme "Lavf/" est utilisée.

password

Définit le mot de passe du point de montage Icecast.

content_type

Définit le type de contenu du flux. Doit être défini s'il diffère de audio/mpeg.

legacy_icecast

Active la prise en charge des versions d'Icecast < 2.4.0, qui ne prennent pas en charge la méthode HTTP PUT mais la méthode SOURCE.

tls

Établit une connexion TLS (HTTPS) vers Icecast.

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

3.16 ipfs

Prise en charge du protocole InterPlanetary File System (IPFS). Il est possible d'accéder aux fichiers stockés sur le réseau IPFS via des passerelles (gateways). Ce sont des points de terminaison http(s). Ce protocole encapsule les protocoles natifs d'IPFS (ipfs:// et ipns://) pour les envoyer à une telle passerelle. Les utilisateurs peuvent (et devraient) héberger leur propre nœud, ce qui signifie que ce protocole utilisera la passerelle locale pour accéder aux fichiers sur le réseau IPFS.

Ce protocole accepte les options suivantes :

gateway

Définit la passerelle à utiliser. Si non définie, le protocole tente d'abord de localiser la passerelle locale en consultant $IPFS_GATEWAY, $IPFS_PATH et $HOME/.ipfs/, dans cet ordre.

Ce protocole peut être utilisé de 2 façons. Avec IPFS :

ffplay ipfs://<hash>

Ou avec le protocole IPNS (IPNS est un IPFS mutable) :

ffplay ipns://<hash>

3.17 mmst

Protocole MMS (Microsoft Media Server) sur TCP.

3.18 mmsh

Protocole MMS (Microsoft Media Server) sur HTTP.

La syntaxe requise est :

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

3.19 md5

Protocole de sortie MD5.

Calcule le hash MD5 des données à écrire, et à la fermeture l'écrit dans la sortie désignée, ou sur stdout si aucune n'est spécifiée. Peut être utilisé pour tester des muxers sans écrire de fichier réel.

Voici quelques exemples.

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

Notez que certains formats (typiquement MOV) exigent que le protocole de sortie soit positionnable, ils échoueront donc avec le protocole de sortie MD5.

3.20 pipe

Protocole d'accès aux tubes UNIX.

Lit et écrit à partir de tubes UNIX.

La syntaxe acceptée est :

pipe:[number]

Si fd n'est pas spécifié, number est le numéro correspondant au descripteur de fichier du tube (par exemple 0 pour stdin, 1 pour stdout, 2 pour stderr). Si number n'est pas spécifié, le descripteur de fichier stdout est utilisé par défaut pour l'écriture, stdin pour la lecture.

Par exemple, pour lire depuis stdin avec ffmpeg :

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

Pour écrire vers stdout avec 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

Ce protocole accepte les options suivantes :

blocksize

Définit la taille maximale des opérations d'E/S, en octets. La valeur par défaut est INT_MAX, ce qui revient à ne pas limiter la taille de bloc demandée. Définir cette valeur à un niveau raisonnablement bas améliore le temps de réaction aux demandes d'arrêt de l'utilisateur, ce qui est utile si la transmission des données est lente.

fd

Définit le descripteur de fichier.

Notez que certains formats (typiquement MOV) exigent que le protocole de sortie soit positionnable, ils échoueront donc avec le protocole de sortie pipe.

3.21 prompeg

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

Le FEC Pro-MPEG CoP#3 est un mécanisme de correction d'erreur par contrôle de parité 2D (forward error correction) pour les flux de transport MPEG-2 envoyés sur RTP.

Ce protocole doit être utilisé conjointement avec le muxer rtp_mpegts et le protocole rtp.

La syntaxe requise est :

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

Les ports UDP de destination sont port + 2 pour le flux FEC de colonne et port + 4 pour le flux FEC de ligne.

Ce protocole accepte les options suivantes :

l=n

Le nombre de colonnes (4-20, LxD <= 100)

d=n

Le nombre de lignes (4-20, LxD <= 100)

Exemple d'utilisation :

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

3.22 rist

Protocole Reliable Internet Streaming Transport

Les options acceptées sont :

rist_profile

Valeurs prises en charge :

‘simple’ ‘main’

C'est la valeur par défaut.

‘advanced’ buffer_size

Définit la taille interne du tampon RIST en millisecondes pour la retransmission des données. La valeur par défaut est 0, ce qui signifie la valeur par défaut de librist (1 sec). La valeur maximale est de 30 secondes.

fifo_size

Taille du fifo de sortie du récepteur librist, en nombre de paquets. Doit être une puissance de 2. Par défaut 8192 (contre 1024 par défaut pour librist).

overrun_nonfatal=1|0

Continuer en cas de débordement du tampon fifo librist. La valeur par défaut est 0.

pkt_size

Définit la taille maximale de paquet pour l'envoi des données. 1316 par défaut.

log_level

Définit le niveau de journalisation pour les messages de journalisation RIST. Vous n'avez besoin de le définir que si vous souhaitez explicitement activer les messages de niveau debug ou la simulation de perte de paquets ; sinon, le niveau de journalisation habituel est respecté.

secret

Définit le remplacement du secret de chiffrement ; non défini par défaut.

encryption

Définit le type de chiffrement, désactivé par défaut. Les valeurs acceptées sont 128 et 256.

3.23 rtmp

Real-Time Messaging Protocol.

Le Real-Time Messaging Protocol (RTMP) est utilisé pour la diffusion de contenu multimédia sur un réseau TCP/IP.

La syntaxe requise est :

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

Les paramètres acceptés sont :

username

Un nom d'utilisateur optionnel (surtout pour la publication).

password

Un mot de passe optionnel (surtout pour la publication).

server

L'adresse du serveur RTMP.

port

Le numéro du port TCP à utiliser (1935 par défaut).

app

C'est le nom de l'application à laquelle accéder. Il correspond généralement au chemin où l'application est installée sur le serveur RTMP (par exemple /ondemand/, /flash/live/, etc.). Vous pouvez également remplacer la valeur analysée depuis l'URI via l'option rtmp_app.

playpath

C'est le chemin ou le nom de la ressource à lire par rapport à l'application spécifiée dans app, éventuellement préfixé par "mp4:". Vous pouvez également remplacer la valeur analysée depuis l'URI via l'option rtmp_playpath.

listen

Agit comme un serveur, en attente d'une connexion entrante.

timeout

Délai maximal d'attente de la connexion entrante. Implique listen.

De plus, les paramètres suivants peuvent être définis via des options en ligne de commande (ou dans le code via des AVOptions) :

rtmp_app

Nom de l'application à laquelle se connecter sur le serveur RTMP. Cette option remplace le paramètre spécifié dans l'URI.

rtmp_buffer

Définit le temps de tampon du client en millisecondes. La valeur par défaut est 3000.

rtmp_conn

Paramètres de connexion AMF arbitraires supplémentaires, analysés depuis une chaîne, par exemple B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. Chaque valeur est préfixée par un caractère unique indiquant le type : B pour Boolean, N pour number, S pour string, O pour object, ou Z pour null, suivi d'un deux-points. Pour les Boolean, la donnée doit être 0 ou 1 pour FALSE ou TRUE, respectivement. De même, pour les Object, la donnée doit être 0 ou 1 pour terminer ou commencer un objet, respectivement. Les éléments de données dans des sous-objets peuvent être nommés, en préfixant le type par ’N’ et en indiquant le nom avant la valeur (c'est-à-dire NB:myFlag:1). Cette option peut être utilisée plusieurs fois pour construire des séquences AMF arbitraires.

rtmp_enhanced_codecs

Spécifie la liste des codecs que le client annonce prendre en charge dans un flux RTMP enrichi (enhanced). Cette option doit être définie avec une liste de valeurs fourcc séparées par des virgules, comme hvc1,av01,vp09 pour plusieurs codecs ou hvc1 pour un seul codec. La liste spécifiée est présentée dans la propriété "fourCcLive" du Connect Command Message.

rtmp_flashver

Version du plugin Flash utilisée pour exécuter le lecteur SWF. La valeur par défaut est LNX 9,0,124,2. (Lors de la publication, la valeur par défaut est FMLE/3.0 (compatible; ).)

rtmp_flush_interval

Nombre de paquets vidés (flushed) dans la même requête (RTMPT uniquement). La valeur par défaut est 10.

rtmp_live

Indique que le média est un flux en direct. Aucune reprise ni positionnement n'est possible dans les flux en direct. La valeur par défaut est any, ce qui signifie que l'abonné essaie d'abord de lire le flux en direct spécifié dans playpath. Si aucun flux en direct de ce nom n'est trouvé, il lit le flux enregistré. Les autres valeurs possibles sont live et recorded.

rtmp_pageurl

URL de la page web dans laquelle le média a été intégré. Par défaut, aucune valeur n'est envoyée.

rtmp_playpath

Identifiant du flux à lire ou à publier. Cette option remplace le paramètre spécifié dans l'URI.

rtmp_subscribe

Nom du flux en direct auquel s'abonner. Par défaut, aucune valeur n'est envoyée. Elle n'est envoyée que si l'option est spécifiée ou si rtmp_live est défini à live.

rtmp_swfhash

Hash SHA256 du fichier SWF décompressé (32 octets).

rtmp_swfsize

Taille du fichier SWF décompressé, requise pour SWFVerification.

rtmp_swfurl

URL du lecteur SWF pour le média. Par défaut, aucune valeur n'est envoyée.

rtmp_swfverify

URL vers le fichier swf du lecteur, calcule automatiquement le hash/la taille.

rtmp_tcurl

URL du flux cible. Par défaut proto://host[:port]/app.

tcp_nodelay=1|0

Définit TCP_NODELAY pour désactiver l'algorithme de Nagle. La valeur par défaut est 0.

Remarque : à l'heure actuelle, l'écriture sur la socket n'est pas optimisée pour minimiser les appels système, ce qui réduit l'efficacité / l'effet de TCP_NODELAY.

tcp_keepalive=1|0

Active le mécanisme TCP keepalive pour détecter les pairs inactifs et aider à maintenir les connexions inactives de longue durée. La valeur par défaut est 0.

Seule l'option de base keepalive (SO_KEEPALIVE) peut être activée ou désactivée. Les paramètres d'ajustement spécifiques à la plateforme tels que TCP_KEEPIDLE, TCP_KEEPINTVL ou TCP_KEEPCNT ne sont pas configurables et utilisent les valeurs par défaut du système d'exploitation.

Par exemple, pour lire avec ffplay une ressource multimédia nommée "sample" depuis l'application "vod" sur un serveur RTMP "myserver" :

ffplay rtmp://myserver/vod/sample

Pour publier vers un serveur protégé par mot de passe, en passant playpath et app séparément :

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.

Le protocole Encrypted Real-Time Messaging Protocol (RTMPE) sert à diffuser du contenu multimédia en flux au moyen de primitives cryptographiques standard, combinant un échange de clés Diffie-Hellman et HMACSHA256, ce qui génère une paire de clés RC4.

3.25 rtmps

Real-Time Messaging Protocol sur une connexion SSL sécurisée.

Le protocole Real-Time Messaging Protocol (RTMPS) sert à diffuser du contenu multimédia en flux sur une connexion chiffrée.

3.26 rtmpt

Real-Time Messaging Protocol tunnellisé via HTTP.

Le protocole Real-Time Messaging Protocol tunnellisé via HTTP (RTMPT) sert à diffuser du contenu multimédia en flux dans des requêtes HTTP afin de traverser les pare-feu.

3.27 rtmpte

Encrypted Real-Time Messaging Protocol tunnellisé via HTTP.

Le protocole Encrypted Real-Time Messaging Protocol tunnellisé via HTTP (RTMPTE) sert à diffuser du contenu multimédia en flux dans des requêtes HTTP afin de traverser les pare-feu.

3.28 rtmpts

Real-Time Messaging Protocol tunnellisé via HTTPS.

Le protocole Real-Time Messaging Protocol tunnellisé via HTTPS (RTMPTS) sert à diffuser du contenu multimédia en flux dans des requêtes HTTPS afin de traverser les pare-feu.

3.29 libsmbclient

libsmbclient permet de manipuler des ressources réseau CIFS/SMB.

La syntaxe suivante est requise.

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

Ce protocole accepte les options suivantes.

timeout

Définit le délai d'expiration, en millisecondes, des opérations d'E/S de socket utilisées par l'opération bas niveau sous-jacente. Par défaut, il vaut -1, ce qui signifie qu'aucun délai n'est spécifié.

truncate

Tronque les fichiers existants à l'écriture si la valeur est 1. Une valeur de 0 empêche la troncature. La valeur par défaut est 1.

workgroup

Définit le groupe de travail utilisé pour établir les connexions. Par défaut, aucun groupe de travail n'est spécifié.

Pour plus d'informations, voir : http://www.samba.org/.

3.30 libssh

Secure File Transfer Protocol via libssh

Permet de lire des ressources distantes ou d'y écrire via le protocole SFTP.

La syntaxe suivante est requise.

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

Ce protocole accepte les options suivantes.

timeout

Définit le délai d'expiration des opérations d'E/S de socket utilisées par l'opération bas niveau sous-jacente. Par défaut, il vaut -1, ce qui signifie qu'aucun délai n'est spécifié.

truncate

Tronque les fichiers existants à l'écriture si la valeur est 1. Une valeur de 0 empêche la troncature. La valeur par défaut est 1.

private_key

Spécifie le chemin du fichier contenant la clé privée à utiliser lors de l'autorisation. Par défaut, libssh recherche les clés dans le répertoire ~/.ssh/.

Exemple : lit un fichier stocké sur un serveur distant.

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

3.31 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

Real-Time Messaging Protocol et ses variantes prises en charge via librtmp.

Nécessite la présence des en-têtes et de la bibliothèque librtmp lors de la configuration. Il faut configurer explicitement le build avec "–enable-librtmp". Si elle est activée, cette option remplace le protocole RTMP natif.

Ce protocole fournit la plupart des fonctions client et quelques fonctions serveur nécessaires à la prise en charge de RTMP, de RTMP tunnellisé dans HTTP (RTMPT), de RTMP chiffré (RTMPE), de RTMP sur SSL/TLS (RTMPS) et des variantes tunnellisées de ces types chiffrés (RTMPTE, RTMPTS).

La syntaxe requise est :

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

où rtmp_proto est l'une des chaînes "rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts" correspondant à chaque variante RTMP, et server, port, app et playpath ont la même signification que celle spécifiée pour le protocole RTMP natif. options contient une liste d'options séparées par des espaces, de la forme key=val.

Voir la page de manuel de librtmp (man 3 librtmp) pour plus d'informations.

Par exemple, pour diffuser un fichier en temps réel vers un serveur RTMP avec ffmpeg :

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

Pour lire le même flux avec ffplay :

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

3.32 rtp

Real-time Transport Protocol.

La syntaxe requise pour une URL RTP est :

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

port spécifie le port RTP à utiliser.

options contient une liste d'options séparées par des &, de la forme key=val. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être spécifiées via les options de la ligne de commande (ou dans le code via des AVOptions).

La liste des options prises en charge suit.

ttl=n

Définit la valeur du TTL (Time-To-Live) (multidiffusion uniquement).

rtcpport=n

Définit le port RTCP distant à n.

localport, local_rtpport, localrtpport=n

Définit le port RTP local à n.

L'utilisation du nom d'option localport est obsolète et ne doit plus être utilisée.

local_rtcpport, localrtcpport=n'

Définit le port RTCP local à n.

pkt_size=n

Définit la taille maximale des paquets (en octets) à n.

buffer_size=size

Définit la taille maximale du tampon de la socket UDP, en octets.

connect=0|1

Effectue un connect() sur la socket UDP (si la valeur est 1) ou non (si la valeur est 0).

sources=ip[,ip]

Énumère les adresses IP sources autorisées.

block=ip[,ip]

Énumère les adresses IP sources interdites (bloquées).

write_to_source=0|1

Envoie les paquets à l'adresse source du dernier paquet reçu (si la valeur est 1) ou à une adresse distante par défaut (si la valeur est 0).

localaddr=addr

Adresse IP locale d'une interface réseau utilisée pour l'envoi de paquets ou la participation à des groupes de multidiffusion.

timeout=n

Définit le délai d'expiration des opérations d'E/S de socket à n, en microsecondes.

Remarques importantes :

  1. Si rtcpport n'est pas défini, le port RTCP est réglé sur la valeur du port RTP plus 1.
  2. Si localrtpport (le port RTP local) n'est pas défini, un port disponible est utilisé pour les ports RTP et RTCP locaux.
  3. Si localrtcpport (le port RTCP local) n'est pas défini, il est réglé sur la valeur du port RTP local plus 1.

3.33 rtsp

Real-Time Streaming Protocol.

RTSP n'est pas à proprement parler un gestionnaire de protocole dans libavformat ; il s'agit d'un demuxer et d'un muxer. Le demuxer prend en charge à la fois le RTSP normal (données transférées sur RTP ; utilisé par exemple par Apple et Microsoft) et le Real-RTSP (données transférées sur RDT).

Le muxer peut être utilisé pour envoyer un flux via RTSP ANNOUNCE vers un serveur qui le prend en charge (pour l'instant, Darwin Streaming Server et le serveur RTSP de Mischa Spiegelmock).

La syntaxe requise pour une URL RTSP est :

rtsp://hostname[:port]/path

Les options peuvent être définies sur la ligne de commande ffmpeg/ffplay, ou dans le code via des AVOptions ou dans avformat_open_input.

3.33.1 Muxer

Les options suivantes sont prises en charge.

rtsp_transport

Définit les protocoles de transport RTSP.

Accepte les valeurs suivantes :

‘udp’

Utilise UDP comme protocole de transport inférieur.

‘tcp’

Utilise TCP (entrelacement au sein du canal de contrôle RTSP) comme protocole de transport inférieur.

La valeur par défaut est ‘0’.

rtsp_flags

Définit les indicateurs RTSP.

Les valeurs suivantes sont acceptées :

‘latm’

Utilise la mise en paquets MP4A-LATM au lieu de MPEG4-GENERIC pour l'AAC.

‘rfc2190’

Utilise la mise en paquets RFC 2190 au lieu de RFC 4629 pour le H.263.

‘skip_rtcp’

N'envoie pas de rapports d'émetteur RTCP (sender reports).

‘h264_mode0’

Utilise le mode 0 pour le H.264 dans RTP.

‘send_bye’

Envoie des paquets RTCP BYE à la fin.

La valeur par défaut est ‘0’.

min_port

Définit le port UDP local minimal. La valeur par défaut est 5000.

max_port

Définit le port UDP local maximal. La valeur par défaut est 65000.

buffer_size

Définit la taille maximale du tampon de la socket, en octets.

pkt_size

Définit la taille maximale des paquets envoyés (en octets). La valeur par défaut est 1472.

3.33.2 Demuxer

Les options suivantes sont prises en charge.

initial_pause

Ne commence pas la lecture du flux immédiatement si la valeur est 1. La valeur par défaut est 0.

rtsp_transport

Définit les protocoles de transport RTSP.

Accepte les valeurs suivantes :

‘udp’

Utilise UDP comme protocole de transport inférieur.

‘tcp’

Utilise TCP (entrelacement au sein du canal de contrôle RTSP) comme protocole de transport inférieur.

‘udp_multicast’

Utilise la multidiffusion UDP comme protocole de transport inférieur.

‘http’

Utilise le tunnelage HTTP comme protocole de transport inférieur, ce qui est utile pour passer les proxys.

‘https’

Utilise le tunnelage HTTPs comme protocole de transport inférieur, ce qui est utile pour passer les proxys et largement utilisé pour des raisons de sécurité.

Plusieurs protocoles de transport inférieurs peuvent être spécifiés ; dans ce cas, ils sont essayés l'un après l'autre (si la configuration de l'un échoue, le suivant est essayé). Pour le muxer, seules les options ‘tcp’ et ‘udp’ sont prises en charge.

rtsp_flags

Définit les indicateurs RTSP.

Les valeurs suivantes sont acceptées :

‘filter_src’

N'accepte les paquets que de l'adresse et du port du pair négocié.

‘listen’

Agit comme un serveur, à l'écoute d'une connexion entrante.

‘prefer_tcp’

Essaie d'abord TCP pour le transport RTP, si TCP est disponible comme transport RTP de RTSP.

‘satip_raw’

Exporte le flux MPEG-TS brut au lieu de le démultiplexer. Cet indicateur se contente d'écrire le flux brut, en conservant intacts les PAT/PMT/PID d'origine.

La valeur par défaut est ‘none’.

allowed_media_types

Définit les types de média à accepter du serveur.

Les indicateurs suivants sont acceptés :

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

Par défaut, tous les types de média sont acceptés.

min_port

Définit le port UDP local minimal. La valeur par défaut est 5000.

max_port

Définit le port UDP local maximal. La valeur par défaut est 65000.

listen_timeout

Définit le délai d'expiration maximal (en secondes) pour établir une connexion initiale. Régler listen_timeout > 0 définit rtsp_flags sur ‘listen’. La valeur par défaut est -1, ce qui signifie un délai infini lorsque le mode ‘listen’ est activé.

reorder_queue_size

Définit le nombre de paquets à mettre en tampon pour gérer les paquets réordonnés.

timeout

Définit le délai d'expiration TCP de la socket, en microsecondes.

user_agent

Remplace l'en-tête User-Agent. S'il n'est pas spécifié, la chaîne d'identification de libavformat est utilisée par défaut.

buffer_size

Définit la taille maximale du tampon de la socket, en octets.

Lors de la réception de données sur UDP, le demuxer essaie de réordonner les paquets reçus (car ils peuvent arriver dans le désordre, ou être totalement perdus). Cela peut être désactivé en réglant le délai maximal de démultiplexage à zéro (via le champ max_delay de AVFormatContext).

Lors du visionnage de flux Real-RTSP multi-débit avec ffplay, les flux à afficher peuvent être choisis avec -vst n et -ast n pour la vidéo et l'audio respectivement, et peuvent être changés à la volée en appuyant sur v et a.

3.33.3 Exemples

Les exemples suivants utilisent tous les outils ffplay et ffmpeg.

  • Visionne un flux en UDP, avec un délai maximal de réordonnancement de 0.5 seconde :

    ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
    
  • Visionne un flux tunnellisé via HTTP :

    ffplay -rtsp_transport http rtsp://server/video.mp4
    
  • Envoie un flux en temps réel vers un serveur RTSP, pour que d'autres puissent le regarder :

    ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • Reçoit un flux en temps réel :

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

3.34 sap

Session Announcement Protocol (RFC 2974). Il ne s'agit pas à proprement parler d'un gestionnaire de protocole dans libavformat, mais d'un muxer et d'un demuxer. Il est utilisé pour la signalisation des flux RTP, en annonçant régulièrement le SDP des flux sur un port distinct.

3.34.1 Muxer

La syntaxe d'une URL SAP donnée au muxer est :

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

Les paquets RTP sont envoyés à destination sur le port port, ou sur le port 5004 si aucun port n'est spécifié. options est une liste séparée par des &. Les options suivantes sont prises en charge :

announce_addr=address

Spécifie l'adresse IP de destination pour l'envoi des annonces. Si elle est omise, les annonces sont envoyées à l'adresse de multidiffusion habituellement utilisée pour les annonces SAP, 224.2.127.254 (sap.mcast.net), ou ff0e::2:7ffe si destination est une adresse IPv6.

announce_port=port

Spécifie le port sur lequel envoyer les annonces. La valeur par défaut est 9875 si elle n'est pas spécifiée.

ttl=ttl

Spécifie la valeur de durée de vie (time to live) pour les annonces et les paquets RTP ; la valeur par défaut est 255.

same_port=0|1

Si la valeur est 1, envoie tous les flux RTP sur la même paire de ports. Si elle est nulle (valeur par défaut), tous les flux sont envoyés sur des ports uniques, chaque flux utilisant un port supérieur de 2 au précédent. VLC/Live555 exige que cette valeur soit réglée sur 1 pour pouvoir recevoir le flux. La pile RTP de libavformat, côté réception, exige que tous les flux soient envoyés sur des ports uniques.

Voici quelques exemples de lignes de commande.

Pour diffuser un flux sur le sous-réseau local, à regarder dans VLC :

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

De même, pour regarder dans ffplay :

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

Et pour regarder dans ffplay, en IPv6 :

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

3.34.2 Demuxer

La syntaxe d'une URL SAP donnée au demuxer est :

sap://[address][:port]

address est l'adresse de multidiffusion sur laquelle écouter les annonces ; si elle est omise, la valeur par défaut 224.2.127.254 (sap.mcast.net) est utilisée. port est le port écouté, 9875 si omis.

Le demuxer écoute les annonces sur l'adresse et le port donnés. Une fois une annonce reçue, il essaie de recevoir ce flux particulier.

Voici quelques exemples de lignes de commande.

Pour lire le premier flux annoncé sur l'adresse de multidiffusion SAP normale :

ffplay sap://

Pour lire le premier flux annoncé sur l'une des adresses de multidiffusion SAP IPv6 par défaut :

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

3.35 sctp

Stream Control Transmission Protocol.

La syntaxe d'URL acceptée est :

sctp://host:port[?options]

options contient une liste d'options séparées par des &, de la forme key=val. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être spécifiées via les options de la ligne de commande (ou dans le code via des AVOptions).

La liste des options prises en charge suit.

listen

Si une valeur quelconque est définie, écoute une connexion entrante. Par défaut, une connexion sortante est établie.

max_streams

Définit le nombre maximal de flux. Par défaut, aucune limite n'est définie.

3.36 shared

Enveloppe de cache inter-processus, thread-safe et persistante, pour les flux d'entrée. Met en cache le flux d'entrée dans un fichier du répertoire spécifié. Ceci est similaire à cache, mais avec un cache persistant sur disque pouvant être partagé entre plusieurs processus ou demuxers, même simultanément.

Le nom de fichier du cache est obtenu en hachant l'URL d'entrée ; il existe donc un risque de collision si la même URL est utilisée pour un contenu différent (par exemple en raison de données POST supplémentaires utilisées pour sélectionner l'ID de flux). Pour l'éviter, veillez à n'utiliser ce protocole que pour des URL identifiant le contenu de façon unique ; sinon, vous risquez d'obtenir un mélange incohérent de sources.

Les options acceptées sont :

cache_dir

Chemin du répertoire où les fichiers de cache sont stockés. Cette option est requise.

block_shift

Facteur de décalage (log2) de la taille de bloc utilisée pour les lectures/écritures internes. La valeur par défaut est 15, c'est-à-dire des blocs de 32KB. Si elle ne correspond pas à la valeur spécifiée lors de la création d'un fichier de cache existant, la valeur précédemment spécifiée est utilisée à la place.

read_only

Si la valeur est true, utilise le cache partagé pour les lectures mais n'y écrit aucun nouveau bloc. La valeur par défaut est false. Notez que même avec cette option activée, le fichier de cache est initialisé s'il n'existe pas déjà.

cache_verify

Si la valeur est true, vérifie toute donnée lue depuis le cache par rapport au flux d'entrée sous-jacent, et signale toute divergence. Notez que cela rend la couche de cache pratiquement inutile. Il s'agit purement d'une option de débogage.

cache_timeout

Si elle est réglée sur une valeur non nulle, spécifie le délai maximal (en microsecondes) à attendre que des données deviennent disponibles, si un autre processus est en train d'essayer de récupérer et de mettre en cache le même bloc au même moment. Si ce délai s'écoule, on suppose que l'autre processus a pu se bloquer ou se terminer entre-temps.

Si elle est réglée sur zéro, aucune attente n'est effectuée et tous les processus se mettent immédiatement en concurrence pour essayer de récupérer eux-mêmes les blocs manquants. La valeur par défaut est 10000 (10 ms).

retry_errors

Si la valeur est true (par défaut), les erreurs de lecture transitoires provenant du flux d'entrée sous-jacent sont ignorées et l'opération est retentée. Si la valeur est false, tout bloc dont la lecture a précédemment échoué est considéré comme définitivement inaccessible.

La syntaxe d'URL est

shared:URL

3.37 srt

Haivision Secure Reliable Transport Protocol via libsrt.

La syntaxe prise en charge pour une URL SRT est :

srt://hostname:port[?options]

options contient une liste d'options séparées par des &, de la forme key=val. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être spécifiées via les options de la ligne de commande (ou dans le code via des AVOptions).

La liste des options prises en charge suit.

connect_timeout=milliseconds

Délai d'expiration de connexion ; SRT ne peut pas se connecter pour un RTT > 1500 ms (2 échanges de handshake) avec le délai de connexion par défaut de 3 secondes. Cette option s'applique aux modes de connexion caller et rendezvous. Le délai de connexion est 10 fois la valeur définie pour le mode rendezvous (ce qui peut servir de contournement à ce problème de connexion avec les versions antérieures).

ffs=bytes

Flight Flag Size (taille de fenêtre), en octets. FFS est en réalité un paramètre interne et il convient de le régler à une valeur au moins égale à recv_buffer_size et mss. La valeur par défaut est relativement grande ; sauf à définir un tampon de réception très large, il n'est donc pas nécessaire de modifier cette option. La valeur par défaut est 25600.

inputbw=bytes/seconds

Débit d'entrée nominal de l'émetteur, en octets par seconde. Utilisé avec oheadbw, lorsque maxbw est réglé sur relatif (0), pour calculer le débit d'envoi maximal lorsque des paquets de récupération sont envoyés avec le flux média principal : inputbw * (100 + oheadbw) / 100. Si inputbw n'est pas défini alors que maxbw est réglé sur relatif (0), le débit d'entrée réel est évalué à l'intérieur de la bibliothèque. La valeur par défaut est 0.

iptos=tos

IP Type of Service. S'applique uniquement à l'émetteur. La valeur par défaut est 0xB8.

ipttl=ttl

IP Time To Live. S'applique uniquement à l'émetteur. La valeur par défaut est 64.

latency=microseconds

Délai de livraison de paquets basé sur l'horodatage (Timestamp-based Packet Delivery Delay). Sert à absorber les rafales de retransmissions de paquets perdus. Cet indicateur règle à la fois rcvlatency et peerlatency à la même valeur. Notez qu'avant la version 1.3.0, c'était le seul indicateur permettant de définir la latence ; cela équivaut cependant en pratique à définir peerlatency côté émetteur et rcvlatency côté récepteur, et l'envoi de flux bidirectionnel n'est pas pris en charge.

listen_timeout=microseconds

Définit le délai d'expiration d'écoute de la socket.

maxbw=bytes/seconds

Bande passante d'envoi maximale, en octets par seconde. -1 signifie infinie (la limite CSRTCC est de 30mbps), 0 signifie relative au débit d'entrée (voir inputbw), une valeur >0 est une limite absolue. La valeur par défaut est 0 (relative).

mode=caller|listener|rendezvous

Mode de connexion. caller ouvre une connexion cliente. listener démarre un serveur à l'écoute des connexions entrantes. rendezvous utilise le mode de connexion Rendez-Vous. La valeur par défaut est caller.

mss=bytes

Maximum Segment Size, en octets. Utilisé pour l'allocation de tampon et le calcul du débit au moyen d'un compteur de paquets supposant des paquets entièrement remplis. Le plus petit MSS entre les pairs est utilisé. Il est de 1500 par défaut sur l'ensemble d'Internet. C'est la taille maximale du paquet UDP et elle ne peut être que diminuée, sauf à disposer de réglages réseau dédiés inhabituels. La valeur par défaut est 1500.

nakreport=1|0

Si la valeur est 1, le récepteur envoie périodiquement des messages ‘UMSG_LOSSREPORT‘ jusqu'à ce qu'un paquet perdu soit retransmis ou volontairement abandonné. La valeur par défaut est 1.

oheadbw=percents

Surcharge de bande passante de récupération au-dessus du débit d'entrée, en pourcentage. Voir inputbw. La valeur par défaut est 25 %.

passphrase=string

Chaîne de phrase secrète de chiffrement/déchiffrement HaiCrypt, d'une longueur de 10 à 79 caractères. La phrase secrète est le secret partagé entre l'émetteur et le récepteur. Elle sert à générer la clé de chiffrement de clé (Key Encrypting Key) via PBKDF2 (Password-Based Key Derivation Function). Elle n'est utilisée que si pbkeylen est non nul. Côté récepteur, elle n'est utilisée que si les données reçues sont chiffrées. La phrase secrète configurée ne peut pas être récupérée (écriture seule).

enforced_encryption=1|0

Si la valeur est true, les deux parties de la connexion doivent avoir défini le même mot de passe (y compris vide, c'est-à-dire sans chiffrement). Si le mot de passe ne correspond pas ou qu'un seul côté n'est pas chiffré, la connexion est rejetée. La valeur par défaut est true.

kmrefreshrate=packets

Nombre de paquets transmis après lequel la clé de chiffrement est remplacée par une nouvelle clé. La valeur par défaut est -1. -1 signifie auto (0x1000000 dans la bibliothèque srt). La plage de cette option est les entiers de 0 à INT_MAX.

kmpreannounce=packets

Intervalle entre l'envoi d'une nouvelle clé de chiffrement et le moment où le basculement se produit. Cette valeur s'applique aussi à l'intervalle suivant, entre le moment où le basculement se produit et celui où l'ancienne clé de chiffrement est mise hors service. La valeur par défaut est -1. -1 signifie auto (0x1000 dans la bibliothèque srt). La plage de cette option est les entiers de 0 à INT_MAX.

snddropdelay=microseconds

Délai supplémentaire de l'émetteur avant l'abandon des paquets. Ce délai s'ajoute à la valeur d'intervalle de délai d'abandon par défaut.

Valeur spéciale -1 : ne jamais abandonner de paquets côté émetteur.

payload_size=bytes

Définit la taille déclarée maximale d'un paquet transféré lors d'un seul appel à la fonction d'envoi en mode live. Utilisez 0 si cette valeur n'est pas utilisée (ce qui est la valeur par défaut en mode file). La valeur par défaut est -1 (automatique), ce qui signifie généralement MPEG-TS ; si vous comptez utiliser SRT pour envoyer un type de charge utile différent, par exemple pour envelopper un flux live dans des paquets très petits, vous pouvez alors utiliser une taille de paquet maximale plus grande, sans toutefois dépasser 1456 octets.

pkt_size=bytes

Alias de ‘payload_size’.

peerlatency=microseconds

Valeur de latence (telle que décrite pour rcvlatency) définie côté émetteur comme valeur minimale pour le récepteur.

pbkeylen=bytes

Longueur de la clé de chiffrement de l'émetteur, en octets. Ne peut être réglée qu'à 0, 16, 24 ou 32. Active le chiffrement côté émetteur si différente de 0. Non requise côté récepteur (réglée à 0) ; la taille de clé est obtenue depuis l'émetteur lors du handshake HaiCrypt. La valeur par défaut est 0.

rcvlatency=microseconds

Temps qui doit s'écouler entre le moment où le paquet est envoyé et celui où il est livré à l'application réceptrice dans la fonction de réception. Ce temps doit être une durée de tampon suffisamment large pour couvrir le temps d'envoi, un RTT étendu de façon imprévue, et le temps nécessaire pour retransmettre le paquet UDP perdu. La valeur de latence effective est le maximum entre la valeur de cette option et celle de peerlatency définie par le pair. Avant la version 1.3.0, cette option n'est disponible que sous le nom latency.

recv_buffer_size=bytes

Définit la taille du tampon de réception UDP, exprimée en octets.

send_buffer_size=bytes

Définit la taille du tampon d'envoi UDP, exprimée en octets.

timeout=microseconds

Définit les délais d'expiration déclenchant une erreur pour les opérations de lecture, d'écriture et de connexion. Notez que la bibliothèque SRT dispose de délais internes contrôlables séparément ; la valeur définie ici n'en constitue qu'un plafond.

tlpktdrop=1|0

Too-late Packet Drop. Activé côté récepteur, il ignore les paquets manquants non livrés à temps et transmet à l'application les paquets suivants lorsque leur moment de lecture arrive. Il envoie également un faux ACK à l'émetteur. Activé côté émetteur et côté pair récepteur, l'émetteur abandonne les anciens paquets qui n'ont aucune chance d'être livrés à temps. Il est activé automatiquement côté émetteur si le récepteur le prend en charge.

sndbuf=bytes

Définit la taille du tampon d'envoi, exprimée en octets.

rcvbuf=bytes

Définit la taille du tampon de réception, exprimée en octets.

Le tampon de réception ne doit pas être supérieur à ffs.

lossmaxttl=packets

Valeur jusqu'à laquelle la Reorder Tolerance peut croître. Lorsque Reorder Tolerance est > 0, le rapport de perte de paquets est retardé jusqu'à l'arrivée de ce nombre de paquets. La Reorder Tolerance augmente chaque fois qu'un paquet "en retard" arrive sans que ce soit dû à une retransmission (c'est-à-dire lorsque les paquets UDP ont tendance à arriver dans le désordre), de la différence entre la dernière séquence et la séquence de ce paquet, sans dépasser la valeur de cette option. Par défaut, elle est de 0, ce qui signifie que ce mécanisme est désactivé et que le rapport de perte est toujours envoyé immédiatement dès qu'un "écart" apparaît dans les séquences.

minversion

Version SRT minimale requise du pair. Une connexion à un pair qui ne satisfait pas l'exigence de version minimale est rejetée.

Le format de version en hexadécimal est 0xXXYYZZ pour x.y.z sous forme lisible.

streamid=string

Chaîne limitée à 512 caractères pouvant être définie sur la socket avant la connexion. Cet ID de flux peut être récupéré côté listener depuis la socket renvoyée par srt_accept et connectée par une socket portant cet ID de flux défini. SRT n'impose aucune interprétation particulière du contenu de cette chaîne. Cette option n'a pas de sens en connexion Rendezvous ; le résultat pourrait être qu'un côté écrase simplement la valeur de l'autre, et lequel l'emporte est alors une question de chance.

srt_streamid=string

Alias de ‘streamid’ pour éviter un conflit avec l'option de ligne de commande ffmpeg.

smoother=live|file

Type de Smoother utilisé pour la transmission de cette socket, responsable de la transmission et du contrôle de congestion. Le type de Smoother doit être exactement le même des deux côtés de la connexion, sinon la connexion est rejetée.

messageapi=1|0

Si cette option est définie, la socket utilise la Message API ; sinon, elle utilise la Buffer API. Notez qu'en mode live (voir transtype), seule la Message API est disponible. En mode file, vous pouvez choisir l'un des deux modes suivants :

Stream API (par défaut, lorsque cette option est false). Dans ce mode, vous pouvez envoyer autant de données que vous le souhaitez avec une seule instruction d'envoi, ou même utiliser des fonctions dédiées qui lisent directement depuis un fichier. Le mécanisme interne se charge du contrôle de vitesse et de congestion. À la réception, vous pouvez également recevoir autant de données que voulu ; les données non extraites attendent le prochain appel. Il n'y a pas de frontière entre les portions de données en mode Stream.

Message API. Dans ce mode, votre unique instruction d'envoi transmet exactement un élément de données avec des frontières (un message). Contrairement au mode Live, ce message peut s'étendre sur plusieurs paquets UDP, la seule limite de taille étant qu'il doit tenir intégralement dans le tampon d'envoi. Le récepteur doit utiliser un tampon aussi grand que nécessaire pour recevoir le message, sinon celui-ci n'est pas délivré. Lorsque le message est incomplet (tous les paquets n'ont pas été reçus, ou il y a eu une perte de paquet), il n'est pas délivré.

transtype=live|file

Définit le type de transmission pour la socket ; en particulier, cette option règle plusieurs autres paramètres à leurs valeurs par défaut requises pour ce type de transmission.

live : définit les options pour une transmission live. Dans ce mode, chaque instruction d'envoi ne doit transmettre que la quantité de données tenant dans un seul paquet UDP, limitée à la valeur définie en premier lieu dans payload_size (1316 par défaut dans ce mode). Il n'y a pas de contrôle de vitesse dans ce mode, seulement un contrôle de bande passante, s'il est configuré, afin de ne pas dépasser la bande passante avec la transmission supplémentaire (paquets retransmis et paquets de contrôle).

file : définit les options pour une transmission non live. Voir messageapi pour plus d'explications.

linger=seconds

Nombre de secondes pendant lesquelles la socket attend les données non envoyées lors de la fermeture. La valeur par défaut est -1. -1 signifie auto (désactivé à 0 seconde en mode live, activé à 180 secondes en mode file). La plage de cette option est les entiers de 0 à INT_MAX.

tsbpd=1|0

Si la valeur est true, utilise le mode Timestamp-based Packet Delivery. Le comportement par défaut dépend du type de transmission : activé en mode live, désactivé en mode file.

ipv6only=1|0

Accepte ou non l'IPv4 lors de l'utilisation de l'adresse générique IPv6. À définir en cas d'écoute sur une adresse générique IPv6.

Pour plus d'informations, voir : https://github.com/Haivision/srt.

3.38 srtp

Secure Real-time Transport Protocol.

Les options acceptées sont :

srtp_in_suite srtp_out_suite

Sélectionne les suites de codage en entrée et en sortie.

Valeurs prises en charge :

‘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

Définit les paramètres de codage en entrée et en sortie, exprimés sous forme d'une représentation encodée en base64 d'un bloc binaire. Les 16 premiers octets de ce bloc binaire servent de clé maîtresse (master key), les 14 octets suivants de sel maître (master salt).

3.39 subfile

Extrait virtuellement un segment d'un fichier ou d'un autre flux. Le flux sous-jacent doit permettre le positionnement (seek).

Options acceptées :

start

Décalage de début du segment extrait, en octets.

end

Décalage de fin du segment extrait, en octets. Si la valeur est 0, extrait jusqu'à la fin du fichier.

Exemples :

Extrait un chapitre d'un fichier DVD VOB (secteurs de début et de fin obtenus en externe et multipliés par 2048) :

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

Lit un fichier AVI directement depuis une archive TAR :

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

Lit un fichier MPEG-TS du décalage de début jusqu'à la fin :

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

3.40 tee

Écrit la sortie vers plusieurs protocoles. Les différentes sorties sont séparées par |

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

3.41 tcp

Transmission Control Protocol.

La syntaxe requise pour une URL TCP est :

tcp://hostname:port[?options]

options contient une liste d'options séparées par des &, de la forme key=val. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être spécifiées via les options de la ligne de commande (ou dans le code via des AVOptions).

La liste des options prises en charge suit.

listen=2|1|0

Écoute une connexion entrante. 0 désactive l'écoute, 1 active l'écoute en mode client unique, 2 active l'écoute en mode multi-client. La valeur par défaut est 0.

local_addr=addr

Adresse IP locale d'une interface réseau utilisée pour la connexion de la socket tcp.

local_port=port

Port local utilisé pour la connexion de la socket tcp.

timeout=microseconds

Définit le délai d'expiration déclenchant une erreur, exprimé en microsecondes.

Cette option n'a de sens qu'en mode lecture : si aucune donnée n'arrive pendant plus de cet intervalle, une erreur est déclenchée.

listen_timeout=milliseconds

Définit le délai d'expiration d'écoute, exprimé en millisecondes.

recv_buffer_size=bytes

Définit la taille du tampon de réception, exprimée en octets.

send_buffer_size=bytes

Définit la taille du tampon d'envoi, exprimée en octets.

tcp_nodelay=1|0

Définit TCP_NODELAY pour désactiver l'algorithme de Nagle. La valeur par défaut est 0.

Remarque : à l'heure actuelle, l'écriture sur la socket n'est pas optimisée pour minimiser les appels système, ce qui réduit l'efficacité / l'effet de TCP_NODELAY.

tcp_mss=bytes

Définit la taille maximale de segment pour les paquets TCP sortants, exprimée en octets.

L'exemple suivant montre comment configurer une connexion TCP en écoute avec ffmpeg, puis y accéder avec 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 syntaxe requise pour une URL TLS/SSL est :

tls://hostname:port[?options]

options contient une liste d'options séparées par le caractère &, de la forme clé=valeur. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être indiquées via des options de ligne de commande (ou, dans le code, via des AVOptions).

La liste des options prises en charge est la suivante.

ca_file, cafile=filename

Fichier contenant les certificats racine de l'autorité de certification (CA) à considérer comme fiables. Si la bibliothèque TLS liée contient une valeur par défaut, il n'est parfois pas nécessaire de préciser ce paramètre pour que la vérification fonctionne, mais toutes les bibliothèques et configurations n'ont pas de valeurs par défaut intégrées. Le fichier doit être au format OpenSSL PEM.

tls_verify, verify=1|0

Si elle est activée, cette option tente de vérifier le pair avec lequel la communication a lieu. Notez que, avec OpenSSL, cela ne fait pour l'instant que s'assurer que le certificat du pair est signé par l'un des certificats racine de la base CA, sans valider que ce certificat correspond réellement au nom d'hôte auquel on cherche à se connecter (avec d'autres moteurs, le nom d'hôte est également validé).

Cette option est activée par défaut. La vérification du pair nécessite une base CA, que l'appelant doit parfois fournir lui-même.

cert_file, cert=filename

Fichier contenant un certificat à utiliser lors de la négociation avec le pair (en mode serveur, à l'écoute, celui-ci est le plus souvent exigé par le pair, alors que les certificats client ne sont obligatoires que dans certaines configurations).

key_file, key=filename

Fichier contenant la clé privée du certificat.

listen=1|0

Si elle est activée, cette option met le programme en écoute des connexions sur le port indiqué et lui fait jouer le rôle de serveur dans la négociation, au lieu du rôle de client.

http_proxy

Proxy HTTP à travers lequel établir un tunnel, par exemple http://example.com:1234. Le proxy doit prendre en charge la méthode CONNECT.

Exemples de lignes de commande :

Pour créer un serveur TLS/SSL qui diffuse un flux d'entrée.

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

Pour lire un flux depuis le serveur TLS/SSL avec ffplay :

ffplay tls://hostname:port

3.43 dtls

Datagram Transport Layer Security (DTLS)

La syntaxe requise pour une URL DTLS est :

dtls://hostname:port[?options]

options contient une liste d'options séparées par le caractère &, de la forme clé=valeur. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être indiquées via des options de ligne de commande (ou, dans le code, via des AVOptions).

DTLS partage la plupart de ses options avec TLS, mais fonctionne sur UDP au lieu de TCP.

La liste des options prises en charge est la suivante.

ca_file, cafile=filename

Fichier contenant les certificats racine de l'autorité de certification (CA) à considérer comme fiables. Si la bibliothèque TLS liée contient une valeur par défaut, il n'est parfois pas nécessaire de préciser ce paramètre pour que la vérification fonctionne, mais toutes les bibliothèques et configurations n'ont pas de valeurs par défaut intégrées. Le fichier doit être au format OpenSSL PEM.

tls_verify, verify=1|0

Si elle est activée, cette option tente de vérifier le pair avec lequel la communication a lieu. Notez que, avec OpenSSL, cela ne fait pour l'instant que s'assurer que le certificat du pair est signé par l'un des certificats racine de la base CA, sans valider que ce certificat correspond réellement au nom d'hôte auquel on cherche à se connecter.

Cette option est activée par défaut. La vérification du pair nécessite une base CA, que l'appelant doit parfois fournir lui-même.

cert_file, cert=filename

Fichier contenant un certificat à utiliser lors de la négociation avec le pair (en mode serveur, à l'écoute, celui-ci est le plus souvent exigé par le pair, alors que les certificats client ne sont obligatoires que dans certaines configurations).

key_file, key=filename

Fichier contenant la clé privée du certificat.

cert_pem=string

Chaîne PEM du certificat

key_pem=string

Chaîne PEM de la clé privée

listen=1|0

Si elle est activée, cette option met le programme en écoute des connexions sur le port indiqué et lui fait jouer le rôle de serveur dans la négociation, au lieu du rôle de client.

mtu=size

Définit l'unité de transmission maximale (MTU) des paquets DTLS.

use_srtp=1|0

Active l'extension DTLS use_srtp. Elle est utilisée dans les applications WebRTC pour établir les clés de chiffrement SRTP au cours de la négociation DTLS. Désactivée par défaut.

external_sock=1|0

Utilise un socket externe au lieu d'en créer un nouveau. Cette option n'a de sens que lorsqu'elle est transmise en interagissant avec le code via une API ; l'activer depuis la CLI provoque un échec immédiat. Désactivée par défaut.

Exemples de lignes de commande :

Pour créer un serveur DTLS :

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

Pour créer un client DTLS et envoyer des données au serveur :

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

3.44 udp

User Datagram Protocol.

La syntaxe requise pour une URL UDP est :

udp://hostname:port[?options]

options contient une liste d'options séparées par des &, de la forme key=val. L'encodage pourcentage standard (avec le signe plus pour l'espace) peut être utilisé pour échapper les clés et les valeurs.

Les options peuvent également être indiquées via des options de ligne de commande (ou, dans le code, via des AVOptions).

Si le threading est activé sur le système, un tampon circulaire sert à stocker les données entrantes, ce qui permet de réduire les pertes de données dues aux dépassements du tampon du socket UDP. Les options fifo_size et overrun_nonfatal se rapportent à ce tampon.

La liste des options prises en charge est la suivante.

buffer_size=size

Définit la taille maximale du tampon du socket UDP, en octets. Cela permet de définir la taille du tampon de réception ou d'émission, selon l'usage fait du socket. La valeur par défaut est 32 KB en sortie et 384 KB en entrée. Voir aussi fifo_size.

bitrate=bitrate

Si elle est définie sur une valeur non nulle, la sortie présente le débit binaire constant indiqué, à condition que l'entrée dispose d'assez de paquets pour le maintenir.

burst_bits=bits

Avec bitrate, ceci indique le nombre maximal de bits dans une rafale de paquets.

localport=port

Remplace le port UDP local utilisé pour la liaison.

localaddr=addr

Adresse IP locale d'une interface réseau utilisée pour l'envoi de paquets ou l'adhésion à des groupes multicast.

pkt_size=size

Définit la taille des paquets UDP, en octets.

reuse=1|0

Autorise ou interdit explicitement la réutilisation des sockets UDP.

ttl=ttl

Définit la valeur time to live (uniquement pour le multicast).

dscp=dscp

Définit le champ DSCP de 6 bits des paquets sortants.

connect=1|0

Initialise la socket UDP avec connect(). Dans ce cas, l'adresse de destination ne peut plus être modifiée ultérieurement avec ff_udp_set_remote_url. Si l'adresse de destination n'est pas connue au démarrage, cette option peut également être indiquée dans ff_udp_set_remote_url. Cela permet de connaître l'adresse source des paquets avec getsockname, et fait en sorte que les écritures renvoient AVERROR(ECONNREFUSED) en cas de réception de "destination unreachable". En réception, cela offre l'avantage de ne recevoir que les paquets provenant de l'adresse/du port du pair indiqué.

sources=address[,address]

Ne reçoit que les paquets envoyés depuis les adresses indiquées. En cas de multicast, ne s'abonne également qu'au trafic multicast provenant de ces adresses.

block=address[,address]

Ignore les paquets envoyés depuis les adresses indiquées. En cas de multicast, exclut également ces adresses source de l'abonnement multicast.

fifo_size=units

Définit la taille du tampon circulaire de réception UDP, exprimée en nombre de paquets de 188 octets. Si elle n'est pas indiquée, la valeur par défaut est 7*4096.

overrun_nonfatal=1|0

Permet de continuer en cas de dépassement du tampon circulaire de réception UDP. La valeur par défaut est 0.

timeout=microseconds

Définit le délai avant erreur, exprimé en microsecondes.

Cette option n'a de sens qu'en mode lecture : si aucune donnée n'arrive pendant un intervalle supérieur à ce délai, une erreur se déclenche.

broadcast=1|0

Autorise ou interdit explicitement la diffusion UDP.

Notez que la diffusion peut ne pas fonctionner correctement sur les réseaux dotés d'une protection contre les tempêtes de diffusion.

3.44.1 Exemples

  • Utilisez ffmpeg pour diffuser en flux UDP vers un point de terminaison distant :

    ffmpeg -i input -f format udp://hostname:port
    
  • Utilisez ffmpeg pour diffuser en flux au format mpegts sur UDP avec des paquets UDP de taille 188, en utilisant un grand tampon d'entrée :

    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    
  • Utilisez ffmpeg pour recevoir en UDP depuis un point de terminaison distant :

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

3.45 unix

Socket local Unix

La syntaxe requise pour une URL de socket Unix est :

unix://filepath

Les paramètres suivants peuvent être définis via des options de ligne de commande (ou, dans le code, via des AVOptions) :

timeout

Délai d'expiration, en ms.

listen

Crée le socket Unix en mode écoute.

type

Sélectionne le type de socket.

‘stream Correspond à SOCK_STREAM (orienté flux fiable)’ ‘datagram Correspond à SOCK_DGRAM (orienté paquet non fiable)’ ‘seqpacket Correspond à SOCK_SEQPACKET (orienté paquet fiable)’ pkt_size

Taille maximale de paquet pour les sockets orientés paquet (SOCK_DGRAM et SOCK_SEQPACKET). Si elle est supérieure à zéro, cette valeur est utilisée comme max_packet_size. Ignorée pour SOCK_STREAM. La valeur par défaut est 0.

3.46 zmq

Messagerie asynchrone ZeroMQ utilisant la bibliothèque libzmq.

Cette bibliothèque prend en charge la diffusion en unicast vers plusieurs clients sans dépendre d'un serveur externe.

La syntaxe requise pour diffuser un flux ou s'y connecter est :

zmq:tcp://ip-address:port

Exemple : création d'un flux localhost sur le port 5555 :

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

Plusieurs clients peuvent se connecter au flux à l'aide de :

ffplay zmq:tcp://127.0.0.1:5555

La diffusion vers plusieurs clients est mise en œuvre à l'aide d'un modèle ZeroMQ Pub-Sub. Le serveur se lie à un port et publie les données. Les clients se connectent au serveur (via l'adresse IP/le port) et s'abonnent au flux. L'ordre dans lequel le serveur et le client démarrent n'a généralement pas d'importance.

ffmpeg doit être compilé avec l'option –enable-libzmq pour prendre en charge ce protocole.

Les options peuvent être définies sur la ligne de commande ffmpeg/ffplay. Les options suivantes sont prises en charge :

pkt_size

Force la taille maximale de paquet pour l'envoi/la réception des données. La valeur par défaut est 131 072 octets. Côté serveur, cela définit la taille maximale des paquets envoyés via ZeroMQ. Côté client, cela définit la taille d'un tampon interne pour la réception des paquets. Notez que le pkt_size des clients doit être supérieur ou égal au pkt_size du serveur. Dans le cas contraire, le message reçu peut être tronqué, ce qui entraîne des erreurs de décodage.

4 Voir aussi

ffmpeg, ffplay, ffprobe, libavformat

5 Auteurs

Les développeurs de FFmpeg.

Pour plus de détails sur la paternité du projet, consultez l'historique Git du projet (https://git.ffmpeg.org/ffmpeg), par exemple en tapant la commande git log dans le répertoire des sources de FFmpeg, ou en parcourant le dépôt en ligne à l'adresse https://git.ffmpeg.org/ffmpeg.

Les mainteneurs des différents composants sont répertoriés dans le fichier MAINTAINERS de l'arborescence des sources.

Hébergement fourni par telepoint.bg