- Un muxer WHIP a été ajouté à
avformat/whipdans FFmpeg, permettant de gérer dans FFmpeg le streaming WebRTC avec une latence inférieure à une seconde - Le changement se base sur WHIP Version 3, et clarifie non seulement le nom et l’implémentation du muxer, mais aussi les contextes de logs SSL·DTLS·RTC et les messages d’erreur
- Les nombres magiques internes à l’implémentation ont été remplacés par des macros et fonctions, et le traitement de la liste de courbes DTLS, des profils SRTP, des nombres magiques ICE STUN et des types de payload RTP a également été affiné
- Dans le chemin média,
rtc->audio_par->frame_sizeest utilisé à la place d’une taille de trame fixe, et h264_mp4toannexb est utilisé pour la conversion Annex B des entrées MP4/ISOM - La configuration de build a été modifiée afin que
whipne soit activé que lorsque DTLS est activé ; la cible actuellement prise en charge se limite à OpenSSL
Ajout du muxer WHIP et intégration au build
- Un muxer WHIP a été ajouté à
avformat/whippour prendre en charge le streaming avec une latence inférieure à une seconde - L’implémentation se base sur WHIP Version 3
- Un nouveau fichier d’implémentation, libavformat/whip.c, a été ajouté
- La documentation et la configuration de build ont également été modifiées
Clarification du traitement DTLS·ICE·RTP
- Le muxer WHIP a été renommé et son implémentation affinée, avec une amélioration des messages d’erreur et des contextes de logs SSL·DTLS·RTC
- Les nombres magiques ont été remplacés par des macros, et une partie de la logique a été séparée en fonctions
- Les niveaux de logs ont aussi été ajustés pour être plus explicites
- Plusieurs changements liés à la compatibilité et aux performances ont été apportés au chemin DTLS
- La liste de courbes DTLS a été mise à jour
- Les noms des profils SRTP pour FFmpeg et OpenSSL ont été affinés
- Le handshake DTLS et le traitement ICE ont été optimisés pour améliorer les performances
- Un timeout de handshake unique et le rôle serveur sont utilisés afin d’éviter l’ARQ
- Le traitement ICE a été réorganisé de façon à regrouper les requêtes/réponses et le handshake DTLS dans une seule fonction
- Les nombres magiques ICE STUN ont été affinés
- Les types de payload RTP ont été mis à jour sur la base de la définition de Chrome
Traitement média et contrainte OpenSSL
- Côté audio, la taille de trame fixe a été remplacée par l’utilisation de
rtc->audio_par->frame_size h264_mp4toannexbest utilisé pour convertir les entrées MP4/ISOM en Annex B- Le problème de timestamp OPUS et le réglage du marqueur après utilisation de BSF ont aussi été corrigés
- Les implémentations TLS et DTLS ont été réunies dans une structure commune
- BIO callback, read, write,
print_ssl_error,openssl_init_ca_key_certetinit_bio_methodsont partagés - La même structure de données est utilisée
- BIO callback, read, write,
- Une erreur de build OpenSSL a été corrigée afin de fonctionner avec Pion
configurea été modifié pour n’activerwhipque lorsquedtlsest activé- La cible actuellement prise en charge est OpenSSL
1 commentaires
Avis de Hacker News
La diffusion WebRTC me réjouit vraiment. J’ai résumé les raisons dans le README de Broadcast Box et dans la PR d’OBS
Maintenant que GStreamer, OBS et FFmpeg prennent tous en charge WHIP, on a en quelque sorte un protocole universel de diffusion vidéo utilisable sur toutes les plateformes : mobile, web, embarqué, logiciels de diffusion, etc.
Je travaille depuis des années sur l’open source et la diffusion WebRTC, et je vois ça comme un jalon majeur
[0] https://github.com/Glimesh/broadcast-box?tab=readme-ov-file#...
[1] https://github.com/obsproject/obs-studio/pull/7926
Ce n’est pas la partie SCTP. En réalité, il s’agit de l’implémentation de WebRTC-HTTP Ingestion Protocol, ou WHIP, un protocole HTTP à faible latence permettant de se connecter à une passerelle qui communique avec les pairs via le protocole WebRTC basé sur SCTP
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
J’aimerais qu’un jour on puisse passer à un protocole P2P basé sur QUIC ou WebTransport plutôt que SCTP. QUIC gère bien, au-dessus de l’UDP existant, ce que SCTP faisait, sans augmenter fortement la complexité ni les écarts d’implémentation
L’un des candidats est Media-over-QUIC (MoQ), mais les navigateurs n’ont pas de QUIC P2P, et les progrès de ce côté semblent au point mort depuis des années
https://quic.video/ https://datatracker.ietf.org/group/moq/about/
La plupart des fournisseurs WHIP prennent aussi en charge DataChannel, mais ce n’est pas encore standardisé
Je me demande ce que ça signifie. Est-ce que cela veut dire qu’un site web peut se connecter directement à une instance FFmpeg pour recevoir un flux audio ou vidéo ?
L’explication de Phoronix est un peu plus détaillée : https://www.phoronix.com/news/FFmpeg-Lands-WHIP-Muxer
Ça devrait rendre beaucoup plus simple la création de flux auto-hébergés ou de CDN de streaming
FFmpeg est un logiciel média autonome et plug-and-play vraiment impressionnant quand on sait s’en servir
J’ai créé https://github.com/Glimesh/broadcast-box parce que je voulais rendre l’auto-hébergement et WebRTC beaucoup plus faciles
Le client XMPP Gajim attendait ça depuis longtemps. Les fonctionnalités d’appels audio/vidéo étaient pratiquement à l’abandon, et le projet attendait patiemment que FFmpeg permette de les réintégrer plus facilement
Maintenant, tout est devenu des jardins fermés ou des services propres à chaque application
Ça fait plaisir de tomber de façon inattendue sur le graphisme d’Anubis. Jusqu’ici, je l’ai vu notamment sur ffmpeg et gnu
J’espère que cela ne rendra pas la présence de ffmpeg sur un système plus dangereuse. Les failles de sécurité WebRTC sont à l’origine de nombreuses compromissions, et c’est l’une des premières fonctionnalités que je désactive quand j’installe un navigateur
Cette implémentation est très petite, et je suis convaincu à 100 % qu’elle offre aux utilisateurs le mieux possible
--without-whip. Ce serait idéalUne bonne approche consiste à créer une image Docker ne contenant que ffmpeg et ses dépendances, puis à lancer
docker runpour chaque tâche de conversion. Si l’on doit aussi générer des vignettes d’images ou de documents, on peut y ajouter ClamAV, OpenOffice et ImageMagickPersonnellement, je pense qu’un serveur qui va au-delà de la simple réception et distribution de fichiers générés par les utilisateurs, et qui les traite, devrait être placé dans un VLAN séparé et fortement verrouillé, ou dans un Security Group sur AWS
Ce n’est pas une critique ignorante des projets mentionnés. La sécurité est difficile, surtout lorsqu’on manipule des formats binaires accumulés au fil du temps et parfois rétroconçus de façon douteuse. Il est plus sage de le reconnaître avant de subir le sort de 4chan
[1] https://ffmpeg.org/security.html
C’est vraiment bien. Je construis un système de contrôle à distance basé sur le web, et si cela permet de transformer
ffmpeg gdigraben flux WebRTC que le client peut consommer directement, sans le contournement ExpressJS que j’utilise actuellement, j’en serais très satisfaitC’est intéressant de voir que je reste bloqué par la détection de bots sur iOS Safari. Ça arrive aussi bien sur le Wi-Fi de l’entreprise que sur les données cellulaires
J’aimerais bien qu’Anubis me laisse passer
"access denied"qui s’affiche, ou si le challenge tourne en boucle indéfinimentAnubis ne me laisse pas passer ;(