- Se añadió un muxer WHIP a
avformat/whip, lo que permite manejar dentro de FFmpeg streaming basado en WebRTC con menos de 1 segundo de latencia - El cambio se basa en WHIP Version 3, y además del nombre del muxer y su implementación, también se reorganizaron los contextos de logs y mensajes de error de SSL, DTLS y RTC
- Los números mágicos internos de la implementación fueron reemplazados por macros y funciones, y también se pulieron la lista de curvas de DTLS, el perfil SRTP, los números mágicos de ICE STUN y el manejo del RTP payload type
- En la ruta de medios, en lugar de un tamaño de frame fijo ahora se usa
rtc->audio_par->frame_size, y para convertir entradas MP4/ISOM a Annex B se utiliza h264_mp4toannexb - La configuración de compilación cambió para que
whipse habilite solo cuando DTLS está activado, y por ahora el soporte está limitado a OpenSSL
Adición del muxer WHIP y conexión con la compilación
- Se agregó un muxer WHIP a
avformat/whippara soportar streaming con menos de 1 segundo de latencia - La implementación se basa en WHIP Version 3
- Se añadió como nuevo archivo de implementación libavformat/whip.c
- También se modificaron la documentación y la configuración de compilación
Reorganización del manejo de DTLS, ICE y RTP
- El muxer WHIP fue refinado junto con el cambio de nombre, y se mejoraron los mensajes de error y los contextos de logs de SSL, DTLS y RTC
- Los números mágicos fueron reemplazados por macros y parte de la lógica se separó en funciones
- También se ajustaron los niveles de log para que sean más claros
- En la ruta de DTLS se incorporaron varios cambios relacionados con compatibilidad y rendimiento
- Se actualizó la lista de curvas de DTLS
- Se ajustaron los nombres de los perfiles SRTP para FFmpeg y OpenSSL
- Se optimizaron el DTLS handshake y el manejo de ICE para mejorar el rendimiento
- Se evita ARQ usando un único handshake timeout y el rol de servidor
- El manejo de ICE se reorganizó para unificar request/response y el DTLS handshake dentro de una sola función
- También se ajustaron los números mágicos de ICE STUN
- El RTP payload type se actualizó tomando como referencia la definición de Chrome
Procesamiento de medios y restricción a OpenSSL
- En audio, el tamaño de frame fijo fue reemplazado por el uso de
rtc->audio_par->frame_size - Para convertir entradas MP4/ISOM a Annex B se usa
h264_mp4toannexb - También se corrigieron el problema de timestamp de OPUS y la configuración de marker después de usar BSF
- Las implementaciones de TLS y DTLS se unificaron bajo una estructura común
- Se comparten BIO callback, read, write,
print_ssl_error,openssl_init_ca_key_certeinit_bio_method - Se usa la misma estructura de datos
- Se comparten BIO callback, read, write,
- Se corrigieron errores de compilación con OpenSSL para que funcione con Pion
configurese cambió para habilitarwhipsolo cuandodtlsestá activado- Actualmente el soporte es solo para OpenSSL
1 comentarios
Opiniones de Hacker News
Tengo muchas ganas de ver broadcasting con WebRTC. Dejé resumidas las razones en el README de Broadcast Box y en el PR de OBS
Ahora que GStreamer, OBS y FFmpeg soportan WHIP, básicamente tenemos un protocolo universal de transmisión de video que se puede usar en todas las plataformas: móviles, web, embebidos, software de broadcast, etc.
Llevo años trabajando en open source y broadcasting con WebRTC, y lo veo como un gran hito
[0] https://github.com/Glimesh/broadcast-box?tab=readme-ov-file#...
[1] https://github.com/obsproject/obs-studio/pull/7926
No se trata de la parte de SCTP. En realidad implementa WebRTC-HTTP Ingestion Protocol, es decir WHIP, un protocolo HTTP de baja latencia para conectarse a un gateway que se comunica con los peers mediante el protocolo basado en SCTP de WebRTC
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
Ojalá algún día podamos pasar de SCTP a un protocolo P2P basado en QUIC o WebTransport. QUIC maneja bien, sobre UDP existente, lo que hacía SCTP, sin aumentar mucho la complejidad ni las diferencias entre implementaciones
Uno de los candidatos es Media-over-QUIC (MoQ), pero los navegadores no tienen QUIC P2P y el avance por ese lado está detenido desde hace años
https://quic.video/ https://datatracker.ietf.org/group/moq/about/
La mayoría de los proveedores de WHIP también soportan DataChannel, pero todavía no está estandarizado
Me pregunto qué significa esto. ¿Quiere decir que un sitio web puede conectarse directamente a una instancia de FFmpeg para recibir un stream de audio o video?
La explicación de Phoronix es un poco más detallada: https://www.phoronix.com/news/FFmpeg-Lands-WHIP-Muxer
Con esto parece que será mucho más fácil crear streams autoalojados o una CDN de streaming
FFmpeg, si sabes usarlo, es un software multimedia independiente y plug-and-play realmente sorprendente
Creé https://github.com/Glimesh/broadcast-box porque quería hacer mucho más fáciles el autoalojamiento y WebRTC
Gajim, el cliente XMPP, llevaba mucho tiempo esperando esto. Su función de llamadas de audio/video estaba prácticamente abandonada, y venía esperando con paciencia que gracias a FFmpeg fuera más fácil volver a agregarla
Ahora todo son jardines cerrados o servicios separados por app
Da gusto encontrarse inesperadamente con el gráfico de Anubis. Hasta ahora lo he visto en ffmpeg, gnu y otros
Espero que esto no haga más peligroso tener ffmpeg en el sistema. Las vulnerabilidades de seguridad de WebRTC son causa de muchos incidentes de intrusión, y es una de las primeras funciones que desactivo cuando instalo un navegador
Esta implementación es muy pequeña, y estoy 100% seguro de que ofrece al usuario lo mejor posible
--without-whip. Eso sería idealConviene crear una imagen Docker que incluya solo ffmpeg y sus dependencias, y ejecutar
docker runpara cada tarea de conversión. Si también hay que generar miniaturas de imágenes o documentos, se pueden incluir ClamAV, OpenOffice e ImageMagickPersonalmente, creo que cualquier servidor que haga algo más que simplemente recibir y servir archivos generados por usuarios debería estar en una VLAN separada y muy restringida, o si es en AWS, dentro de un Security Group
Esto no es una crítica ignorante a los proyectos mencionados. La seguridad es difícil, sobre todo cuando se manejan formatos binarios acumulados durante mucho tiempo y a veces retroingenierizados de formas dudosas. Es más sensato reconocerlo antes de terminar como 4chan
[1] https://ffmpeg.org/security.html
Muy bueno. Estoy creando un control remoto basado en web, y si con esto puedo convertir
ffmpeg gdigraben un stream WebRTC para que el cliente lo consuma directamente, sin el trabajo de rodeo con ExpressJS que hago ahora, sería muy satisfactorioEs interesante que en iOS Safari me siga bloqueando la detección de bots. Me pasa tanto con el WiFi de la empresa como con datos móviles
Ojalá Anubis me dejara pasar
"access denied"o si el desafío se repite infinitamenteAnubis no me deja pasar ;(