Changelog — G Radio AoIP

Todas las versiones publicadas de gr-aoip.


[0.1.2] — 2026-05-13

Correcciones

  • Perfiles Estéreo — codecs no-Opus no funcionaban en TX ni en RX: el pipeline TX aplicaba opus_rate() (que fuerza el rate a valores válidos para Opus: 8k/12k/16k/24k/48kHz) a todos los codecs, incluso AAC, FLAC y PCM. El pipeline RX tenía hardcodeado application/x-rtp,encoding-name=OPUS y rtpopusdepay para todos los codecs, sin importar cuál estuviera configurado. Como resultado, solo Opus funcionaba en el perfil Estéreo.
  • PCM L16 — pipeline completamente rehecho con RFC 3551: en lugar de rtpgstpay/rtpgstdepay (que encapsulaba caps propietarias de GStreamer que rtpjitterbuffer no podía parsear, produciendo _gst_util_uint64_scale: assertion 'denom != 0' failed), PCM L16 ahora usa rtpL16pay/rtpL16depay — el mismo mecanismo estándar del perfil MPX. En TX se añade una etapa audioconvert ! audio/x-raw,format=S16BE antes del payloader (rtpL16pay requiere big-endian). En RX las caps especifican encoding-name=L16,clock-rate={rate},channels=2 con el sample rate real del audio.
  • package-all.sh — compilaciones ARM fallaban con «no Cargo.toml in /tmp»: la función make_zip ejecutaba cd /tmp sin restaurar el directorio de trabajo, lo que hacía que los builds de ARM32/ARM64 posteriores no encontraran el proyecto. Corregido usando un subshell (cd /tmp && zip ...).

Novedades

  • Subcomandos start / stop / status: el binario ahora acepta argumentos de línea de comandos.
  • gr-aoip start — intenta arrancar via systemctl --user start gr-aoip; si no hay servicio systemd, lanza el proceso en background directamente.
  • gr-aoip stop — para el servicio systemd y además mata cualquier proceso huérfano gr-aoip (ej. ejecuciones de desarrollo desde target/release/) excluyendo el propio proceso del subcomando.
  • gr-aoip status — indica si hay un proceso corriendo y en qué puerto web.
  • Buffer de red configurable en perfiles Estéreo y Mono: StereoConfig y MonoConfig tienen ahora el campo jitter_buffer_ms (default 200 ms, compatible con configs existentes via serde(default)). El pipeline RX Estéreo/Mono usa este valor en rtpjitterbuffer latency={ms} do-lost=true do-retransmission=false, con la misma lógica que el perfil MPX. La UI muestra el campo «Buffer de red RX (ms)» en la sección Estéreo.
  • UI — opciones filtradas por codec: el selector de Codec en el perfil Estéreo ahora actualiza dinámicamente los controles disponibles al cambiar de codec.
  • Opus: solo muestra 48 000 Hz (oculta el selector de frecuencia); bitrates 32–512 kbps; nota informativa.
  • AAC / MP3: 44 100 / 48 000 Hz; bitrates 64–320 kbps.
  • FLAC: 44 100 / 48 000 Hz; oculta el campo de bitrate (lossless); nota con ancho de banda típico.
  • PCM L16: 22 050 / 32 000 / 44 100 / 48 000 Hz; oculta el campo de bitrate; muestra el ancho de banda calculado en tiempo real (ej. «44 100 Hz → ≈1 411 kbps, calidad CD»).

[0.1.1] — 2026-05-03

Correcciones

  • Cambiar pestaña TX/RX revertía al modo guardado: el polling de config cada 5 segundos sobreescribía el modo seleccionado en la UI antes de que el usuario pulsara Aplicar.
  • Picker de dispositivos abría siempre en «Entradas»: ahora abre en la pestaña correcta según el modo activo (Entradas para TX, Salidas para RX).
  • Dispositivos duplicados en el picker: cuando PipeWire y ALSA coexisten, pactl y la enumeración ALSA listaban los mismos dispositivos físicos con nombres distintos. Se deduplican por nombre lógico.
  • Nombres de dispositivos truncados en el primer _: dispositivos como UMC202HD aparecían como BEHRINGER porque el nombre se cortaba en el primer guión bajo. Corregido el parseo de descripciones de pactl.

[0.1.0] — 2026-04-28

Lanzamiento inicial

  • Tres perfiles de audio: MPX (192 kHz, RTP/UDP, L16 mono), Estéreo (SRT + Opus/AAC, 44100/48000 Hz) y Mono (SRT + Opus, para enlaces hostiles).
  • Interfaz web embebida en el binario (puerto 7171) con monitor en tiempo real: gauge de buffer, VU meters, estadísticas de latencia/paquetes/pérdida, uptime.
  • Control ON/OFF del pipeline desde la UI; autostart configurable.
  • Clock recovery adaptativo para MPX (ajusta el rate del pipeline según la ocupación del jitter buffer).
  • Selector de dispositivos de audio con soporte PipeWire/PulseAudio y ALSA directo.
  • Protección por contraseña (hash SHA-256) para la sección de configuración.
  • Paquetes .deb y .zip para amd64, arm64 y armhf (cross-compilados en Docker Bookworm para garantizar compatibilidad GLIBC 2.36).