- In FFmpeg
avformat/whipwurde ein WHIP-Muxer aufgenommen, sodass sich WebRTC-basiertes Streaming mit unter 1 Sekunde Latenz direkt in FFmpeg handhaben lässt - Die Änderungen basieren auf WHIP Version 3; neben dem Namen des Muxers und der Implementierung wurden auch SSL-, DTLS- und RTC-Log-Kontexte sowie Fehlermeldungen bereinigt
- Interne Magic Numbers der Implementierung wurden durch Makros und Funktionen ersetzt; auch die Verarbeitung der DTLS Curve List, des SRTP-Profils, der ICE-STUN-Magic-Number und des RTP-Payload-Typs wurde überarbeitet
- Im Medienpfad wird statt einer festen Frame-Größe
rtc->audio_par->frame_sizeverwendet, und für die Annex-B-Konvertierung bei MP4/ISOM-Eingaben kommt h264_mp4toannexb zum Einsatz - Die Build-Konfiguration wurde so geändert, dass
whipnur bei aktiviertem DTLS eingeschaltet wird; aktuell ist die Unterstützung auf OpenSSL beschränkt
Hinzufügen des WHIP-Muxers und Anbindung an den Build
- Zu
avformat/whipwurde ein WHIP-Muxer hinzugefügt, der Streaming mit unter 1 Sekunde Latenz unterstützt - Die Implementierung basiert auf WHIP Version 3
- Als neue Implementierungsdatei wurde libavformat/whip.c hinzugefügt
- Auch Dokumentation und Build-Konfiguration wurden angepasst
Bereinigung der Verarbeitung von DTLS, ICE und RTP
- Der WHIP-Muxer wurde zusammen mit der Umbenennung der Implementierung überarbeitet; **SSL-, DTLS- und RTC-**Fehlermeldungen sowie Log-Kontexte wurden verbessert
- Magic Numbers wurden durch Makros ersetzt, und Teile der Logik wurden in Funktionen ausgelagert
- Auch die Log-Level wurden klarer abgestimmt
- Im DTLS-Pfad gab es mehrere Änderungen in Bezug auf Kompatibilität und Performance
- Die DTLS Curve List wurde aktualisiert
- Die SRTP-Profilnamen für FFmpeg und OpenSSL wurden überarbeitet
- DTLS-Handshake und ICE-Verarbeitung wurden zur Performance-Verbesserung optimiert
- Durch ein einzelnes Handshake-Timeout und die Server-Rolle wird ARQ vermieden
- Die ICE-Verarbeitung wurde in Richtung einer Zusammenführung von Request/Response und DTLS-Handshake in einer einzelnen Funktion bereinigt
- Die ICE-STUN-Magic-Number wurde angepasst
- Der RTP-Payload-Typ wurde auf Basis der Chrome-Definitionen aktualisiert
Medienverarbeitung und OpenSSL-Einschränkung
- Auf der Audio-Seite wurde die feste Frame-Größe durch die Verwendung von
rtc->audio_par->frame_sizeersetzt - Für die Konvertierung von MP4/ISOM-Eingaben nach Annex B wird
h264_mp4toannexbverwendet - Das OPUS-Timestamp-Problem und das Setzen des Markers nach Einsatz des BSF wurden ebenfalls korrigiert
- TLS- und DTLS-Implementierung wurden in einer gemeinsamen Struktur zusammengeführt
- BIO-Callback, Read, Write,
print_ssl_error,openssl_init_ca_key_certundinit_bio_methodwerden gemeinsam genutzt - Es wird dieselbe Datenstruktur verwendet
- BIO-Callback, Read, Write,
- Ein OpenSSL-Build-Fehler wurde behoben, damit es mit Pion funktioniert
configurewurde so geändert, dasswhipnur bei aktiviertemdtlseingeschaltet wird- Derzeit wird nur OpenSSL unterstützt
1 Kommentare
Meinungen auf Hacker News
Auf WebRTC-Broadcasting freue ich mich wirklich. Die Gründe habe ich im Broadcast-Box-README und im OBS-PR zusammengefasst.
Da jetzt GStreamer, OBS und FFmpeg alle WHIP unterstützen, gibt es damit gewissermaßen ein universelles Video-Broadcast-Protokoll, das sich auf allen Plattformen nutzen lässt – Mobile, Web, Embedded, Broadcast-Software usw.
Ich arbeite seit Jahren an Open Source und WebRTC-Broadcasting, und ich sehe das als großen Meilenstein.
[0] https://github.com/Glimesh/broadcast-box?tab=readme-ov-file#...
[1] https://github.com/obsproject/obs-studio/pull/7926
Es geht nicht um den SCTP-Teil. Tatsächlich wurde das WebRTC-HTTP Ingestion Protocol, kurz WHIP, implementiert – ein HTTP-Protokoll mit niedriger Latenz, um sich mit einem Gateway zu verbinden, das über das SCTP-basierte WebRTC-Protokoll mit Peers kommuniziert.
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
Ich hoffe, dass wir irgendwann statt SCTP auf ein P2P-Protokoll auf Basis von QUIC oder WebTransport wechseln können. QUIC erledigt auf bestehendem UDP vieles von dem, was SCTP getan hat, gut und erhöht Komplexität und Implementierungsunterschiede nicht stark.
Einer der Kandidaten ist Media-over-QUIC (MoQ), aber in Browsern gibt es kein P2P-QUIC, und die Entwicklung in diese Richtung scheint seit einigen Jahren zu stagnieren.
https://quic.video/ https://datatracker.ietf.org/group/moq/about/
Die meisten WHIP-Anbieter unterstützen zwar auch DataChannel, standardisiert ist das aber noch nicht.
Ich frage mich, was das bedeutet. Heißt das, dass eine Website sich direkt mit einer FFmpeg-Instanz verbinden und einen Audio- oder Videostream empfangen kann?
Die Erklärung bei Phoronix ist etwas ausführlicher: https://www.phoronix.com/news/FFmpeg-Lands-WHIP-Muxer
Damit dürfte es viel einfacher werden, selbst gehostete Streams oder ein Streaming-CDN aufzubauen.
FFmpeg ist wirklich erstaunliche eigenständige Plug-and-play-Mediensoftware, wenn man nur weiß, wie man sie benutzt.
Ich habe https://github.com/Glimesh/broadcast-box gebaut, weil ich Self-Hosting und WebRTC deutlich einfacher machen wollte.
Der XMPP-Client Gajim hat lange darauf gewartet. Die Audio-/Videoanruffunktion lag praktisch brach, und man hat geduldig darauf gewartet, dass FFmpeg es hoffentlich wieder einfacher macht, sie hinzuzufügen.
Inzwischen ist alles ein geschlossener Garten oder ein app-spezifischer Dienst.
Es ist schön, unerwartet die Anubis-Grafik zu sehen. Bisher habe ich sie unter anderem bei ffmpeg und gnu gesehen.
Ich hoffe, dass es dadurch nicht riskanter wird, ffmpeg auf dem System zu haben. WebRTC-Sicherheitslücken sind die Ursache vieler Kompromittierungen, und es ist eine der ersten Funktionen, die ich nach der Installation eines Browsers deaktiviere.
Diese Implementierung ist sehr klein, und ich bin zu 100 % überzeugt, dass sie den Nutzern das Bestmögliche bietet.
--without-whipaus dem Build herausnehmen kann, wenn man es nicht will oder braucht. Das wäre wohl ideal.Sinnvoll wäre ein Docker-Image, das nur ffmpeg und seine Abhängigkeiten enthält, und für jede Konvertierungsaufgabe
docker runauszuführen. Wenn auch Bild- oder Dokument-Thumbnails erzeugt werden müssen, kann man ClamAV, OpenOffice und ImageMagick ebenfalls hineinpacken.Persönlich finde ich, dass Server, die nutzergenerierte Dateien nicht nur entgegennehmen und ausliefern, sondern weiterverarbeiten, in ein separates, stark abgesichertes VLAN gehören – oder bei AWS in eine Security Group.
Das ist keine uninformierte Kritik an den genannten Projekten. Sicherheit ist schwer, besonders wenn man mit über lange Zeit gewachsenen und manchmal auf fragwürdige Weise per Reverse Engineering erschlossenen Binärformaten umgeht. Es ist klug, das anzuerkennen, bevor man wie 4chan erwischt wird.
[1] https://ffmpeg.org/security.html
Wirklich gut. Ich baue gerade eine webbasierte Fernsteuerung, und wenn ich damit
ffmpeg gdigrabin einen WebRTC-Stream verwandeln kann, den Clients direkt konsumieren können – ohne meinen aktuellen ExpressJS-Workaround –, wäre ich sehr zufrieden.Interessant, dass ich in iOS Safari immer wieder an der Bot-Erkennung hängen bleibe. Das passiert sowohl im Firmen-WLAN als auch über Mobilfunkdaten.
Ich wünschte, Anubis ließe mich mal durch.
"access denied"-Seite erscheint oder ob die Challenge endlos wiederholt wird.Anubis lässt mich nicht durch ;(